我写了这么一段程序。比较郁闷的是,但i循环到i = 3 的时候,虽然内层循环的条件满足,但是外层循环的条件已经不满足了。为什么不把两层循环都跳出来呢。不然就不会造成我内层循环index out of bounday错误了。另外有没有什么方式让他知道外层循环的条件已经不满足了,应该两层循环都跳出来。
public class Debug {
public static void main(String[] args){
String a = "MMM";
int i = 0;
int val = 0;
while(i < a.length()){
while(a.charAt(i) == 'M'){
val += 10;
i++;
}
}
System.out.println(val);
}
}
当i=3
的时候,依旧在内层循环里(并未在外层循环条件中判断),调用a.charAt(i)
时报index out of bounday错误。
java
public class Debug { public static void main(String[] args){ String a = "MMM"; int i = 0; int val = 0; while(i < a.length() && a.charAt(i) == 'M'){ val += 10; i++; } System.out.println(val); } }
类c形式的java,你怎么不自己加上异常处理?还过来黑java
debug:
Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 3
at java.lang.String.charAt(String.java:646)
at com.silianbo.Debug.main(Debug.java:19)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)
可以为一个循环命名。这大概是你想问的。
outerLoop:while (i < a.length()) {
while (a.charAt(i) == 'M') {
val += 10;
i++;
if (i >= a.length())
break outerLoop;
}
}
但你完全没必要包一个外层循环,
for(;i < a.length() && a.charAt(i) == 'M';i++)
val += 10;
另外,对于外部循环来说, 内部循环整个做完一套才算外部循环的一次。外部循环那一层的判断只是在每一次外部loop开始时检查的,一次loop只检查一次之后就不管的,并不是时时监控该条件是否满足的。你要时时监控,就必须在你每次改变i
的值之后都作一次检查。