为什么在exception
捕获后继续流动?当我点击按钮,吐司显示消息但流程继续....
我告诉你我的代码!
public static int showResult2(View v) {
int totalAmount = 0;
for (Birra b : biAdapter.getBox()) {
if (b.selected) {
try {
int quantitaInt = Integer.parseInt(b.getQuantità());
totalAmount += b.distance * quantitaInt;
}catch(NumberFormatException exc){
System.out.println(exc);
Toast.makeText(context, "inserisci una quantita' a \""+b.name, Toast.LENGTH_LONG).show();
break;
}
}
}
return totalAmount;
}
在另一类课程中,我回忆起方法:
ThreeFragment tf = new ThreeFragment();
string4 = tf.showResult(v);
try {
totalebibite = tf.showResult2(v);
} catch (NumberFormatException exc) {
exc.printStackTrace();
}
答案 0 :(得分:0)
你已经抓住异常,因此Java假定您将充分处理它。
如果您不想要这种行为,除了完全不catch
之外,您可以在打印完邮件后重新抛出异常(throw exc;
),这意味着更高的调用堆栈应该处理它,或使用break;
语句来提前结束循环。
答案 1 :(得分:0)
如果你想在异常使用中打破你的循环,如下所示。
你应该加上休息时间;在捕获
中断;是你需要打破任何循环语句,如for,while或do-while。
如果它的出现意味着确保你不是一次又一次地调用这种方法。
同时检查您的Java类中是否有任何其他方法使用相同的for循环条件。
您不应该调用您的片段类。调用方法是一种错误的方式。
ThreeFragment tf = new ThreeFragment();
string4 = tf.showResult(v);
totalebibite = tf.showResult2(v);
这是一种以这种方式调用方法的静态方法
ThreeFragment.showResult2(v);
检查这个showResult(v);具有相同的循环
答案 2 :(得分:0)
下面的代码与您提供的代码类似。正如别人指出的那样,打破;结束最近的循环。
for(int i=0; i<10; i++) {
if(true) {
try{
//Your logic here, which could throw exception
System.out.println("throwing");
if(true) {
throw new Exception("This is it");
}
}catch(Exception e){
System.out.println("catching");
break;
}
System.out.println("inside if");
}
System.out.println("inside for");
}
System.out.println("outside for");
使用break是一种糟糕的编程习惯。您可以将代码流更改为类似的内容。
try{
System.out.println("inside try");
for(int i=0; i<10; i++) {
if(true) {
if(true) {
throw new Exception("This is it");
}
System.out.println("inside if");
}
System.out.println("inside for");
}
}
catch(Exception e){
System.out.println("catching");
}
System.out.println("after catch");
如果您的问题得到解答,请将您的问题标记为已回答。
答案 3 :(得分:0)
将try / catch块放在循环周围而不是内部,因此循环退出异常:
try {
for (Birra b : biAdapter.getBox()) {
if (b.selected) {
int quantitaInt = Integer.parseInt(b.getQuantità());
totalAmount += b.distance * quantitaInt;
}
}
} catch (NumberFormatException exc) {
System.out.println(exc);
Toast.makeText(context, "inserisci una quantita' a \""+b.name, Toast.LENGTH_LONG).show();
}
或者,在catch块中你可以a)重新抛出异常,b)退出循环,或c)从方法返回。