使用Scanner处理用户输入

时间:2014-01-28 06:09:42

标签: java java.util.scanner

我正在尝试通过单行输入检索用户输入:例如5,6,4,8,9使用扫描仪Delimiter作为逗号。如何使用此类型的输入检索任意数量的整数?也就是说,无需询问用户他们希望输入多少个整数。这是我一直在使用的代码,但是当我希望它打破时,不能有while循环中断。请注意,我保留System.out以跟踪程序当前运行的位置。令人困惑的一部分是,我可以以这种格式获得用户输入,但是程序停止并再次请求用户输入,然后如果输入是一个整数,则它要求更多输入,直到用户输入更长的输入流(至少2,6 +输入)然后输出字符串“call break”然后“while while while循环”。

import java.io.IOException;
import java.util.ArrayList;
import java.util.Scanner;


public class Lab1 {

    /**
     * @param args
     * @throws IOException 
     * @throws NumberFormatException 
     */
    @SuppressWarnings("resource")
    public static void main(String[] args) throws NumberFormatException, IOException {
        // TODO Auto-generated method stub
        ArrayList<Integer> numbers = new ArrayList<Integer>();
        int numberList;
        Scanner scanner = new Scanner(System.in);
        scanner.useDelimiter(",");
        System.out.print("Enter integers: ");

        while(scanner.hasNext())//------------------------while loop------
        {
            if(scanner.hasNextInt())
            {
                numberList = scanner.nextInt();
                numbers.add(numberList);
                System.out.println(numbers.toString() + " " + numbers.size());
            }
            else 
            {
                System.out.println("called break");
                break;
            }
            System.out.println("Inside of while loop");
        }//-------------------------------------------------end of while loop------

        System.out.println("outside of the while loop now");
    } 
}

Input: 1,2,3,4,5
Enter integers: 1,2,3,4,5
[1] 1
Inside of while loop
[1, 2] 2
Inside of while loop
[1, 2, 3] 3
Inside of while loop
[1, 2, 3, 4] 4
Inside of while loop

即使在5之后没有整数并且程序正在等待更多输入,我仍然在while循环中,现在如果我在最后插入一个非整数值,我会得到同样的东西。在这两个结果之后,一旦用户输入更多值(1,2),程序退出while循环并成功完成。一旦使用逗号分隔符方法输入整数,我怎样才能使while循环中断?

2 个答案:

答案 0 :(得分:2)

我知道这不会回答你的问题,但这是实现目标的另一种方式:

此处使用split(delimiter)方法,该方法将返回String[]数组。然后在for循环中,使用Integer.parseInt()String转换为整数:

public static void main(String[] args)
{
    ArrayList<Integer> numbers = new ArrayList<Integer>();
    int numberList;
    Scanner scanner = new Scanner(System.in);
    scanner.useDelimiter(",");
    System.out.print("Enter integers: ");
    String[] parts = scanner.nextLine().split(",");

    // Add int's to the array 'numbers'
    for (String s : parts) {
        numbers.add(Integer.parseInt(s)); // Convert String to Integer
    }
}

答案 1 :(得分:1)

我建议使用scanner.nextLine()将逗号分隔的数字作为字符串读取,然后使用“,”拆分字符串,然后使用Integer.parseInt()获取数字的整数值。这样,您可以根据需要输入任意数量的数字,而无需事先定义“numberCount”。