【发布时间】:2017-07-12 14:12:13
【问题描述】:
我对 java 很陌生。 我正在为一个项目尝试一些东西,但我不明白为什么这不起作用。 这里的目标是让用户输入以空格分隔并以字母结尾的数字。然后程序需要计算偶数和奇数索引数并输出总和较大的数。
当给定的数字数量是常数时,我已经成功地做到了这一点,但现在我想让它适应用户输入。 因为我想把数字放在一个数组中,所以我需要知道这个数组的长度。为此,我想计算用户输入的数字数量,以便创建适当的长度数组。
由于某种原因,while 循环没有结束并继续运行。如何计算输入的数字数量?
编辑
我已经添加了 in.next();在第一个 while 循环中,因此它不会卡在第一个输入元素上。然而,这给我带来了另一个问题,即有两个 while 循环试图循环通过相同的输入。我试图创建第二个扫描仪并重置第一个扫描仪,但它没有让第二个循环从第一个元素开始。以前的答案表明这是不可能的,有没有办法把它放在一个while循环中,同时仍然使用数组来存储值?
附:输入值应该可以是任何正整数或负整数。
这是我的完整代码:
import java.util.Scanner;
public class LargerArraySum {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int length = 0;
System.out.println("Enter your numbers seperated by spaces, end with a letter");
while(in.hasNextInt()) {
length++;
in.next();
}
System.out.println(length);
int arra[] = new int[length];
while(in.hasNextInt()) {
for(int i=0;i<length;i++) {
int x = in.nextInt();
arra[i] = x;
}
}
int evenSum = EvenArraySum(arra);
int oddSum = OddArraySum(arra);
if(evenSum<oddSum) {
System.out.println("The sum of the odd indexed elements is bigger");
} else if(oddSum<evenSum) {
System.out.println("The sum of the even indexed elements is bigger");
} else {
System.out.println("The sum of the odd and even indexed elements is equal");
}
}
public static int EvenArraySum(int[] a) {
int sum = 0;
for(int i=1;i<a.length;i+=2) {
sum += a[i];
}
System.out.println("The sum of the even indexed elements is: " + sum);
return sum;
}
public static int OddArraySum(int[] a) {
int sum = 0;
for(int i=0;i<a.length;i+=2) {
sum += a[i];
}
System.out.println("The sum of the odd indexed elements is: " + sum);
return sum;
}
}
【问题讨论】:
-
哪个
while循环继续运行?你有 2 个。 -
你的while循环没有结束,因为你没有消耗下一个int,所以你总是检查相同的数字。我建议为您的情况使用
ArrayList,而不是固定长度的数组。 -
我提高长度的那个
-
您可以将您的数字完全读取为一个字符串,并在空格处拆分此字符串并将数字转换为 int。但是如上所述,最好使用 ArrayList。
-
对所有未来开发工作的一般提示:在 IDE 中调试代码。然后,您可以逐步运行代码并检查所有内容的值。另外,尽量编写易于阅读和理解的代码。
标签: java input while-loop java.util.scanner counting