Java中为while循环命名布尔变量后程序异常问题求助
问题原因分析与解决办法
这个问题的核心是你对布尔变量的赋值时机理解出现了偏差——你在循环开始前只给onlyWhen赋值了一次,之后它的值就再也没更新过,直接导致循环永远停不下来!
具体原因
- 当你执行
boolean onlyWhen = (count<=number);时,程序会立即计算当时count和number的比较结果,并把这个固定值存在onlyWhen里。比如你输入的number是5,初始count是1,这时候onlyWhen就被设为true。 - 进入
while(onlyWhen)循环后,你不断递增count,但onlyWhen的值从来没有被重新计算过,它会一直保持最初的true,所以循环永远不会终止,变成了死循环。
而你最初的代码之所以正常工作,是因为while(count<=number)在每次循环迭代时都会重新计算count<=number的结果,每次都会检查最新的count值是否满足条件。
修正方案
如果你一定要用变量来存储这个条件,需要在循环内部每次更新它的值,确保每次循环都能判断最新的状态:
import java.util.Scanner; public class While { public static void main (String [] args){ int count,number; System.out.println("Please enter the number you want to count upto:"); Scanner userInput = new Scanner(System.in); number= userInput.nextInt(); count = 1; boolean onlyWhen = (count<=number); while(onlyWhen) { System.out.println(count +" ,"); count++; // 每次循环后更新条件变量,确保判断最新状态 onlyWhen = (count<=number); } } }
当然,更简洁且不易出错的方式还是回到你最初的写法,直接把条件写在while的括号里,这样代码可读性和正确性都能兼顾。
内容的提问来源于stack exchange,提问作者Bikram Shrestha
相关产品推荐
相关产品推荐

