Java 使用catch块来继续代码而不是处理异常可以吗?
我有一些代码涉及检查用户输入,看看输入的是字符串还是int,并根据结果执行不同的代码。我使用Integer.parseInt来确定用户输入是否为整数,如果不是,则抛出NumberFormatException 但是,为了控制代码流,我使用try/catch语句,catch块用于包含在抛出用户输入的字符串(即NumberFormatException)时将运行的代码 Qn 这是一种可以接受的使用try/catch块的方法吗?我试着用谷歌搜索这个,但我能找到的只是catch块被用来处理抛出的异常的例子,而不是像我现在这样使用它Java 使用catch块来继续代码而不是处理异常可以吗?,java,logic,try-catch,Java,Logic,Try Catch,我有一些代码涉及检查用户输入,看看输入的是字符串还是int,并根据结果执行不同的代码。我使用Integer.parseInt来确定用户输入是否为整数,如果不是,则抛出NumberFormatException 但是,为了控制代码流,我使用try/catch语句,catch块用于包含在抛出用户输入的字符串(即NumberFormatException)时将运行的代码 Qn 这是一种可以接受的使用try/catch块的方法吗?我试着用谷歌搜索这个,但我能找到的只是catch块被用来处理抛出的异常的例
import java.io.*;
import java.util.*;
public class Datafile{
private static Scanner input = new Scanner(System.in);
public static void main(String[] args) throws IOException {
BufferedWriter bw = new BufferedWriter(new FileWriter("C:\\Users\\Kence\\workspace\\Java 8 - Beyond the Basics - Working Files\\Practice Programs\\src\\Practice Data Edited",true));
String data = null;
boolean end = false;
boolean cont = true;
String dataEntered = null;
int menuChoice = printMenu();
while(!end){
switch(menuChoice){
case 1:
System.out.println("Please enter a line of data or press 0 to exit back to the main menu");
dataEntered = input.nextLine();
try {
if(Integer.parseInt(dataEntered) == 0){
break;
}
} catch (Exception e) {
data += dataEntered + "\n";
while(cont){
System.out.println("Data entered.Please enter the next line of data or press quit to exit back to the main menu.");
dataEntered = input.nextLine();
if(Integer.parseInt(dataEntered) == 0){
cont = false;
break;
}else{
data+= dataEntered;
System.out.println("Current data entered is " + dataEntered);
}
}
}
break;
case 2:
System.out.println("2 Entered");
break;
case 3:
System.out.println("3 Entered");
break;
case 4:
System.out.println("4 Entered");
break;
}//End of switch statement
menuChoice = printMenu();
}
input.close();
}//End of main
public static void printStars(){
for(int i = 0; i<66 ; i++){
System.out.print("*");
}
System.out.println();
}
public static int printMenu(){
printStars();
System.out.println("System Started");
printStars();
System.out.println("Enter 1 to input a new line of data");
System.out.println("Enter 2 to list all data");
System.out.println("Enter 3 to save existing data");
System.out.println("Enter 4 to load data");
printStars();
return Integer.parseInt(input.nextLine());
}
}
import java.io.*;
导入java.util.*;
公共类数据文件{
专用静态扫描仪输入=新扫描仪(System.in);
公共静态void main(字符串[]args)引发IOException{
BufferedWriter bw=new BufferedWriter(新文件编写器(“C:\\Users\\Kence\\workspace\\Java 8-超越基础-工作文件\\实践程序\\src\\Practice Data Edited”,true));
字符串数据=null;
布尔结束=假;
布尔控制=真;
字符串dataEntered=null;
int menuChoice=打印菜单();
当(!结束){
开关(menuChoice){
案例1:
System.out.println(“请输入一行数据或按0退出返回主菜单”);
dataEntered=input.nextLine();
试一试{
if(Integer.parseInt(dataEntered)==0){
打破
}
}捕获(例外e){
数据+=输入的数据+“\n”;
while(续){
System.out.println(“已输入数据。请输入下一行数据或按退出退出退出主菜单”);
dataEntered=input.nextLine();
if(Integer.parseInt(dataEntered)==0){
cont=假;
打破
}否则{
数据+=输入的数据;
System.out.println(“当前输入的数据为”+输入的数据);
}
}
}
打破
案例2:
系统输出打印项次(“2输入”);
打破
案例3:
系统输出打印项次(“3输入”);
打破
案例4:
系统输出打印项次(“4输入”);
打破
}//开关结束语句
menuChoice=打印菜单();
}
input.close();
}//干管末端
公共静态void printStars(){
对于(int i=0;i来说,使用try/catch块作为控制流并不被认为是最佳实践,但如果您不关心最佳实践,那么它是“可接受的”
有关检查数字是否为整数的其他方法的示例,请参阅。您可以使用其中一个示例,然后如果它是整数,请检查它是否等于零
此外,在代码中,第二次调用Integer.parseInt(dataEntered)
仍可能引发无法捕获的异常。异常通常只应在异常情况下使用(请参见名称来源?)。它们在紧密循环中尤其糟糕,因为执行开销很高。用户输入无效似乎是很常见的情况,因此我会寻找另一种方法
但这一切都取决于语言。例如,在Python中,try/catch是事实上的编码方式(duck类型)