繁体   English   中英

用户输入验证错误(Java)

[英]User Input Validation Errors (Java)

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"); 
//        }

            }
        }
    }
}

你好。

我的代码遇到两个问题。

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


  • 一种
  • 101
  • -2
  • 一个(发生崩溃)

要么

  • 101
  • 一个(发生崩溃)

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


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

  • 最低为-5(希望为0)
  • 最高为106(希望为100

感谢帮助。

谢谢。 :)

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

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

这也将有助于在代码中处理字母。

在您的代码中,您没有分配mark任何值。 它应该是mark = nextInt(); 在扫描仪初始化之后。

遇到问题了:1)是,用户只能输入整数。 如果提供的不是整数,则将引发java.util.InputMismatchException ,您应在try{<your code>} catch(InputMismatchException)

块。

2)代码格式化-将计算最小和最大数字的所有业务逻辑移至私有方法。

private void printSmallestAndLargestNumber(int marks)

并避免使用其他条件。 它很难阅读。

您在问题2)中解释的行为,我变得比那更糟。 请更正您的代码,并确保您使用提供的输入集来运行它。

对于第一个问题,只需将第一个while条件移动到该位置(第二个while条件之后)

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

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

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;
                                    }
                                }
                            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM