Java Scanner输入困境。自动输入而不允许用户输入

时间:2010-12-24 04:53:05

标签: java input java.util.scanner

非常感谢您的回复,我可能会坚持只添加额外的input.nextLine()语句以捕获任何“剩余”

所以在这段代码中我输入2,一旦进入if语句,它就会跳过“sCreateLogin = input.nextLine();”然后进入下一个输入。可能是因为扫描仪中存在一些挥之不去的东西但我无法弄清楚它为什么会这样做以及如何解决它。

如果我输入input.next()它会停止,但它不够好,因为如果你不小心添加一个空格,它也会跳过下一个输入。我知道我可以解析它等等,但我仍然对此感到困惑。

Scanner input = new Scanner(System.in);
System.out.println("(1) Login");
System.out.println("(2) Create Account");
int iAccountOption = input.nextInt();
if(iAccountOption==2)
{
System.out.println("Input desired login: ");
String sCreateLogin = input.nextLine();
System.out.println("Input desired password: ");
String sCreatePassword = input.nextLine();
}

5 个答案:

答案 0 :(得分:2)

问题很可能是没有处理的行令牌。要修复此问题,请在input.nextInt()之后修复;添加一个额外的input.nextLine()以吞下行标记的结尾:

int iAccountOption = input.nextInt();
input.nextLine();
if (iAccountOption == 2) {
   .....

答案 1 :(得分:1)

我建议你使用以下两种方法之一: 1.使用BufferedReader类 1a。使用BufferedReader类并使用InputStreamReader类包装它。

BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
//string str = br.readLine();     //for string input
int i = Integer.parseInt(br.readLine());     // for Integer Input

1b。现在,由于readLine方法抛出IOException,因此您需要捕获它。所以整个代码看起来都是这样的。

try{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in))
//string str = br.readLine();     //for string input
int i = Integer.parseInt(br.readLine());     // for Integer Input
}catch(IOException ioe){
ioe.PrintStackTrace();
}

2.如果您使用的是Java SE6或更高版本,则可以使用Console类

Console cons = System.console();
String str = cons.readLine("Enter name :");
System.out.print("your name :"+str);

答案 2 :(得分:0)

尝试为String使用不同的Scanner对象。

答案 3 :(得分:0)

它正在跳过sCreateLogin,因为scanner.nextLine()已经有一个值“\ r \ n”。 所以我将所有扫描仪都更改为nextLine()。它运作得很好,但也许这不是最好的主意。

package com.stackoverflow.main;

import java.util.Scanner;

public class SO4524279 {
public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    System.out.println("(1) Login");
    System.out.println("(2) Create Account");
    int iAccountOption = new Integer(scanner.nextLine());
    String sCreateLogin = "";
    String sCreatePassword = "";
    if (iAccountOption == 2) {
        System.out.println("Input desired login: ");
        sCreateLogin = scanner.nextLine();
        System.out.println("Input desired password: ");
        sCreatePassword = scanner.nextLine();
    }
    System.out.println("Login: " + sCreateLogin + "Pass: " + sCreatePassword);
}

}

请记住在新的Integer(scanner.nextLine())

上使用try catch

答案 4 :(得分:0)

    Scanner input = new Scanner(System.in);
    System.out.println("(1) Login");
    System.out.println("(2) Create Account");
    int iAccountOption = input.nextInt();
    if (iAccountOption == 2) {
        input.nextLine(); // here you forget
        System.out.println("Input desired login: ");
        String sCreateLogin = input.nextLine();
        System.out.println("Input desired password: ");
        String sCreatePassword = input.nextLine();
        System.out.println(sCreateLogin + "  " + sCreatePassword);
    }