Foros aprenderaprogramar.com

Aprender a programar => Aprender a programar desde cero => Mensaje iniciado por: Erik_Escriche en 06 de Noviembre 2016, 20:39

Título: Pedir datos por consola, blackslash, print, salto de línea Java CU00657B
Publicado por: Erik_Escriche en 06 de Noviembre 2016, 20:39
Buenos días.
Esta es mi propuesta para el ejercicio de la entrega CU00657B de "Aprender programación Java desde cero".

Código: [Seleccionar]
/* Este clase te dice la longitud de la cadena y si esta cadena comienza por la letra a. */
import java.util.Scanner;
public class DescribeCadena {
    public static void main (String [] args) {
        System.out.println ("Introduce un texto.");
        String entradaTeclado = "";
        Scanner entradaEscaner = new Scanner (System.in);
        entradaTeclado = entradaEscaner.nextLine (); // Crea un String que se corresponde con el texto introducido.
        int numeroCaracteres = entradaTeclado.length();
        if (numeroCaracteres<5) {
            System.out.print ("La cadena introducida tiene menos de 5 caracteres");
        } else if (numeroCaracteres>=5&&numeroCaracteres<=15) {
            System.out.print ("La cadena introducida tiene entre 5 y 15 caracteres");
        } else {
            System.out.print ("La cadena introducida tiene más de 15 caracteres");
        }
        String primeraLetra = entradaTeclado.substring(0,1);
        if (primeraLetra.equals ("a") || primeraLetra.equals ("A") || primeraLetra.equals ("á") || primeraLetra.equals ("Á") ) {
            System.out.print (" y comienza por a.\n");
        } else {
            System.out.print (" y no comienza por a.\n");
        }
    }
}

He visto que no puedo usar un código tipo primeraLetra == "a". ¿El operador == solo puede usarse con tipos primitivos?
Título: Re:Pedir datos por consola, blackslash, print, salto de línea Java CU00657B
Publicado por: ESOJ en 07 de Noviembre 2016, 23:57
Buenas noches.

El código es correcto.
Podrías ahorrarte las variables numeroCaracteres y primeraLetra y usar directamente los métodos.
Además usando el método equalsIgnoreCase() en lugar de equals() ya no hace diferencia entre si la letra es mayúscula o minúscula.
Quedaría:
Código: [Seleccionar]
import java.util.Scanner;

public class PruebaTexto1{

    public static void main (String [] args){

        System.out.println("Empezamos el programa");
        System.out.println("Por favor introduzca una cadena por teclado");
        String entradaTeclado = "";
        Scanner entradaEscaner = new Scanner(System.in);//Creacion de un objeto scanner
        entradaTeclado = entradaEscaner.nextLine();
        if (entradaTeclado.length()<5){System.out.print("La palabra introducida tiene menos de 5 caracteres");}
        else if(entradaTeclado.length()==5||entradaTeclado.length()<=15){System.out.print("La palabra introducida tiene entre 5 y 15 caracteres");}
        else{System.out.print("La palabra introducida tiene mas de 15 caracteres");}
        if (entradaTeclado.substring(0,1).equalsIgnoreCase("a")||entradaTeclado.substring(0,1).equalsIgnoreCase("á")){System.out.print(" y empieza por A");}
        else{System.out.print(" y no empieza por A");}
    }
}

En cuanto a la pregunta que hacías de por que no se podía usar == , es porque el método equals y el operador = = hacen dos pruebas completamente diferentes para la igualdad. Mientras que el método equals compara los caracteres contenidos en una String, el operador = = compara dos referencias de objeto para ver si se refieren a la misma instancia. Por tanto, no podemos usar el signo == por que esta sería una comparación binaria de punteros a memoria y no nos devolvería el valor correcto
Título: Re:Pedir datos por consola, blackslash, print, salto de línea Java CU00657B
Publicado por: Erik_Escriche en 08 de Noviembre 2016, 18:46
Gracias por contestar, ESOJ. Muy buenas explicaciones, ahora lo he entendido.