扫描仪无法正常工作

时间:2013-03-25 22:30:46

标签: java string terminal java.util.scanner

我有这段代码:

byte[] nombre = new byte[20];
                System.out.print("Cuenta a modificar: ");
                cuenta = s.nextInt();
                boolean existe = estaRepetido(cuenta);
                if (existe == false){
                    System.out.println("La cuenta no existe");
                }
                else {
                    String nomCliente;
                    System.out.print("Nombre: ");
                    nomCliente = s.nextLine();
                    System.out.print("Cantidad: ");
                    double cantidad = Double.parseDouble(s.nextLine());
                    for( int i = 0; i < 20 && i < nomCliente.getBytes().length; i++ ){
                        nombre[i] = nomCliente.getBytes()[i];
                    }
                    String nomModificar = new String (nombre);
                    modificar(cuenta, nomModificar, cantidad);
                }

但是当在终端上以某种方式在海外运行nomCliente = s.nextLine();以这样的结尾结束:

Cuenta a modificar: 0
Nombre: Cantidad: 0

任何想法?这只是一个非常大的方法的一部分,但这是唯一造成麻烦的扫描仪。

2 个答案:

答案 0 :(得分:1)

nextInt()方法离开\n(结束行)符号,并由nextLine()立即拾取,跳过下一个输入。你想要做的是使用nextLine()作为一切,并在以后解析它:

String nextIntString = keyboard.nextLine(); //get the number as a single line
int nextInt = Integer.parseInt(nextIntString); //convert the string to an int

这是迄今为止避免问题的最简单方法 - 不要混淆“下一步”方法。仅使用nextLine()然后解析int或之后单独的单词。

答案 1 :(得分:0)

如果您想在扫描下一个输入之前等待用户输入密钥,则需要使用s.nextLine()。 使用:

try {
    cuenta = Integer.parseInt(s.nextLine());
} catch (Exception e){
    //Do whatever you want.
}