[英]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");
// }
}
}
}
}
你好。
我的代码遇到两个问题。
首先是,当输入整数然后输入非整数时,程序将崩溃,而不是显示错误并允许用户继续。 这样,如果我输入非整数,然后输入整数,它将起作用,直到输入第二个非整数。 在这种情况下,程序再次崩溃。
要么
第二个问题是最小和最大数字正确显示。 但是,我希望最大可能为100,如果输入了102,则不应显示该数字。 但是,如果我输入102,该数字会显示。 最小的情况相同,最小的可能数字为0,如果输入-3,则不应显示该数字。 但是,如果我输入-3,则会显示该数字。
感谢帮助。
谢谢。 :)
您可以通过仔细处理来避免此类异常。 您可以做的是将代码或逻辑放在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.