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

Java中do-while循环报错‘tryAgain无法解析为变量’的排查求助

问题解决:do-while循环中"tryAgain无法解析为变量"错误

错误原因分析

  • 变量作用域问题:tryAgain变量在do-while循环的while条件之后才定义,编译器解析循环条件时找不到该变量,导致编译错误。
  • Scanner提前关闭:在do循环内部关闭numberScanner,第二次循环时Scanner已关闭,会触发输入异常。
  • 冗余Scanner实例:无需创建两个Scanner,单个实例即可处理所有输入操作。
  • 循环条件错误:while (tryAgain = true)是赋值语句,而非判断条件,会导致循环无限执行。

修正后的代码

import java.util.Scanner;

public class Simple {
    public static void main(String[] args) {
        Scanner scanner = new Scanner(System.in);
        boolean tryAgain = true; // 提前声明并初始化变量,确保作用域覆盖循环

        do {
            System.out.println("Please type an integer and I will determine whether it is odd or even.");
            int number = scanner.nextInt();
            
            if (number % 2 == 0) {
                System.out.println(number + " is an even number.");
            } else {
                System.out.println(number + " is an odd number.");
            }

            // 循环内部询问是否重试,更新tryAgain的值
            System.out.println("Would you like to try again (type true or false)?");
            tryAgain = scanner.nextBoolean();
            
        } while (tryAgain); // 直接用变量作为判断条件

        scanner.close(); // 所有输入操作完成后再关闭Scanner
    }
}

关键修正点说明

  1. 调整变量作用域:在do-while循环前声明tryAgain并初始化为true,保证循环条件能正确识别该变量。
  2. 合并Scanner实例:使用单个Scanner处理所有输入,避免资源冲突和重复创建。
  3. 移动重试询问逻辑:将询问是否重试的代码移到do循环内部,每次循环结束后更新tryAgain的值,控制循环是否继续。
  4. 修正循环条件:将赋值语句改为判断条件while (tryAgain),确保循环根据用户输入决定是否继续。
  5. 延迟关闭Scanner:在所有输入操作完成后再关闭Scanner,避免提前关闭导致后续输入失败。

内容的提问来源于stack exchange,提问作者dodecahedronpigeon

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.22 11:39:35