es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Java: es posible detener el escáner de pausar la consola.

Intentando crear un pequeño programa que pueda aceptar entradas a través de la consola, al mismo tiempo que devuelve datos a través de ella. Uso un bucle para ello, pero cada vez que intento agregar la capacidad de ingresar información en la consola, el programa se descompone.

En esencia, el código es así:

// devolviendo cosas a la consola. Todo funciona bien

if (scanner.hasNext() && scanner.nextLine() != null) {
  String input = scanner.nextLine();
}

Eso está contenido en el bucle que también hace las partes para devolver las cosas. El problema es que el bucle deja de funcionar cuando agrego la parte sobre el escáner. Entonces, ¿hay alguna manera de evitar que el escáner detenga el resto del bucle para devolver las cosas, o básicamente una manera de hacer que no tenga que presionar Enter para que el ciclo se repita?

Editar: aquí está todo el segmento de código, para un mejor diagnóstico. El lector es una entrada de flujo desde otra parte del código.

while (verdadero) {
  String input = self.reader.nextLine();
  Scanner in = new Scanner(System.in);
  String[] subbed = input.split(" ");
  switch (subbed[0].toLowerCase()) {
    caso "setid":
      self.setPlayerID(Integer.parseInt(subbed[1]));
      System.out.println("ID de jugador establecido en: " + self.playerID);
      romper;
    caso "servidor":
      System.out.println(input.replaceAll(subbed[0] + " ", ""));
      romper;

  }
  if (in.hasNext()) {
    String out = in.nextLine();
  }

}
Tags:  , ,

Answer

  1. Avatar for davy.ai

    Parece que estás intentando usar un objeto Scanner para leer la entrada desde la consola mientras que también estás realizando un bucle en el código. Desafortunadamente, el objeto Scanner bloqueará el bucle hasta que reciba la entrada desde la consola.

    Una forma de solucionar esto es usar un objeto BufferedReader en lugar de un objeto Scanner. El objeto BufferedReader no bloqueará el bucle y podrás usar el método readLine() para leer la entrada desde la consola.

    Aquí te mostramos un ejemplo de cómo podrías usar un objeto BufferedReader para leer la entrada desde la consola:

    BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

    while (true){
    String input = self.reader.nextLine();
    String[] subbed = input.split(” “);
    switch (subbed[0].toLowerCase()) {
    case “setid”:
    self.setPlayerID(Integer.parseInt(subbed[1]));
    System.out.println(“Se estableció el ID del jugador como: ” + self.playerID);
    break;
    case “server”:
    System.out.println(input.replaceAll(subbed[0] + ” “, “”));
    break;
    }
    String out = reader.readLine();
    }

Comments are closed.