在毕业设计中遇见的关于Java的问题
关于While嵌套中的一些问题记录
当我在写毕业设计的时候,我在编写while语句嵌套的时候,出现了如下的问题。先做下记录,为了以后如若找到答案,可以进行再次更新。 郭
问题是这样子的:
编写格式
//完成功能:flag是一个可由外界控制的值,起始时flag=false(boolean类型),flag可以随外
//界的赋值而改变,当赋值flag=true时,可以输出`flag: true`的程序结果
while(true){
while(flag){
System.out.println("flag: "+flag);
}
}
测试一:
现源代码A是:
while (true){
while (start_flag) {
System.out.println("start_flag: "+start_flag);
}
}
//代码如此书写但是无论怎么运行,都无法将println后的数据成功输出
//注意:我说的是运行(run!!!),这段代码用Debug是完全正常的!!!!
所以我查看了源代码A对应的class文件A—class的编译数据是
while(true) {
while(!start_flag) {
;
}
System.out.println("start_flag: " + start_flag);
}
//按道理来说呢,这个程序执行应该是正确的对不对?!!!
//但是为什么程序执行结果就是不对呢???
测试二:
源代码B
while(true) {
while(!start_flag) {
;
}
System.out.println("start_flag: "+start_flag);
}
//这时候,我们把A-class文件作为源代码B进行再次编译
源代码B编译的class文件B-class
while(true) {
while(true) {//这个true是因为一开始!start_flag得到的
if(start_flag) {
System.out.println("start_flag: "+start_flag);
}
}
//很明显,我们可以看出来这个从逻辑上来说,也是正确的。
//所以这下问题来了,问题出在哪里呢?!!!
//我也不知道 !!!!
测试三:
对以上的问题,我们在Debug中是找不出问题来的,通过class文件分析也得不到答案,因此,这个问题的求知上已然gg。
但是对于这个问题是有解决的办法的!!!
源代码C
while (true){
Thread.sleep(000);//或者替换为以下这句话都是可以的。
//System.out.println("");
while (start_flag) {
System.out.println("start_flag: "+start_flag);
}
}
源代码C编译得到的class文件c-class
while(true) {
Thread.sleep(0L);
while(start_flag) {
System.out.println("start_flag: "+start_flag);
}
}
//在这个class文件中的处理是不是逻辑是对的,而且执行结果也是正确的。
//至少源码AB错在哪里,我也不知道
结论:
这是一种莫名其妙的错误,我也不知道为什么。所以在此做下记录,往后若有机会解决可以来此记录解决方案。