我正在尝试创建一个接收带有未指定长度的整数数组的程序。换句话说,长度取决于用户输入的整数数,但在存储任何整数之前,用户没有机会输入数组将包含的整数数。可以存储的最大整数数为100.如果输入负数,则表示数组结束,并且不应存储此负值。程序还应该计算存储的整数的平均值。
只要指定了数组的长度,所有这一切都非常简单。当输入负数时,我无法弄清楚如何停止读取整数,而且我也无法弄清楚如何不存储负数。
目前,代码如下所示:
import java.util.Scanner;
public class AnalyzeScores {
public static void main(String[] args) {
double sum = 0, average = 0;
Scanner input = new Scanner(System.in);
int scores[] = new int[100];
System.out.println("Enter the scores: ");
for (int i = 0; i < scores.length; i++) {
scores[i] = input.nextInt();
if (input.nextInt() < 0) {
i--; // Remove the last input if negative
break; // Exit the loop
}
sum += scores[i];
average = sum / (i + 1);
}
System.out.println("Sum is " + sum);
System.out.println("Average is: " + average);
}
}
break语句用于在输入负数时退出循环,但总和和平均值完全错误。例如,输入的数字1 2 3 4 5 -1,给出总和= 4,平均值= 2。
我希望这个问题不被视为愚蠢,我将不胜感激任何帮助!
答案 0 :(得分:4)
在for循环中,您调用了两次input.nextInt();
,但仅将第一个int
存储到scores[i]
。因此,第一个整数存储在scores[]
中,但第二个整数被跳过。例如,如果输入是
1 2 3 4 5 -1
然后,
scores[0]
通过致电1
获取input.nextInt();
。 input.nextInt()
语句中if
的下一次调用消耗2
。sum
变为0 + 1 = 1
。scores[1]
得到3
(而不是2
你所期望的。)4
已在if
内消耗。sum
变为1 + 3 = 4
。scores[2]
获得5
。input.nextInt()
在if
语句中使用-1
,这次if
阻止找到true
路径并循环breaks
。
sum
仍为4
。更改以下内容:
if (input.nextInt() < 0) {
i--; // Remove the last input if negative
break; // Exit the loop
}
为:
if (scores[i] < 0) {
break; // Exit the loop
}
答案 1 :(得分:1)
我正在尝试创建一个接收整数数组的程序 一个未指明的长度。换句话说,长度取决于方式 用户输入的许多整数,但用户没有得到 之前输入数组将包含多少个整数的机会 存储任何整数。
在这种情况下更好地使用struct Stream_Bufer {
int size_;
int capacity_max;
int p_read;
int p_write;
char data_[320000];
} stream_buffer_[30];
#define COUNTOF(a) (sizeof(a) / sizeof(a)[0])
void do_init(void)
{
int ii;
for(ii = 0; ii< COUNTOF(stream_buffer_); ii++){
stream_buffer_[ii].capacity_max = sizeof stream_buffer_[ii].data_;
}
}
,如果数组长度未预先定义
可以存储的最大整数数是100
继续检查尺寸,中断负数或元素超过100
ArrayList
<强>输出强>
public static void main(String[] args) throws ParseException {
double sum = 0, average = 0;
Scanner input = new Scanner(System.in);
List<Integer> scores = new ArrayList<Integer>();
System.out.println("Enter the scores: ");
int i = 0;
int number = 0;
while (number >= 0 && scores.size()<=100) {
number = input.nextInt();
if (number >= 0) {
scores.add(number);
sum += number;
average = sum / (scores.size());
}
}
System.out.println("Sum is " + sum);
System.out.println("Average is: " + average);
}
答案 2 :(得分:0)
我不知道我是否理解你的问题。如果你想引入无限数量的整数;在这种情况下使用List
类型。它可以为您提供动态输入的效率(而不是array
类型)。
接下来,如果你想控制引入的负数或正数;利用if
条件。例如:
if(number < 0){
System.out.println("Introduce other number.");
}else{
*/your code for introducing a number goes here*/
}