System.in.read (); comparando

En mi clase estamos empezando a aprender Java, nos encargaron explicar por qué este código:

import java.io.IOEXception;

 class Inputif {
    public static void main(String args[]) throws java.io.IOException {

         char ch, ch2;

         System.out.print("Hit a key and press Enter: ");

         ch = (char) System.in.read();

         System.out.println("Hit a second key and press Enter: ");

         ch2 = (char) System.in.read();

         if (ch == ch2) System.out.println("Same"); else System.out.println("different"); 
   }
}

produce esto: salida

en esta captura de pantalla, acabo de iniciar el programa y escribí "a" y luego presioné enter.

Cuando ejecuto el programa, me pide que ingrese el primer carácter, luego debería solicitarme que ingrese el segundo, pero omite eso e imprime el final "diferente". No se porque.

El código debe comparar los dos caracteres que ingresa el usuario y, si son iguales, debe imprimir "Mismo", de lo contrario, debe decir "diferente".

Gracias por cualquier respuesta!

Respuesta 1

Hice algunos cambios en su programa para darle una idea de lo que está sucediendo:

 public static void main(String args[]) throws java.io.IOException {

    char ch, ch2;

    System.out.print("Hit a key and press Enter: ");

    ch = (char) System.in.read();

    System.out.println("Hit a second key and press Enter: ");

    ch2 = (char) System.in.read();
    int x1=ch;
    int x2 = ch2;
    System.out.println("x1="+x1+" | x2="+x2);
    if (ch == ch2) System.out.println("Same"); else System.out.println("different");
}

Ejecute el programa anterior dos veces: - escriba "a" y presione enter. - pulsa enter dos veces

Explicación: System.in es una instancia de InputStream y el método de lectura de un InputStream https://docs.oracle.com/javase/7/docs/api/java/io/InputStream.html que "Lee el siguiente byte de datos desde la secuencia de entrada ". El problema es que cuando presionas enter estás agregando un byte extra al flujo de entrada y SIEMPRE ch2 lo almacenará. * Nota: x1, x2 mostrará los códigos ASCII de los caracteres que golpeó.

Respuesta: 2

En estas situaciones, es posible que desee utilizar un escáner:

class Inputif {
    public static void main(String args[]) throws java.io.IOException {

        char ch, ch2;

        Scanner scanner = new Scanner(System.in);

        System.out.print("Hit a key and press Enter: ");

        ch = scanner.next().charAt(0);

        System.out.println("Hit a second key and press Enter: ");

        ch2 = scanner.next().charAt(0);

        if (ch == ch2)
            System.out.println("Same");
        else
            System.out.println("different");
    }
}

Es solo un ejemplo. Su problema es la nueva línea, por lo que quizás Scanner pueda ayudarlo aquí.

Respuesta: 3

Acceda a archivos PDF desde 'res / raw' o carpeta de activos mediante programación para analizar con los métodos dados Explicación: En este momento, este programa accede a un archivo desde un administrador de archivos que toma los archivos seleccionados ...

Tengo esto, por lo que lo haré con éxito, pero también imprimirá el mensaje de la lista vacía, pero no estoy muy seguro de por qué. Todavía estoy aprendiendo sobre la recursividad, así que me disculpo si me he perdido algo ...

Preguntas: Hola, quiero insertar un mapa dinámico de Google en mi sitio web por dirección IP. Obtuve los datos lat / long usando herramientas de IPlocation. Todavía no pude conectar los datos lat / log de IPlocation a google ...

Necesito una expresión regular que compruebe si es una cadena entre comillas (por ') con posibles escapes \' dentro. Entonces, se me ocurre la siguiente expresión regular, \ '(\\. | [^ \']) * \ '. "" "\ '(\\. | [^ \']) * \ '" "". r.findFirstIn (s "' $ {" a "* 100} '") ...