尝试在Java中的扫描仪用户输入中查找最小数目

尝试在Java中的扫描仪用户输入中查找最小数目,java,Java,我正在用Java编写一个测试平均器。我必须使用do-while,while,if循环 我让用户输入测试分数,要求一个负数离开while循环 我必须显示输入的分数、最高分数、最低分数和平均分数 但是,我在显示最低数字时遇到问题,因为它会弹出为0。 对于95、93、92、91和-1的输入: 输入的分数数:4 最高:95 最低:0 平均为:92 我的代码: import java.util.*; public class Lab7 { public static void main(St

我正在用Java编写一个测试平均器。我必须使用do-while,while,if循环

我让用户输入测试分数,要求一个负数离开while循环

我必须显示输入的分数、最高分数、最低分数和平均分数

但是,我在显示最低数字时遇到问题,因为它会弹出为0。

对于95、93、92、91和-1的输入:

输入的分数数:4 最高:95 最低:0 平均为:92

我的代码:

import java.util.*;

public class Lab7 
{

    public static void main(String[] args) 
    {
        System.out.println("This program computes the average of");
        System.out.println("a list of (nonnegative) exam scores.");
        int sum;
        int numberOfTests;
        int testInput;
        String answer;
        int minimum = 0;
        int maximum = 0;
        Scanner keyboard = new Scanner (System.in);
        
        do
        {
            System.out.println();
            System.out.println("Enter all the scores to be averaged.");
            System.out.println("Enter a negative number after");
            System.out.println("you have entered all the scores.");
            sum = 0;
            numberOfTests = 0;
            testInput = keyboard.nextInt();

            while (testInput >= 0)
            {
                sum = sum + testInput; 
                numberOfTests++;
                

                 if (testInput < minimum)
                {
                    minimum = testInput;
                }
                
                if (testInput > maximum) 
                {
                    maximum = testInput;
                }
    
                testInput = keyboard.nextInt();
            }

            if (numberOfTests > 0) 
            {
                System.out.println("The number of scores entered: " + numberOfTests);
                System.out.println("The Highest: " + maximum);
                System.out.println("The Lowest: " + minimum);
                System.out.println("The average is: " +
                (sum / numberOfTests));    

            }

            else 
            {
                System.out.println("No scores to average.");
            }

            System.out.println("Want to average another exam?");
            System.out.println("Enter yes or no.");
            answer = keyboard.next();
        }
        
        while (answer.equalsIgnoreCase("yes"));
    }

    
}

import java.util.*;
公共类Lab7
{
公共静态void main(字符串[]args)
{
System.out.println(“此程序计算平均值”);
System.out.println(“一个(非负)考试分数列表”);
整数和;
整数测试;
int测试输入;
字符串回答;
int最小值=0;
int最大值=0;
扫描仪键盘=新扫描仪(System.in);
做
{
System.out.println();
System.out.println(“输入要平均的所有分数”);
System.out.println(“在后面输入负数”);
System.out.println(“您已经输入了所有分数。”);
总和=0;
numberOfTests=0;
testInput=keyboard.nextInt();
而(测试输入>=0)
{
总和=总和+测试输入;
numberOfTests++;
如果(测试输入<最小值)
{
最小值=测试输入;
}
如果(测试输入>最大值)
{
最大值=测试输入;
}
testInput=keyboard.nextInt();
}
如果(numberOfTests>0)
{
System.out.println(“输入的分数:“+numberOfTests”);
System.out.println(“最高:“+最大值”);
System.out.println(“最低值:+最小值”);
System.out.println(“平均值为:”+
(总和/测试次数);
}
其他的
{
System.out.println(“无平均分数”);
}
System.out.println(“想平均另一次考试吗?”);
System.out.println(“输入是或否”);
答案=键盘。下一步();
}
while(回答:是);
}
}

您使用
0
初始化
最小值
,因此对于正输入,它将始终是最小值。这意味着
if(testInput
将始终为
false
。要解决此问题,请使用
Integer.MAX_VALUE
对其进行初始化

一般来说,最好以尽可能低的值开始最大值,如
Integer.MIN_值
Double.MIN_值
,或者在您的情况下使用
0
,因为没有负分。此外,应使用最大可能值初始化最小值,如上所述


这样,您的检查将始终按预期工作。

这是由于此行
int minimum=0
由于您的输入分数大于0,因此如果(testInput
minimum
的值永远不会更改,并且将保持为0,则此条件将永远不会得到满足。因此,将其定义为
minimum=Integer.MAX\u VALUE

以下是处于工作状态的代码,我还进行了一些优化,这将帮助您更好地编写代码:

public class Solution{
    public static void main(String[] args) 
    {
        int sum = 0, numberOfTests = 0, testInput , minimum = Integer.MAX_VALUE , maximum = Integer.MIN_VALUE;
       
        System.out.println("This program computes the average of \na list of (nonnegative) exam scores. \n");
        
        Scanner keyboard = new Scanner (System.in);
        
        do
        {
            System.out.println();
            System.out.println("Enter all the scores to be averaged.");
            System.out.println("Enter a negative number after \nYou have entered all the scores.");
            
            testInput = keyboard.nextInt();

            while (testInput >= 0){
                sum += testInput; 
            
                numberOfTests++;                

                if (testInput < minimum) minimum = testInput;
                
                if (testInput > maximum) maximum = testInput;
                    
                testInput = keyboard.nextInt();
            }

            if (numberOfTests > 0) 
            {
                System.out.println("The number of scores entered: " + numberOfTests);
                System.out.println("The Highest: " + maximum);
                System.out.println("The Lowest: " + minimum);
                System.out.println("The average is: " +
                ((float)sum / numberOfTests));    
            }

            else 
                System.out.println("No scores to average.");
            

            System.out.println("Want to average another exam?");
            System.out.println("Enter yes or no.");

        }
        
        while (keyboard.nextLine().trim().equalsIgnoreCase("yes"));
        
        keyboard.close();
    }
    
}
公共类解决方案{
公共静态void main(字符串[]args)
{
int sum=0,numberOfTests=0,testInput,最小值=Integer.MAX\u值,最大值=Integer.MIN\u值;
System.out.println(“此程序计算\n(非负)考试分数列表的平均值。\n”);
扫描仪键盘=新扫描仪(System.in);
做
{
System.out.println();
System.out.println(“输入要平均的所有分数”);
System.out.println(“在输入所有分数后输入一个负数。”);
testInput=keyboard.nextInt();
而(测试输入>=0){
总和+=测试输入;
numberOfTests++;
如果(测试输入<最小值)最小值=测试输入;
如果(测试输入>最大值)最大值=测试输入;
testInput=keyboard.nextInt();
}
如果(numberOfTests>0)
{
System.out.println(“输入的分数:“+numberOfTests”);
System.out.println(“最高:“+最大值”);
System.out.println(“最低值:+最小值”);
System.out.println(“平均值为:”+
((浮动)总和/测试次数);
}
其他的
System.out.println(“无平均分数”);
System.out.println(“想平均另一次考试吗?”);
System.out.println(“输入是或否”);
}
while(keyboard.nextLine().trim().equalsIgnoreCase(“yes”));
键盘关闭();
}
}

谢谢

初始化
最小值=整数。最大值
。当您将最小值初始化为0时,
if
语句中将始终为false,因为
testInput
将大于0。没有if循环