Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jsf-2/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 如何使用try-and-catch继续运行程序_Java - Fatal编程技术网

Java 如何使用try-and-catch继续运行程序

Java 如何使用try-and-catch继续运行程序,java,Java,即使第一个答案是错误的,是否可以继续执行指令 例如,在代码中,如果我只是键入hello,而不是true或false,它只会转到catch part异常。然而,它还没有与所有其他问题一起运行。如何让程序执行每个问题,即使其中一个问题由于输入错误而引发inputmaschException import java.util.InputMismatchException; 导入java.util.Scanner; 公共类DataTypeJava{ 公共静态void main(字符串[]args){ 扫

即使第一个答案是错误的,是否可以继续执行指令

例如,在代码中,如果我只是键入
hello
,而不是
true
false
,它只会转到catch part异常。然而,它还没有与所有其他问题一起运行。如何让程序执行每个问题,即使其中一个问题由于输入错误而引发
inputmaschException

import java.util.InputMismatchException;
导入java.util.Scanner;
公共类DataTypeJava{
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
试一试{
System.out.println(“描述布尔操作的数据(对/错:”);
布尔布尔布尔类型=scan.nextBoolean();
System.out.println(“Tipo Booleado:+booleanstype”);
系统输出打印(“描述数据字节”);
byte byteType=scan.nextByte();
System.out.println(“Tipo字节:“+byteType”);
系统输出打印(“描述数据”和“字符”);
String charType=scan.next();
System.out.println(“Tipo Char:+charType”);
系统输出打印(缩写为“);
short shortType=scan.nextShort();
System.out.println(“Tipo Short:+shortType”);
系统输出打印(“描述联合国国际数据”);
int intType=scan.nextInt();
System.out.println(“Tipo Int:+intType”);
系统输出打印(“描述蒂波龙的日期:”);
long longType=scan.nextLong();
System.out.println(“Tipo Long:+longType”);
系统输出打印(“描述浮点数”);
float floatType=scan.nextFloat();
System.out.println(“Tipo Float:+floatType”);
系统输出打印(“描述双精度数据”);
double doubleType=scan.nextDouble();
System.out.println(“Tipo-Double:+doubleType”);
}捕获(输入不匹配异常e){
//TODO:处理异常
系统输出打印项次(“数据输入不正确”);
}
}
}

您可以简单地将一个大的
try catch
块拆分为多个较小的块。这样,即使前面的问题失败,也会执行每个问题

或者,您需要为要接受的每个输入创建验证逻辑。然后,您可以创建一个方法,负责接受或拒绝输入,而不引发异常。但这需要一些额外的工作,并使用额外的方法来验证数据。您可以您需要将所有数据作为
字符串接受,然后自己强制转换。

您有两个选项: •您可以对每个问题使用单独的
try-catch
块。因此,您可以按照自己的方式处理每个问题


•您不再使用
try catch
块,而是按照您想要的方式处理输入。

您可以创建一个需要接口作为参数的接口和方法,如下所示

public interface SafeRunInterface {
    void do();
} 

public void safeRun(SafeRunInterface safeRunInterface){
    try
    {
       safeRunInterface.do();
    }
    catch(Throwable e)
    {
       //Print error

       //Call method itself because exception ouccured.
       safeRun(safeRunInterface);
    }
}
safeRun(() -> {
  //Do something here.
});
因此,您可以像下面这样调用此方法

public interface SafeRunInterface {
    void do();
} 

public void safeRun(SafeRunInterface safeRunInterface){
    try
    {
       safeRunInterface.do();
    }
    catch(Throwable e)
    {
       //Print error

       //Call method itself because exception ouccured.
       safeRun(safeRunInterface);
    }
}
safeRun(() -> {
  //Do something here.
});
以下是有关lamda和pass函数作为参数的信息。

如果使用Java 8,可以指定一个getInput函数,如下所示,该函数管理用户的输入,以便:

  • 仅指定一次公共捕获逻辑
  • 通过Lambda函数简化指定输入句柄逻辑的多问题说明
publicstaticvoidmain(字符串[]args){
getInput(“描述tipo布尔选项的数据(真/假:”,Scanner::nextBoolean,“tipo Booleado:”);
getInput(“描述数据字节:”,扫描器::下一个字节,“数据字节:”);
//……其他问题
}
/**
*转到从标准输入获取输入
*@param inputQuestion用户的输入问题
*@param inputHandler用户的输入处理程序函数
*@param outputLabel要显示给用户的输出标签
*@param扫描器返回的通用输入对象
*/
私有静态void getInput(字符串inputQuestion、函数inputHandler、字符串outputLabel){
扫描仪扫描=新扫描仪(System.in);
试一试{
系统输出打印项次(输入问题);
System.out.println(outputLabel+“”+inputHandler.apply(扫描));
}捕获(输入不匹配异常e){
//TODO:处理异常
系统输出打印项次(“数据输入不正确”);
}
}                                               

是的,我想到了这个想法——这是可能的,但似乎有点重复。@Adnan,这已经被指出是一个错误。