我的某个方法存在问题:
public static int readIntoArray(Scanner input, int[] nums) {
int i = 0;
int count = 0; //Will hold the number of values in array
if (input.hasNextInt() == false) {
count = 0;
}
else{
int num = input.nextInt();
do {
nums[i] = num;
i++;
count++;
num = input.nextInt();
if (input.hasNextInt() == false) {
nums[i] = num;
count++;
}
else {
}
} while(input.hasNextInt() && i < 100);
}
return count;
}
这是我程序中的一种方法。之前我的问题是,如果用户点击输入而没有输入任何值,我会收到错误。我通过在上面的代码中创建if-else语句来解决这个问题。
但是因为这是方法的开始部分,所以当用户只输入一个值时会出现错误。我不知道如何解决这个问题,因为如果我移动第一个if语句,那么当用户输入任何值时我都会收到错误。我很困惑如何通过两种不同的场景来实现这一目标。
基本上,当用户输入一个值时,上面的方法不会起作用。
答案 0 :(得分:0)
试试这个;它更简单:
public static int readIntoArray(Scanner input, int[] nums) {
int count = 0; // Will hold the number of values in array
while(input.hasNextInt() && count < 100) {
nums[count] = input.NextInt();
count++;
}
return count;
}
假设您在输入中只有一个值。您的代码中断是因为在您递增count
之后,将num
设置为下一个int(不存在):
num = input.nextInt(); // there isn't a next int!
另外,我认为if
中的do while
循环中的逻辑已关闭。假装您有一个输入3
,我们已经解决了单输入错误。就在第二个if
声明之前:
i
是1. count
是1. nums[0]
是3。
接下来,if (input.hasNextInt() == false)
将评估为true,因为3
是我们唯一的输入。然后:
i
仍然是1.
count
现在是2. nums[1]
是3。我几乎可以肯定这不是你想要发生的事情。