我正在编写一个程序来从控制台获取一系列整数,例如
1 5 3 4 5 5 5 4 3 2 5 5 5 3
然后计算出现次数并打印以下输出:
0 - 0 1 - 1 2 - 1 3 - 3 4 - 2 5 - 7 6 - 0 7 - 0 8 - 0 9 - 0
其中第二个数字是第一个数字的出现次数。
代码:
public static void main (String args[])
{
Scanner chopper = new Scanner(System.in);
System.out.println("Enter a list of number: ");
int[] numCount = new int[10];
int number;
while (chopper.hasNextInt()) {
number = chopper.nextInt();
numCount[number]++;
}
for (int i = 0; i < 10; i++) {
System.out.println(i + " - " + numCount[i]);
}
}
但是在输入序列之后,我们必须输入一个非整数字符,然后按“Enter”键终止扫描器并执行“for”循环。有没有办法我们不必键入非整数字符来终止扫描仪?
答案 0 :(得分:3)
按Enter键然后按Control-D
可以退出如果您不想这样做,那么Scanner
没有别的办法。
您必须通过其他方式阅读输入,例如使用BufferedReader
:
String line = new BufferedReader(new InputStreamReader(System.in)).readLine();
Scanner chopper = new Scanner(line);
更好(受@user3512478方法的启发),有两个扫描仪,没有BufferedReader
:
Scanner chopper = new Scanner(new Scanner(System.in).nextLine());
答案 1 :(得分:0)
最佳方式IMO:
String str;
Scanner readIn = new Scanner(System.in);
str = readIn.nextLine();
String[] nums = str.split(" ");
int[] finalArray = new int[nums.length];
for(int i = 0; i < nums.length; i++) {
finalArray[i] = Integer.parseInt(nums[i]);
return finalArray;
希望这有帮助!
答案 2 :(得分:0)
最佳方式:不仅对于此模式,对于任何类型的序列输入识别,修改Scanner
对象的分隔符以获得所需的序列识别。
这里,在这种情况下,将斩波器分隔符更改为空白字符(空格)。即"\\s"
。您还可以使用"\\s*"
指定零个或多个空白字符出现
这使扫描仪检查空格而不是等待Enter键击。
public static void main (String args[])
{
Scanner chopper = new Scanner(System.in).useDelimiter("\\s"); \\ Delimiter changed to whitespace.
System.out.println("Enter a list of number: ");
int[] numCount = new int[10];
int number;
while (chopper.hasNextInt()) {
number = chopper.nextInt();
numCount[number]++;
}
for (int i = 0; i < 10; i++) {
System.out.println(i + " - " + numCount[i]);
}
}
答案 3 :(得分:-2)
尝试使用for循环。
for (int i:1; i<10;i++) {
chopper.hasNextInt()
number = chopper.nextInt();
numCount[number]++;
}
来自Oracle Doc,它说: 扫描操作可能会阻止等待输入 hasNext和next方法都可能阻止等待进一步输入