用户输入验证错误(Java)

时间:2017-11-26 13:47:23

标签: java algorithm

package javahistogramtwo;

import java.util.Scanner;

public class JavaHistogramTwo {

    public static void main(String[] args) {
        int sum = 0;
        int count = 0;
        int mark = 0;
        int largest = 0, smallest = 0;
        int rangeOne = 0, rangeTwo = 0, rangeThree = 0, rangeFour = 0;

        System.out.println("Enter marks, -1 to finish: ");
        Scanner in = new Scanner(System.in);

// Enter range validation
        {
            {                
                 while (!in.hasNextInt()) {
                    System.out.println("Input not valid");
                    in.next();
                }

                while (mark != -1) {
                    mark = in.nextInt();

                    while (mark <= -2 || mark >= 101){
                    System.out.println("Error: Enter Valid Input Type: "
                                + "Numbers from 0 - 100 for Marks. Or -1 to finish.");
                    in.nextInt();
                }


                    if (mark != -1) {
                        sum = sum + mark;
                        count++;

                        if (count == 1) {
                            largest = mark;
                            smallest = mark;

                        } else {
                            if (mark > largest) {
                                largest = mark;
                            }
                            if (mark < smallest) {
                                smallest = mark;
                            }
                        }
                    }

                    if (mark >= 0 && mark <= 29) {
                        rangeOne++;
                    } else if (mark >= 30 && mark <= 39) {
                        rangeTwo++;
                    } else if (mark >= 40 && mark <= 69) {
                        rangeThree++;
                    } else if (mark >= 70 && mark <= 100) {
                        rangeFour++;
                    }
                }
            }



            System.out.print("0-29: ");
            for (int i = 0; i < rangeOne; i++) {
                System.out.print("*");
            }

            System.out.println();
            System.out.print("30-39: ");
            for (int i = 0; i < rangeTwo; i++) {
                System.out.print("*");
            }

            System.out.println();
            System.out.print("40-69: ");
            for (int i = 0; i < rangeThree; i++) {
                System.out.print("*");
            }

            System.out.println();
            System.out.print("70-100: ");
            for (int i = 0; i < rangeFour; i++) {
                System.out.print("*");
            }

            System.out.println("");
            if (count > 0) {
                System.out.println("Largest mark is: " + largest);
            } else {
                System.out.println("No data");
            }
            if (count > 0) {
                System.out.println("Smallest mark is: " + smallest);
            } else {
                System.out.println("No data");
            }
            if (count > 0) {
                double average = sum / count;
                System.out.println("Average marks: " + average);
            } else {
                System.out.println("No data");
            }

            if (count > 0) {
                System.out.println(rangeOne + rangeTwo + rangeThree + rangeFour
                        + " Total Number of Students");
            } else {
                System.out.println("No data");
            }

            {
//                if (mark >= rangeThree || mark <= rangeFour)
                System.out.println(rangeThree + rangeFour + " Number of Student Passed"
                        + " - (40 Marks or Above)");

//                else {
//            System.out.println("No data"); 
//        }

            }
        }
    }
}

您好。

关于我的代码,我遇到了两个问题。

第一个是输入整数然后输入非整数,而不是显示错误并允许用户继续,程序将崩溃。有了这个,如果我输入一个非整数,然后是整数,它将起作用,直到我输入第二个非整数。在这种情况下,程序再一次崩溃。

实施例

  • a
  • 101
  • -2
  • a(碰撞发生在这里)

或者

  • 101
  • a(碰撞发生在这里)

第二个问题是,最小和最大数字正确显示。但是,我希望最高可能为100,如果输入102,则不应显示该数字。但是,如果我输入102,则会显示该数字。对于最小值,这是相同的,其中最小可能的数字是0,如果输入-3,则该数字不应该显示。但是,如果我输入-3,则会显示该数字。

示例

  • 0(希望此显示为最低)
  • 20
  • 30
  • -5(显示最低)
  • 6
  • 100(希望此显示为最高)
  • 78
  • 106(将显示最高)
  • 最低为-5(希望它为0)
  • 最高是106(希望它是100

帮助表示赞赏。

感谢。 :)

2 个答案:

答案 0 :(得分:0)

您可以通过仔细处理来避免此类异常。您可以做的是将代码或逻辑放在try块中,并在catch块中执行以下操作:

catch(NumberFormatException nfe) {
   System.out.println("Please enter only numbers");
   in = sc.nextInt();
}

在您的代码中处理字母表也很有帮助。

答案 1 :(得分:0)

对于您的第一个问题,只需在此位置移动第一个条件(在第二个条件之后)

while (mark != -1) {
         while (!in.hasNextInt()) {
                        System.out.println("Input not valid");
                        in.next();
                    }
         mark = in.nextInt();

第二个问题是由于你的条件是最大值和最小值。你的代码:

if (count == 1) {
                            largest = mark;
                            smallest = mark;

                        } else {
                            if (mark > largest) {
                                largest = mark;
                            }
                            if (mark < smallest) {
                                smallest = mark;
                            }
                        }

在else部分,你必须添加一个if来检查值是否在0到100之间,结果是:

   if (count == 1) {
                                largest = mark;
                                smallest = mark;

                            } else {
                                if(mark >= 0 && mark <= 100){
                                    if (mark > largest) {
                                        largest = mark;
                                    }
                                    if (mark < smallest) {
                                        smallest = mark;
                                    }
                                }
                            }