我正在尝试编写一个程序,该程序从控制台扫描值并将它们存储在数组中。我试图让用户使用扫描仪指定阵列的长度。你知道一个数组的长度只能是正数,所以我试着检查一下,到目前为止我所知道的是在我看来应该正常工作。
int[] array;
int index = 0;
max = new Scanner(System.in);
System.out.println("How long is your array?");
while (!max.hasNextInt() || max.nextInt() <=0 )
{
System.out.println("Arrays aren't negative, unless your's is " +
"smaller then physically posible, try again");
max.next();
}
maxSize = max.nextInt();
array = new int[maxSize];
System.out.println("Enter up to " + maxSize + " integers");
input = new Scanner(System.in);
while(input.hasNextInt())
{
array[index] = input.nextInt();
index++;
}
return array;
它有点工作,这是输出 你的阵列有多长?
-2
阵列不是负面的,除非你的面积小于物理位置,再试一次
-3
-4
阵列不是负面的,除非你的面积小于物理位置,再试一次
2
3
4
最多输入4个整数
任何帮助都是值得赞赏的,而且它似乎根本不存储阵列所以任何帮助都是值得赞赏的,但是我只是在测试最大尺寸时所以我将尝试解决它。我现在认为可能是因为我正在使用两个扫描仪,我正在查看我的代码,这是我第一次使用扫描仪。提前谢谢!
答案 0 :(得分:1)
麻烦的是,您正在阅读一次以查看尺寸,然后您正在单独阅读尺寸。
我会将它提取到一个单独的方法中,这样可以使你的更大方法的可读性变得更容易。
public static int readNonNegativeInteger(Scanner scanner)
{
// You may want some way of letting the user quit...
while (true)
{
while (!scanner.hasNextInt())
{
System.out.println("Please enter an integer.");
scanner.next();
}
int candidate = scanner.nextInt();
if (candidate >= 0)
{
// Success!
return candidate;
}
System.out.println("The value must be non-negative. Please try again.");
}
}
请注意,while (true)
循环相对罕见且某些评论者可能会反对。然而,在这种情况下,对我来说感觉就像最简单的方法 - 我们想继续前进,直到我们成功读取一个值,而我们破坏的方式不是通过满足条件 - 它是通过返回。我怀疑如果没有重复条件或者有一个毫无意义的“完成”变量,就很难找到更清晰的表达相同流程的方式。
答案 1 :(得分:1)
max.nextInt()&lt; = 0从扫描仪读取,但如果这样做,则会错过存储值。
你会想要这样的东西:
int[] array;
Scanner sc = new Scanner(System.in);
System.out.println("How long is your array?");
int len = sc.nextInt();
while (len <= 0) {
System.out.println("Arrays aren't negative, unless your's is " +
"smaller then physically posible, try again");
len = sc.nextInt();
}
array = new int[len];
也。在system.in上使用2个扫描仪毫无意义。使用相同的扫描仪对象。
如果要在同一行中输入多个值,请使用scanner.hasNextInt()