当前位置: 首页 > 知识库问答 >
问题:

比较最大和最小数字时计算中出现Java错误

宇文修文
2023-03-14

这是我的作业:

编写一个程序来读取非负整数列表,并显示最大整数、最小整数和所有整数的平均值。用户通过输入不用于查找最大值、最小值和平均值的负前哨值来指示输入结束。平均值应为double类型的值,因此将使用分数部分进行计算。

我得到了不同的部分来使用不同的方法:方法A使最大值和最小值正确,求和错误,方法B使求和和最大值正确,最小值错误。以下代码演示了方法B。一些变量被注释掉:

    public class testthis2
{
    public static void main(String[] args) {

        System.out.println("Enter Numbers of Nonnegative Integers.");
System.out.println("When complete, enter -1 to end input values.");
Scanner keyboard = new Scanner(System.in);
//int  max = keyboard.nextInt();
int max = 0;
int min = max; //The max and min so far are the first score.
//int next = keyboard.nextInt();
int count = 0;
int sum = 0;
boolean areMore = true;
boolean run_it = false; //run it if its true
//if (max <= -1) {
 //  System.out.println("Thanks for playing!");
 //  run_it = false;
//}
// else 
// run_it = true;

while(areMore) //always true 
{

  int next = keyboard.nextInt();
   //int max = 0;
   // min = max;
  if (next < 0) { //if -1 is entered end loop.
      areMore = false;
      run_it = false;
      break; 
    }
    else //run this badboy
if(next >= max)
max = next;
else if(next <= min)
min = next;
run_it = true;
sum += next;
count++;


}
if (run_it = true) 

System.out.println("The highest score is " + max);
System.out.println("The lowest score is " + min);
System.out.println("count " + count);
System.out.println("sum " + sum);
System.out.println("average " + (double)(sum/count));
System.out.println("Thanks for playing!");        

 }

}

当我运行这个测试时,最大值、总和、计数和平均值都是正确的。但是,最小值是错误的,因为显然没有输入0。下面是一个示例测试运行:

When complete, enter -1 to end input values.
37
25
30
20
11
14
-1
The highest score is 37
The lowest score is 0
count 6
sum 137
average 22.0
Thanks for playing!

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

共有3个答案

诸修伟
2023-03-14

看起来您将<code>min都初始化为0。

那么唯一会改变<code>min的代码是基于用户输入的。如果输入值(next)为

问题是你尝试以同样的方式设置min如果(下一个

您需要在用户第一次输入时初始化< code>max和< code>min。在您将未来的输入与它们的值进行比较之前,它们都应该从等于用户的< code>first输入开始。

廖华翰
2023-03-14

代码有 2 个问题:

  1. 您将<code>min

华宏逸
2023-03-14

最小的整数总是0,因为没有小于0的非负整数:)

if(next <= min) // for nonnegative integer this expression will return true only for 0
min = next;

所以尝试将“min”变量初始化为Integer.MAX_VALUE,相信会对你有所帮助。

 类似资料: