这是我第一次使用异常处理,所以要温和。我有一个简单的blob类接受一个ID,id必须在30到50之间,否则抛出异常。
public class Blob {
int id;
public Blob() {
}
public Blob(int id) throws Exception {
this.id = id;
if (id < 30 || id > 50)
throw new Exception ("id = " +id+ ", must be between 30 and 50 inclusive");
}
}
它应该提示用户输入一个id,如果它不在30到50之间,则抛出异常,并且应该一直持续到用户输入有效输入然后只显示id号。
public class BlobCreator {
public static void main(String[] args) {
int id;
Scanner scan = new Scanner(System.in);
System.out.println("Enter ID number: ");
id = scan.nextInt();
do {
try {
Blob b = new Blob(id);
}
catch (Exception e) {
System.out.println(e);
}
System.out.println("Enter a different ID: ");
id = scan.nextInt();
}
while(true);
}
System.out.println("Blob ID: " +id);
}
我认为我正在使用throw并正确捕获,但我的循环不能正常工作所以我认为这应该是一个简单的修复,但我不能正确。也正在使用while循环,就像我有这种情况的最佳方法,还是有更好的方法来循环抛出和捕获?
感谢您提供的任何帮助
答案 0 :(得分:4)
成功执行代码后,您应该放置break;
。
do {
try {
Blob b = new Blob(id);
break;
}
catch (Exception e) {
System.out.println(e);
}
System.out.println("Enter a different ID: ");
id = scan.nextInt();
} while(true);
因此,每当循环到达其主体的末端时,它就会突破循环。只有在成功创建blob
后才能中断。虽然我不明白你为什么要放break
。 while
循环可以检查输入的输入是否有效并且只是停止循环。
我在while
循环中修改了do-while
...使用true
循环将永远运行,除非构造函数没有抛出异常...这使得代码更通用(如果修改blob构造的条件,则不必修改while
循环的条件)。
答案 1 :(得分:0)
对不起,聚会晚了。希望最终在这里使用的用户可能会发现此功能有用。
不建议使用break
关键字
这是一个非常简单的实现,可以在实现重试机制后脱离
这将循环遍历指定的次数,并且如果异常仍然存在,则将引发异常。在实际情况下,resttemplate
可能会导致IO /网络错误,并且在这种情况下可以重试
public class TestClass {
public static void main(String[] args) throws Exception {
try {
int c = anotherM();
System.out.println("Now the value is" + c);
} catch (Exception e) {
System.out.println("Inside" + e);
}
}
public static int anotherM() throws Exception {
int i = 4;
Exception ex = null;
while (i > 0) {
try {
System.out.println("print i" + i);
throw new IOException();
// return i;
} catch (Exception e) {
System.out.println(e);
i--;
if (i == 1) {
ex = new Exception("ttt");
}
}
}
if (ex != null) {
throw new Exception("all new");
} else {
return i;
}
}
}