问题描述
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循环接收多个输入。