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 } }
关键修正点说明
- 调整变量作用域:在do-while循环前声明
tryAgain并初始化为true,保证循环条件能正确识别该变量。 - 合并Scanner实例:使用单个Scanner处理所有输入,避免资源冲突和重复创建。
- 移动重试询问逻辑:将询问是否重试的代码移到do循环内部,每次循环结束后更新
tryAgain的值,控制循环是否继续。 - 修正循环条件:将赋值语句改为判断条件
while (tryAgain),确保循环根据用户输入决定是否继续。 - 延迟关闭Scanner:在所有输入操作完成后再关闭Scanner,避免提前关闭导致后续输入失败。
内容的提问来源于stack exchange,提问作者dodecahedronpigeon
相关产品推荐
相关产品推荐

