从用户 - Java读取一行整数

时间:2015-10-18 00:05:06

标签: java tree

该程序应该从用户那里取一行,例如“1 2 5 8 3”,并使用它来构建树。无法将每个数字分离为整数。使用scanner.next()读取输入,尝试使用字符串拆分,然后将每个字符串解析为整数。但我检查树,它是空的。对于出了什么问题的任何想法?

System.out.println("Please enter the inital values. Press enter when done.");
String input = scan.next(); // gets the entire line
String[] values = input.split(" "); // split by spaces
int[] intVals = new int[values.length]; //array to store integers
//string to int and stores in integer value array
for (int i = 0; i < values.length; i++) {
    intVals[i] = Integer.parseInt(values[i]);
}
//goes through integers and adds them to tree
for (int j = 0; j < intVals.length; j++) {
    oak.add(j);
}

1 个答案:

答案 0 :(得分:1)

如果您正在尝试阅读“1 2 5 8 3”等输入,请改用:

System.out.println("Please enter the inital values. Press enter when done.");
final String line = scan.nextLine();
final Scanner lineScanner = new Scanner(line);
while(lineScanner.hasNextInt()) {
    oak.add(lineScanner.nextInt());
}

它首先读取整行,然后创建一个单独的Scanner来解析它。这是一种比我现在更好的方法(在我看来),因为它避免了将字符串拆分为数组并将项目手动转换为整数的必要性。扫描仪会为您做到这一点。

有了这个说法,现在谈谈你目前的问题:

scan.next(); // gets the entire line

事实并非如此。这只是读取一个令牌,所以“一切”直到下一个分隔符,通常是一个空格。所以做input.split(" "); // split by spaces在这里确实没有用。

oak.add(j);

这会将循环计数器添加到oak,而不是数组intVals中的值。但好处是,这不再重要了。