扫描仪输入并输出最小值和最大值

时间:2014-08-25 03:08:09

标签: java for-loop input java.util.scanner

所以我试图找到输入数字的最小,最大和平均数。一切正常,虽然我不希望输入小于0或大于100.当我输入小于0或大于100的数字时,它仍然记录为最小/最大。我不想要这个!我怎么不接受小于0或大于100的输入? 谢谢!

import java.text.DecimalFormat;
import java.util.Scanner;
public class ExamGrades {

public static void main(String[]args){

    Scanner scan = new Scanner(System.in );

        int number = 0;
        double total = 0;
        int minimum;
        int maximum = 0;

        System.out.println("Please enter the first integer: ");

        number = scan.nextInt();
        minimum=number;
        total += number;

        for(int i = 2; i<11; i++){

            if(number<0 || number >100){
                System.out.println("Please enter a valid number: ");
                number = scan.nextInt();
                i--;
            }
            else{
                System.out.println("Please enter integer " + i + ":");
                number = scan.nextInt();
                total += number;

            if(number<minimum)
                minimum = number;
            if(number>maximum)
                maximum = number;
            }
        }

        DecimalFormat oneDecimalPlace = new DecimalFormat("##.#");
        System.out.println("The minimum is: " + minimum);
        System.out.println("The maximum is: " + maximum);
        System.out.println("The average is: " + oneDecimalPlace.format((total) / 10.0 ));

    }
}

3 个答案:

答案 0 :(得分:0)

<强>问题:

if(number<0 || number >100)

false 100 0 时会返回number,因此接受它并执行你阻止。

100>100回答false因为它们是相同的,不会大于其他

<强>溶液

if(number<1 || number >99)

编辑:

public static void main(String[]args){

    Scanner scan = new Scanner(System.in );

        int number = 0;
        double total = 0;
        int minimum = 0;
        int maximum = 0;

        System.out.println("Please enter the first integer: ");

        number = scan.nextInt();
        if(number>1 && number <99)
        {
        minimum=number;
        total += number;
        }
        for(int i = 2; i<11; i++){

            if(number<1 || number >99){
                System.out.println("Please enter a valid number: ");
                number = scan.nextInt();
                i--;
            }
            else{
                System.out.println("Please enter integer " + i + ":");
                number = scan.nextInt();
                total += number;

                if(number>1 && number <99)
                {
                     if(number<minimum)
                         minimum = number;
                     if(number>maximum)
                         maximum = number;
                }

            }
        }

        DecimalFormat oneDecimalPlace = new DecimalFormat("##.#");
        System.out.println("The minimum is: " + minimum);
        System.out.println("The maximum is: " + maximum);
        System.out.println("The average is: " + oneDecimalPlace.format((total) / 10.0 ));


}

答案 1 :(得分:0)

假设您输入5表示整数1,然后102表示第二个整数。会发生什么事?在您输入102之前,number5,因此它会进入else区块。

它会说:

Please enter integer 2:

然后输入:102

那么呢?那么下一段代码就是:

number = scan.nextInt();然后它会通过它下面的if语句来确定它是否是最大值。没有什么能阻止它。

尝试使用此代码而不是循环:

System.out.println("Please enter the first integer: ");

number = scan.nextInt();

// keep them in a loop until they enter a valid number
while (number < 0 || number > 100) {
    System.out.println("Please enter a valid number: ");
    number = scan.nextInt();
}

// after they entered a valid number, add it to the series
minimum = number;
total += number;

for(int i = 2; i < 11; i++) {

    System.out.println("Please enter integer " + i + ":");
    number = scan.nextInt();

    // keep them in a loop until they enter a valid number
    while (number < 0 || number > 100) {
        System.out.println("Please enter a valid number: ");
        number = scan.nextInt();
    }

    // after they entered a valid number, add it to the series

    total += number;

    if(number<minimum)
        minimum = number;
    if(number>maximum)
        maximum = number;
}

答案 2 :(得分:0)

这是一个Example.Exceptions未处理,因此如果需要,可以将Try-catch放到String转换为整数转换。

import java.util.Scanner;
import java.text.DecimalFormat;

public class Numbers{
    public static void main(String x[]){
        Scanner scn=new Scanner(System.in);
        int Total=0,Max=0,Min=Integer.MAX_VALUE;
        for(int i=0;i<10;){
            System.out.print("Enter Number :");         
            int NumberOne=Integer.parseInt(scn.nextLine());//Put a Try catch If needed
            if(NumberOne>0&&NumberOne<100){
                Total+=NumberOne;
                Max=(Max>NumberOne)?Max:NumberOne;
                Min=(Min<NumberOne)?Min:NumberOne;
                i++;
            }else{
                System.out.print("Number Invalid");         
            }
        }
        DecimalFormat oneDecimalPlace = new DecimalFormat("##.#");
        System.out.println("The minimum is: " + Min);
        System.out.println("The maximum is: " + Max);
        System.out.println("The average is: " + oneDecimalPlace.format((Total) / 10.0 ));
    }

}