Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 处理异常后返回到程序中的特定位置_Java_Exception - Fatal编程技术网

Java 处理异常后返回到程序中的特定位置

Java 处理异常后返回到程序中的特定位置,java,exception,Java,Exception,早上好 我想这对你们来说是个很简单的问题 在下面的代码中,当我们为“a”和“b”变量提供值时,可以将exception NumberFormatException抛出到各个位置。Catch块通过再次启动该方法来处理异常,无论异常是由错误的“a”或“b”值触发的。 我想更改代码,如果在为变量“b”提供值时发生异常,则方法不是从一开始就开始,而是从我假设为“b”提供值的地方开始(换句话说,我不希望用户从一开始就再次为“a”变量提供值) 假设我可以再插入两个方法来处理代码,在其中我提供了“a”和“b”

早上好

我想这对你们来说是个很简单的问题

在下面的代码中,当我们为“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
可能是最好的选择。更好的选择是实现一个单独的方法来读取一个值,直到它能够有效地本地化异常及其处理