You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 08:18:00