Java字母等级转数字等级程序输入字符串异常打印问题求助
问题原因
- Java字符串内容比较不能用
==,必须调用equals()方法。==仅判断两个字符串对象的内存地址是否一致,Scanner输入的字符串和代码中定义的字符串常量属于不同对象,因此所有条件判断都会失效,分支无法命中。 - 分支判断逻辑存在矛盾。例如
if (lettGrade == "A" && lettGrade.substring(0,1) == "+")的条件永远不可能成立:如果lettGrade等于"A",其首个字符只能是'A',不可能是"+";如果输入的是"A+",则lettGrade == "A"的判断不成立,自然无法进入对应分支。 - 你看到的控制台打印的输入字符串,是终端默认的输入回显功能,并非你的代码打印的内容。因为你的代码没有命中任何分支,所以除了开头的提示语句外不会输出其他内容,你输入的内容是终端自动回显的。
- 缺少非法输入的兜底分支,一旦输入内容不符合你预设的所有条件,程序不会给出任何提示。
修正方案
你可以先拆分输入的等级字母和后缀符号,再分别判断,示例代码如下:
import java.util.Scanner; public class GradeConverter { public static void main(String[] args) { Scanner lettGradein = new Scanner(System.in); System.out.println("Enter a letter grade: "); String lettGrade = lettGradein.nextLine().trim(); lettGradein.close(); // 处理空输入 if (lettGrade.isEmpty()) { System.out.println("输入不能为空"); return; } // 拆分首字母和后缀 char gradeLetter = lettGrade.charAt(0); String suffix = lettGrade.length() > 1 ? lettGrade.substring(1) : ""; double finalGrade = 0.0; boolean valid = true; // 先判断首字母 switch (gradeLetter) { case 'A': finalGrade = 4.0; break; case 'B': finalGrade = 3.0; break; case 'C': finalGrade = 2.0; break; case 'D': finalGrade = 1.0; break; case 'F': finalGrade = 0.0; if (!suffix.isEmpty()) { System.out.println("There is no F+ or F- Grade"); valid = false; } break; default: valid = false; break; } if (!valid) { System.out.println("无效的成绩输入"); return; } // 处理后缀 if (gradeLetter != 'F') { if (suffix.equals("+") && gradeLetter != 'A') { // A+也按4.0计算 finalGrade += 0.3; } else if (suffix.equals("-")) { finalGrade -= 0.3; } else if (!suffix.isEmpty()) { // 后缀不是+/-的非法情况 valid = false; } } if (valid) { System.out.println("Your Grade is equal to: " + finalGrade); } else { System.out.println("无效的成绩输入"); } } }
内容的提问来源于stack exchange,提问作者java_explore
相关产品推荐
相关产品推荐

