Java使用布尔校验方法处理LinkedList输入时int参数报错问题求助
问题根因
- 校验方法仅返回布尔类型的校验结果,没有将转换成功的合法整数传递到方法外部,调用侧无法获取可存入学生对象的有效数值
- 成绩变量如
englishA1定义在while循环内部,属于循环局部变量,循环外部调用addStudent方法时无法访问该变量,会触发变量不存在/类型不匹配错误 - 现有逻辑中校验方法返回
true代表输入错误,但你写的三目运算int englishA1 = (k)?1:0逻辑完全颠倒,即使拿到值也是错误结果
修复方案
你可以选择两种修复方式,按需选用即可:
方案1:调整校验方法,直接返回合法整数值(更易用)
直接将输入校验、数值转换、错误重试逻辑封装为统一方法,调用时直接拿到可用的int类型成绩:
// 封装获取合法分数的方法,直接返回0-100之间的int类型成绩 public static int getValidScore(Scanner scanner, String tip) { System.out.println(tip); while (true) { String input = scanner.next(); try { int score = Integer.parseInt(input); if (score >=0 && score <=100) { return score; } System.out.println("分数需要在0-100之间,请重新输入:"); } catch (NumberFormatException e) { System.out.println("输入不是合法整数,请重新输入:"); } } }
调用方式简化为:
Scanner scanner = new Scanner(System.in); // 直接获取各个科目的合法分数,不需要单独处理校验逻辑 int englishA1 = getValidScore(scanner, "Enter Student Mark for English assignement 1: "); int englishA2 = getValidScore(scanner, "Enter Student Mark for English assignement 2: "); int englishA3 = getValidScore(scanner, "Enter Student Mark for English assignement 3: "); int mathA1 = getValidScore(scanner, "Enter Student Mark for Math assignement 1: "); int mathA2 = getValidScore(scanner, "Enter Student Mark for Math assignement 2: "); int mathA3 = getValidScore(scanner, "Enter Student Mark for Math assignement 3: "); // 此处iD、fName、lName按你原有逻辑赋值即可 addStudent(iD, fName, lName, mathA1, mathA2, mathA3, englishA1, englishA2, englishA3);
方案2:不改动原有校验方法,仅调整调用逻辑(适合不能改校验方法的场景)
System.out.println("Enter Student Mark for English assignement 1: "); // 把成绩变量定义在循环外部,保证外部可以访问 int englishA1 = 0; Boolean hasError = true; while (hasError) { System.out.println("Enter number"); String inputA1 = scanner.next(); hasError = errorChecking(inputA1); // 校验通过时才转换赋值 if (!hasError) { englishA1 = Integer.parseInt(inputA1); } } // 其他科目成绩按同样逻辑赋值后调用addStudent即可
补充说明
原有校验方法的返回值含义是true=输入错误、false=输入合法,调用时注意判断条件不要写反。
内容的提问来源于stack exchange,提问作者Jani
相关产品推荐
相关产品推荐

