break不能在循环外使用
Break can not be used out side of loop
for(int i = 0; i < 10; ++i) {
outerTimer = new Timer() {
@Override
public void run() {
if(stopTimer) {
cancel();
break; // break cannot be used outside of a loop or a switch
}
repeatLoop();
}
};
outerTimer.run();
outerTimer.scheduleRepeating(tmptimerDuration);
}
在上面的代码中,当 stoptimer 为真时,我使用 break 来中断循环,但它会抛出错误
break cannot be used outside of a loop or a switch
但是我在定时器的 break
内部 中使用了这个,其中定时器在另一个 for 循环中。
那么为什么我会收到错误消息?
您可以有一个 final boolean
变量( 可以 从函数访问),并在您应该中断时将其值设置为 true
。然后,在 for
循环中,您只需检查变量 true
和 break.
您的代码不起作用,因为 break
并不真正在 for
循环内,它在另一个范围内的匿名函数内。
匿名 classes 在编译时变成独立的 classes。以下代码大致等价:
class ContainingClass {
void myMethod() {
for(int i = 0; i < 10; ++i) {
outerTimer = new MyAnonymousTimer();
outerTimer.run();
outerTimer.scheduleRepeating(tmptimerDuration);
}
}
}
class MyAnonymousTimer extends Timer {
@Override
public void run() {
if(stopTimer) {
cancel();
break; // break cannot be used outside of a loop or a switch
}
repeatLoop();
}
}
(名称 MyAnonymousTimer
不是 class 的实际名称;它更像 ContainingClass
)
因此,break
并不真正在循环中;您可以在循环中声明它只是语法上的方便。
您需要使用 return
,就像停止执行任何其他 void
方法一样。
您看到 "break" 以图形方式位于循环内,但 "break" 确实位于不同的范围内。
这样 break 指令在内部范围内执行(注意每次迭代都有一个新指令)。
repeatLoop 有什么作用?因为我在考虑不同的解决方案,但我必须知道它的行为。
for(int i = 0; i < 10; ++i) {
outerTimer = new Timer() {
@Override
public void run() {
if(stopTimer) {
cancel();
break; // break cannot be used outside of a loop or a switch
}
repeatLoop();
}
};
outerTimer.run();
outerTimer.scheduleRepeating(tmptimerDuration);
}
在上面的代码中,当 stoptimer 为真时,我使用 break 来中断循环,但它会抛出错误
break cannot be used outside of a loop or a switch
但是我在定时器的 break
内部 中使用了这个,其中定时器在另一个 for 循环中。
那么为什么我会收到错误消息?
您可以有一个 final boolean
变量( 可以 从函数访问),并在您应该中断时将其值设置为 true
。然后,在 for
循环中,您只需检查变量 true
和 break.
您的代码不起作用,因为 break
并不真正在 for
循环内,它在另一个范围内的匿名函数内。
匿名 classes 在编译时变成独立的 classes。以下代码大致等价:
class ContainingClass {
void myMethod() {
for(int i = 0; i < 10; ++i) {
outerTimer = new MyAnonymousTimer();
outerTimer.run();
outerTimer.scheduleRepeating(tmptimerDuration);
}
}
}
class MyAnonymousTimer extends Timer {
@Override
public void run() {
if(stopTimer) {
cancel();
break; // break cannot be used outside of a loop or a switch
}
repeatLoop();
}
}
(名称 MyAnonymousTimer
不是 class 的实际名称;它更像 ContainingClass
)
因此,break
并不真正在循环中;您可以在循环中声明它只是语法上的方便。
您需要使用 return
,就像停止执行任何其他 void
方法一样。
您看到 "break" 以图形方式位于循环内,但 "break" 确实位于不同的范围内。 这样 break 指令在内部范围内执行(注意每次迭代都有一个新指令)。
repeatLoop 有什么作用?因为我在考虑不同的解决方案,但我必须知道它的行为。