do {
grade[y] = JOptionPane.showInputDialog(null, "For student #" + inputGrades.students + " enter grade for course #" + classes);
if (!grade[y].equals("A") || !grade[y].equals("B") || !grade[y].equals("C") || !grade[y].equals("D") || !grade[y].equals("F")) {
grade[y] = JOptionPane.showInputDialog(null, "For student #" + inputGrades.students + " enter grade for course #" + classes);
} else {
validgrade = true;
}
} while (!validgrade);
我正在努力确保一个字符串等于A,B,C,D或F.我陷入无限循环。为什么呢?
答案 0 :(得分:5)
这种情况总是如此:
if (!grade[y].equals("A") || !grade[y].equals("B") || !grade[y].equals("C") || !grade[y].equals("D") || !grade[y].equals("F"))
grade[y]
不能同时等同A
,B
,C
,D
和F
。最多一个!equals(...)
将为false
。剩下的四个将是true
,同时将OR
的结果转换为true
。
您需要&&
而不是||
:
if (!grade[y].equals("A") && !grade[y].equals("B") && !grade[y].equals("C") && !grade[y].equals("D") && !grade[y].equals("F"))
此外,没有必要在JOptionPane.showInputDialog
条件内调用if
。您需要做的就是让循环继续。所以简化的代码可能如下所示:
do {
grade[y] = JOptionPane.showInputDialog(null, "For student #" + inputGrades.students + " enter grade for course #" + classes);
} while (!grade[y].equals("A") && !grade[y].equals("B") && !grade[y].equals("C") && !grade[y].equals("D") && !grade[y].equals("F"));