扫描仪类为什么不能识别其他数字?

问题描述

public class Hello {

    public static void main(String [] args){

        int number,count = 0,sum = 0;
        int Largest= 0,largestEvennumber = 0;

        Scanner console = new Scanner(system.in);

        number = console.nextInt(); // read an integer entered by a user

        if (number > Largest) { // Condition for computing the largest number
                Largest = number;
        }

        if (number < 0) { // Condition for computing the number of negative integers in the sequence
                count = count + 1;
        }

        if (number % 2 == 0) { // Condition for computing the largest even integer in the sequence

            if (largestEvennumber < number) {
                largestEvennumber = number;
            }
        }

        if (number % 3 == 0) { // Condition for computing the sum of numbers divisible by 3
            sum += number;
        }

        System.out.println("\nThe largest integer is " + Largest);
        System.out.println("The number of negative integers in the sequence is " + count);
        System.out.println("The largest even integer in the sequence is " + largestEvennumber);
        System.out.printf("The sum of numbers divisible by 3 is %d",sum);

    }

}

我想获得下面给出的预期输出。但是,Scanner类仅读取第一个数字。如何在不创建多个对象的情况下更正此问题?

Output:
 2
-1
-5
-3
 9
 8
 0
The largest integer is 2
The number of negative integers in the sequence is 0
The largest even integer in the sequence is 2
The sum of numbers divisible by 3 is 0
Process finished with exit code 0

预期输出

最大整数是9 序列中负整数的数量为3 序列中最大的偶数是8 被3整除的数字总和为6

谢谢!

解决方法

您只拨打一次console.nextInt(),因此只能读取一个号码。如果要呼叫,则需要将呼叫循环到console.hasNext()。由于您使用的是System.in。例如:

while (console.hasNextInt()) {
    number = console.nextInt();

    // calculations
}
,

您只读取一次输入。我在您的代码中看不到循环,因此number = console.nextInt();仅运行一次。您应该做的是将其放入循环中,在获得所有数字(如何检查可通过多种方式完成)后退出循环,而在循环中时,将接收到的所有输入放入数组或另一个数据结构。收集完输入后,请检查数据结构上的所有数字。

,
1-您必须首先从用户那里接收数据,然后计算并生成输出。
您可以使用数组进行此操作,并在完成数据放置后,对它们进行计算。
例如:
private static final int DATA_SIZE = 5;

  public static void main(String[] args) {
    Scanner scanner = new Scanner(System.in);
    ArrayList<Integer> data = new ArrayList<>();
    // put data in array
    while (data.size() == DATA_SIZE){
      data.add(scanner.nextInt());
    }

    // calculate data from array ...
  }

2-当您调用nextInt()Scanner class之类的字段时,仅执行一次,然后将其放入循环中以重复多次...

当然,我对此还有其他建议 例如,您可以使用main方法中可用的数组(当然有知识)



首先向用户询问您拥有的数据量,然后进行处理,然后计算
或者....

,

如果要一次输入所有号码,则应设置一个终端号码。输入所有号码时,应添加终端号码以指示输入结束。
例如:

public static void main(String [] args){

        int number,count = 0,sum = 0;
        int Largest= 0,largestEvenNumber = 0;

        Scanner console = new Scanner(System.in);
        
        int endNumber = -1; //set the terminal number
        
        do {
            number = console.nextInt(); // read an integer entered by a user

            if (number > Largest) { // Condition for computing the largest number
                Largest = number;
            }

            if (number < 0) { // Condition for computing the number of negative integers in the sequence
                count = count + 1;
            }

            if (number % 2 == 0) { // Condition for computing the largest even integer in the sequence

                if (largestEvenNumber < number) {
                    largestEvenNumber = number;
                }
            }

            if (number % 3 == 0) { // Condition for computing the sum of numbers divisible by 3
                sum += number;
            }
        }while (number!=endNumber);

        System.out.println("\nThe largest integer is " + Largest);
        System.out.println("The number of negative integers in the sequence is " + count);
        System.out.println("The largest even integer in the sequence is " + largestEvenNumber);
        System.out.printf("The sum of numbers divisible by 3 is %d",sum);

    }
,

该行(如果代码仅执行一次)。因此,扫描仪仅采用第一个。使用while循环接收多个输入。