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,则会显示该数字。
帮助表示赞赏。
感谢。 :)
答案 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;
}
}
}