我正在尝试编写一个程序,该程序从用户获取成绩数字,并在输入-1时停止。但是,每次输入-1时,while循环继续运行,如何阻止它运行?
import java.util.Scanner;
public class getLetterGrade {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
int count = 0;
while (count >= 0)
getGrade();
count++;
System.out.println("You entered" + " " + count + " " + "Student(s)");
}
public static void getGrade() {
Scanner reader = new Scanner(System.in);
double grade;
System.out.println("Welcome to the grade calculator. \n Please enter a numeric grade. \n After the last student in the class, enter a grade of -1.");
grade = reader.nextDouble();
if (grade >= 90)
System.out.println("That's an A");
else if (grade >= 80 && grade < 90)
System.out.println("That's an B");
else if (grade >= 70 && grade < 80)
System.out.println("That's an C");
else if (grade >= 60 && grade < 70)
System.out.println("That's an D");
else if (grade <= 50 && grade > 0)
System.out.println("That's an F");
if (grade == -1)
System.out.println("");
}
}
答案 0 :(得分:1)
您可以将循环移动到另一种方法中,使其成为“无尽的”#34;循环,并使用return
退出它。然后,您可以从该方法返回计数并在main
中显示。
它可能看起来像这样。请注意,我也简化了您的分支逻辑,并从输出消息中删除了双重参与者。
我还使用了try-with-resources块,这是确保始终关闭扫描仪的一种方法,并避免资源泄漏。在这种情况下并不严格需要,但仍然是一个良好的习惯。
编辑正如Scary Wombat指出的那样,您可以添加else
子句来处理用户输入无效成绩的情况,如果您真的想要。
import java.util.Scanner;
public class GetLetterGrade {
public static void main(String[] args) {
int count = getGrades();
System.out.println("You entered " + count + " grade(s)");
}
public static int getGrades() {
try(Scanner reader = new Scanner(System.in)) {
int count = 0;
while(true) {
System.out.println("Welcome to the grade calculator. \n Please enter a numeric grade. \n After the last student in the class, enter a grade of -1.");
double grade = reader.nextDouble();
if (grade >= 90) {
System.out.println("That's an A");
} else if (grade >= 80 ) {
System.out.println("That's a B");
} else if (grade >= 70) {
System.out.println("That's a C");
} else if (grade >= 60) {
System.out.println("That's a D");
} else if (grade >= 0) {
System.out.println("That's an F");
} else if (grade == -1) {
return count;
}
count++;
}
}
}
}
答案 1 :(得分:1)
需要更改的一些事项......首先,循环保持循环,因为您从未将count
设置为小于0,因此条件始终为true。您还可以创建2个Scanner
个对象,但只能使用第二个(getGrade()
)。
尝试使用此代码,并查看注释以查看已更改的所有内容:
public class getLetterGrade {
static Scanner reader; //Add reader as member variable
public static void main(String[] args) {
//Scanner reader = new Scanner(System.in); //Remove this unused Scanner
int count = 0;
reader = new Scanner(System.in);
while (getGrade()) //Change the condition here so the loop will continue while getGrade() returns true.
count++;
reader.close(); //Close the Scanner
System.out.println("You entered" + " " + count + " " + "Student(s)");
}
public static boolean getGrade() { //getGrade() returns a boolean...
System.out.println("Welcome to the grade calculator. \n Please enter a numeric grade. \n After the last student in the class, enter a grade of -1.");
double grade = reader.nextDouble(); //Consider using a try/catch block here.
if (grade >= 90)
System.out.println("That's an A");
else if (grade >= 80 && grade < 90)
System.out.println("That's an B");
else if (grade >= 70 && grade < 80)
System.out.println("That's an C");
else if (grade >= 60 && grade < 70)
System.out.println("That's an D");
else if (grade <= 50 && grade > 0)
System.out.println("That's an F");
else if(grade != -1)
System.out.println("Invaled input!"); //Print if 'grade' is something other then the above statements.
if (grade == -1) { //Add brackets
System.out.println("");
return false; //return false if -1 was entered...
}
return true; //else return true
}
}
答案 2 :(得分:0)
import java.util.Scanner;
public class GetLetterGrade {
public static void main(String[] args) {
int count = 0;
while (getGrade() >= 0.0){
count++;
System.out.println("You entered" + " " + count + " " + "Student(s)");
}
}
public static double getGrade() {
Scanner reader = new Scanner(System.in);
double grade;
System.out.println("Welcome to the grade calculator. \n Please enter a numeric grade. \n After the last student in the class, enter a grade of -1.");
grade = reader.nextDouble();
if (grade >= 90)
System.out.println("That's an A");
else if (grade >= 80 && grade < 90)
System.out.println("That's an B");
else if (grade >= 70 && grade < 80)
System.out.println("That's an C");
else if (grade >= 60 && grade < 70)
System.out.println("That's an D");
else if (grade <= 50 && grade > 0)
System.out.println("That's an F");
if (grade == -1)
System.out.println("");
return grade ;
}
}
答案 3 :(得分:-1)
你的while循环总是取0值并进入while循环,这就是为什么它没有停止..
import java.util.Scanner;
public class getLetterGrade {
public static void main(String[] args) {
Scanner reader = new Scanner(System.in);
System.out.println("Welcome to the grade calculator. \n After the last student in the class, enter a grade of -1.");
int count = 0;
int no = -1;
while (count != -1) {
no++;
System.out.println("Please enter the value:-");
count = reader.nextInt();
if (count >= 90) {
System.out.println("That's an A");
} else if (count >= 80 && count < 90) {
System.out.println("That's an B");
} else if (count >= 70 && count < 80) {
System.out.println("That's an C");
} else if (count >= 60 && count < 70) {
System.out.println("That's an D");
} else if (count <= 59 && count > 0) {
System.out.println("That's an F");
}
if (count == -1) {
break;
}
}
count++;
System.out.println("You entered" + " " + no + " " + "Student(s)");
}
}