扫描仪/输入问题?

时间:2014-09-07 21:09:29

标签: java java.util.scanner

即使我添加了一个哨兵,我的代码也不起作用。它永远循环。

boolean exit = true;
    Scanner sc = new Scanner(System.in);
    ArrayList<String> inputData = new ArrayList<String>();
    ArrayList<Integer> outputData = new ArrayList<Integer>();

    while(sc.hasNext() && exit) {
        String aStr = sc.next();
        String sentinel = "0 0 0";
        if(aStr.equals(sentinel)){
            exit = false;
            System.out.println("Failed");
        }
        else{
            inputData.add(aStr);
        }
    }

    sc.close();

这是什么原因?

2 个答案:

答案 0 :(得分:0)

问题是next()使用空格作为分隔符,将输入0 0 0“分解”为0的3个不同输入。

替换:

String aStr = sc.next();

使用:

String aStr = sc.nextLine();

        if(aStr.equals(sentinel)){
            exit = false;
            System.out.println("Failed");
        }

使用:

        if(aStr.equals(sentinel)){
            System.out.println("Failed");
            break;
        }

完整代码:

Scanner sc = new Scanner(System.in);
ArrayList<String> inputData = new ArrayList<String>();
while(sc.hasNext()) {
    String aStr = sc.nextLine();
    String sentinel = "0 0 0";
    if(aStr.equals(sentinel)){
        System.out.println("Failed");
        break;
    }
    else{
        inputData.add(aStr);
    }
}
System.out.println(Arrays.toString(inputData.toArray())); // for debug
sc.close();

答案 1 :(得分:0)

Scanner的默认分隔符是空格。所以问题出在那里。

 String aStr = sc.nextLine();

这样可行。

您还可以尝试以下内容:

String address = System.console().readLine("Enter your Address: ");

这将允许您阅读整行。希望这会有所帮助。