我有一段代码,其中有两个循环'i'和'j'。
'j'是内部循环变量,它应该在外部循环的单次运行中运行999到100。
但它是随机运行的,假设i=999
j=912
j=911
j=910
j=909
j=908
j=907
j=906
然后突然内循环退出,从外循环递减1,并使i=998
然后开始'j'循环
j=908
j=907
j=906
j=905
j=906
j=905
j=904
j=903
j=902
然后退出内部循环................
int product=0;
mainloop:
for(int i=999;i>99;i--){
for(int j=999;j>99;j--){
boolean flag= doSomething(i*j);
if(flag){
product=i*j;
System.out.println("Digits are: "+i+" and "+j);
break mainloop;
}
}
}
public boolean doSomething(int product){
String original= Integer.toString(product),reverse="";
int length = original.length();
for ( int i = length - 1; i >= 0; i-- )
reverse = reverse + original.charAt(i);
return (original.equals(reverse));
}
为什么会发生?为什么内部循环没有完成从999到100的循环?
**编辑:**需要明确的是,只有当j=913且i=993时,'flag'才会为true,这是循环在此时不会中断的主要问题,因为'j'永远不会到达913,而是随机生成数字。此外,'break'不仅会中断内部循环,还会中断主循环。
1条答案
按热度按时间dgenwo3n1#
在内部循环中有一个条件-
if(flag)
-如果为true,则从该循环中断。这就是内部循环不完成的原因。它不会“随机”运行。它的行为取决于doSomething(i*j)
方法调用的结果。使用一些额外的调试打印和您声称拥有的
doSomething
实现运行代码:给出预期输出:
EDIT,当i==995和j==583时,
doSomething
返回true。这就是你打破循环的时候。