正如标题所述,我试图找到最大值和最小值,平均数和赔率数,以及所有输入数字的平均值。
问题所在。当我运行我的代码时,我的赔率和平均值计数器似乎正在读取它们的相反,奇数会读取偶数输入甚至会读取奇数输入。至于我的平均水平,我不知道它有什么问题,我所知道的是它只能找到适当分数的平均值。
另外,当我输入quit时,我得到了我最大的号码214XXXXXXXX
我的输出示例将在最后粘贴。
System.out.println("Enter a sequence of integers. Any non-integer to quit");
Scanner scan = new Scanner(System.in);
int min = Integer.MAX_VALUE;
int max = 0;
int count = 0;
int sum = 0;
int oddsCounter = 0;
int evensCounter = 0;
int getInt;
double average = 0;
while (scan.hasNextInt()) {
getInt = scan.nextInt();
if (getInt % 2 == 0) {
evensCounter++;
System.out.println("even: " + evensCounter);
} else {
oddsCounter++;
System.out.println("odd: " + oddsCounter);
}
if (getInt < min) {
min = getInt;
} else if (getInt > max) {
max = getInt;
}
sum += getInt;
System.out.println("sum " + sum);
count++;
System.out.println("count " + count);
average = (double) sum / (count);
System.out.println("average " + average);
}
System.out.println("smallest: " + min);
System.out.println("largest: " + max);
System.out.println("even: " + oddsCounter);
System.out.println("odd: " + evensCounter);
System.out.println("average: " + average);
结果:
Enter a sequence of integers. Any non-integer to quit
9 //input 1
odd: 1
sum 9
count 1
average 9.0
3 //input 2
odd: 2
sum 12
count 2
average 6.0
7 //input 3
odd: 3
sum 19
count 3
average 6.333333333333333
1 //input 4
odd: 4
sum 20
count 4
average 5.0
q //input 5: QUIT
smallest: 1
largest: 7 //This should be 9
even: 0
odd: 4
average: 5.0
结果2:
Enter a sequence of integers. Any non-integer to quit
q //quit
smallest: 2147483647 //This should be 0
largest: 0
even: 0
odd: 0
average: 0.0
任何帮助将不胜感激。谢谢!
答案 0 :(得分:0)
9没有被分配到最大值。自9 < min
起,代码评估min = getInt;
并跳过else if部分。
应该是:
if (getInt < min)
{
min = getInt;
}
if (getInt > max)
{
max = getInt;
}
因为数字可以是min
和max
。
smallest: 2147483647 //This should be 0
这是因为您键入了一个字符,但使用getInt = scan.nextInt();
作为整数扫描(以及将输入存储为int)。
您可以先在输入中将此扫描修复为String。然后,通过创建method进行检查来确定输入是否为int。 :
public static boolean isInteger(String s)
{
try
{
Integer.parseInt(s);
}
catch(NumberFormatException e)
{
return false;
}
// only got here if we didn't return false
return true;
}
然后,在进行计算之前检查输入是否为整数。
答案 1 :(得分:0)
在检查getInt是否大于最大值之前取出else。你需要检查这两个条件,所以不要把它放在那里。
答案 2 :(得分:0)
至于你的其他问题,你必须将min初始化为0。 之后,检查输入是否是您的第一个,如果是,则设置为最小值。
boolean isFirst = true;
while (scan.hasNextInt()) {
getInt = scan.nextInt();
if(isFirst)
{
min = getInt;
isFirst=false;
}
//Rest of your code
}
答案 3 :(得分:0)
if (getInt < min) {
min = getInt;
} else if (getInt > max) {
max = getInt;
}
如下所述更改上述代码。您必须检查两种情况,否则更改否则if。
if if - else if
一旦满足条件,就执行适当的陈述 并且不评估其余条件。
if (getInt < min) {
min = getInt;
}
if (getInt > max) {
max = getInt;
}