Java 处理异常后返回到程序中的特定位置
早上好 我想这对你们来说是个很简单的问题 在下面的代码中,当我们为“a”和“b”变量提供值时,可以将exception NumberFormatException抛出到各个位置。Catch块通过再次启动该方法来处理异常,无论异常是由错误的“a”或“b”值触发的。 我想更改代码,如果在为变量“b”提供值时发生异常,则方法不是从一开始就开始,而是从我假设为“b”提供值的地方开始(换句话说,我不希望用户从一开始就再次为“a”变量提供值) 假设我可以再插入两个方法来处理代码,在其中我提供了“a”和“b”的值……但是有没有其他方法可以在不实现新方法的情况下获得相同的功能Java 处理异常后返回到程序中的特定位置,java,exception,Java,Exception,早上好 我想这对你们来说是个很简单的问题 在下面的代码中,当我们为“a”和“b”变量提供值时,可以将exception NumberFormatException抛出到各个位置。Catch块通过再次启动该方法来处理异常,无论异常是由错误的“a”或“b”值触发的。 我想更改代码,如果在为变量“b”提供值时发生异常,则方法不是从一开始就开始,而是从我假设为“b”提供值的地方开始(换句话说,我不希望用户从一开始就再次为“a”变量提供值) 假设我可以再插入两个方法来处理代码,在其中我提供了“a”和“b”
import java.io.*;
public class Rozdzial1{
public static void Zadanie11()
throws IOException
{
try {
Double a, b, area;
InputStreamReader input = new InputStreamReader(System.in);
BufferedReader read = new BufferedReader(input);
System.out.println("The program calcultes area of rectangle");
System.out.println("Provide length of first edge: ");
a = Double.parseDouble(read.readLine());
System.out.println("Length of the first edge is: " + a);
System.out.println("Provide length of second edge: ");
b = Double.parseDouble(read.readLine());
System.out.println("Length of the second edge is: " + b);
area = a*b;
System.out.println("Area of provided rectangle is: " + area);
}
catch (NumberFormatException exception) {
System.out.println("Provided vale should be a number, please try again\n");
Rozdzial1.Zadanie11();
}
}
public static void main(String[] args)
throws IOException
{
Rozdzial1.Zadanie11();
}
}
在输入有效值之前读取的值应提取到单独的方法中,该方法应分别为
a
和b
变量调用
publicstaticvoidmain(字符串[]args){
Task1();
}
公共静态void Task1(){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“程序计算矩形的面积”);
双a=读取值(扫描,“第一边缘”);
双b=读取值(扫描,“第二边缘”);
System.out.println(“提供的矩形区域为:”+(a*b));
}
专用静态双读值(扫描程序扫描,字符串名称){
试一试{
System.out.println(“提供长度“+name+”:”);
返回Double.parseDouble(scan.nextLine());//使用有效值退出递归
}捕获(NumberFormatException numex){
System.out.println(“提供的值应该是一个数字,请重试”);
返回readValue(扫描,名称);//递归调用无效值
}
}
另一个选项(不创建单独的方法)是使用嵌套循环读取输入,直到提供有效值:
publicstaticvoidtask2(){
扫描仪扫描=新扫描仪(System.in);
System.out.println(“程序计算矩形的面积”);
字符串[]名称={“第一条边”,“第二条边”};
double[]arr=新的双精度[2];
对于(int i=0;i
不要认为有任何其他方法可以实现这一点。实现一种方法来读取a
和一种方法来读取b
可能是最好的选择。更好的选择是实现一个单独的方法来读取一个值,直到它能够有效地本地化异常及其处理