-1

正如标题所述,我试图找到最大值和最小值、偶数和奇数的数量以及所有输入数字的平均值。

问题。当我运行我的代码时,我的奇数和偶数计数器似乎读取它们的相反值,奇数会读取偶数输入,偶数会读取奇数输入。至于我的平均值,我不知道它有什么问题,我只知道它只会找到适当分数的平均值。

另外,当我输入退出时,我得到了我最大的数字 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

任何帮助,将不胜感激。谢谢!

4

4 回答 4

0

至于您的其他问题,您必须将 min 初始化为 0。之后,检查输入是否是您的第一个,如果是,请设置 min 。

boolean isFirst = true;
while (scan.hasNextInt()) {

getInt = scan.nextInt();
if(isFirst)
{
     min = getInt;
     isFirst=false;
}
//Rest of your code

}

于 2013-03-23T07:45:30.483 回答
0
if (getInt < min) {
        min = getInt;
    } else if (getInt > max) {
        max = getInt;
    }

如下所述更改上面的代码。您必须检查这两个条件,因此将 else if 更改为 if。

在如果 - 否则如果

一旦满足一个条件,就会执行相应的语句并且不评估剩余的条件。

if (getInt < min) {
        min = getInt;
    } 
if (getInt > max) {
        max = getInt;
    }
于 2013-03-23T07:48:03.987 回答
0

第一的

9 未分配给最大值。由于9 < min,代码评估min = getInt;并跳过 else if 部分。

它应该是 :

if (getInt < min) 
{
     min = getInt;
} 

if (getInt > max) 
{
     max = getInt;
}

因为一个数字可以同时是minmax

第二

smallest: 2147483647 //This should be 0

发生这种情况是因为您输入了一个字符,但通过使用将输入作为整数扫描getInt = scan.nextInt();(以及将输入存储为 int)。

您可以先在输入中将此扫描修复为字符串。然后,您可以通过创建一个检查方法来确定输入是否为 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;
}

然后,在进行计算之前检查输入是否为整数。

于 2013-03-23T07:26:58.120 回答
0

在检查 getInt 是否大于最大值之前取出 else。你需要检查这两个条件,所以不要在那里放其他东西。

于 2013-03-23T07:27:08.650 回答