扫描数组并检查底片

时间:2011-11-15 06:55:30

标签: java

我正在尝试编写一个程序,该程序从控制台扫描值并将它们存储在数组中。我试图让用户使用扫描仪指定阵列的长度。你知道一个数组的长度只能是正数,所以我试着检查一下,到目前为止我所知道的是在我看来应该正常工作。

    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个整数

任何帮助都是值得赞赏的,而且它似乎根本不存储阵列所以任何帮助都是值得赞赏的,但是我只是在测试最大尺寸时所以我将尝试解决它。我现在认为可能是因为我正在使用两个扫描仪,我正在查看我的代码,这是我第一次使用扫描仪。提前谢谢!

2 个答案:

答案 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()