如何优雅地处理错误输入(JAVA)
How to gracefully handle wrong input (JAVA)
这是我的代码:我想输入整数,如果我输入一个字符串,我会得到一个异常,但是我的 try catch 不起作用。我只需要帮助来优雅地处理输入。谢谢。我正在为一项大学作业做这件事,坦率地说,我不知道该怎么做,因为他在 class 中提供的示例不一定有效。
public static void main (String[]args) {
Assignment2 game = new Assignment2();
game.playWordSearch();
// System.out.println(game.numRowCol());
//System.out.printf("The words to find: %n %s%n %s%n %s%n %s%n %s%n %n", game.wordStorage(), game.wordStorage(), game.wordStorage(), game.wordStorage(), game.wordStorage());
}
Scanner keyboard = new Scanner(System.in);
private int[][] wordBoard;
private String[] wordList;
private static int row;
private static int col;
public void playWordSearch(){
wordBoard = numRowCol();
wordStorage();
}
public int[][] numRowCol(){
int array[] = new int[2];
for(int i=0; i<=1; i++) {
System.out.printf("Enter a number between (2-15): %n");
array[i] = keyboard.nextInt();
}
try {
System.out.println(array[0]);
System.out.println(array[1]);
} catch (
java.util.InputMismatchException mismatchException) {
System.out.printf("That created an exception, the message is %s%n", mismatchException.getMessage());
}
int arrayArray [][] = new int[array[0]][array[0]];
return arrayArray;
}
public String wordStorage(){
Scanner keyboard = new Scanner(System.in);
System.out.printf("Enter a word with less than 8 characters: ");
String word = keyboard.nextLine();
return word;
}
}
您可能希望在代码中做一些事情:
- 将 main 方法移动到一个空的 Runner class 中。它所做的只是实例化和 运行
Assignment2
.
- 确保您的字段是您在 class 中定义的第一件事。它使您的代码更容易阅读。
- 一般静态字段都是大写的。这当然只是一个惯例。你会在网上找到很多风格指南,例如Google's guide.
- 了解您的错误。
我 运行 您的代码并输入了一个字符串 (java)。结果是:
Enter a number between (2-15):
java
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at eu.webfarmr.Assignment2.numRowCol(Assignment2.java:35)
at eu.webfarmr.Assignment2.playWordSearch(Assignment2.java:26)
at eu.webfarmr.Assignment2.main(Assignment2.java:15)
堆栈跟踪实际上告诉您错误发生的位置 (Assignment2.java:35)。所以你知道这是你需要包装在 try/catch.
中的代码部分
例如你可以这样做:
public int[][] numRowCol() {
int array[] = new int[2];
try {
for (int i = 0; i <= 1; i++) {
System.out.printf("Enter a number between (2-15): %n");
array[i] = keyboard.nextInt();
}
System.out.println(array[0]);
System.out.println(array[1]);
} catch (java.util.InputMismatchException mismatchException) {
System.out.printf("That created an exception, the message is %s%n", mismatchException.getMessage());
} catch (Exception err) {
System.out.println("Another error occurred.");
err.printStackTrace();
}
int arrayArray[][] = new int[array[0]][array[0]];
return arrayArray;
}
但也许您应该将输入读取为字符串 and 然后尝试将输入转换为整数/双精度/其他。这会让您更好地控制转换过程。
还有,你要想想失败意味着什么。在您的情况下,您最终会得到一个部分初始化的值数组。
这是我的代码:我想输入整数,如果我输入一个字符串,我会得到一个异常,但是我的 try catch 不起作用。我只需要帮助来优雅地处理输入。谢谢。我正在为一项大学作业做这件事,坦率地说,我不知道该怎么做,因为他在 class 中提供的示例不一定有效。
public static void main (String[]args) {
Assignment2 game = new Assignment2();
game.playWordSearch();
// System.out.println(game.numRowCol());
//System.out.printf("The words to find: %n %s%n %s%n %s%n %s%n %s%n %n", game.wordStorage(), game.wordStorage(), game.wordStorage(), game.wordStorage(), game.wordStorage());
}
Scanner keyboard = new Scanner(System.in);
private int[][] wordBoard;
private String[] wordList;
private static int row;
private static int col;
public void playWordSearch(){
wordBoard = numRowCol();
wordStorage();
}
public int[][] numRowCol(){
int array[] = new int[2];
for(int i=0; i<=1; i++) {
System.out.printf("Enter a number between (2-15): %n");
array[i] = keyboard.nextInt();
}
try {
System.out.println(array[0]);
System.out.println(array[1]);
} catch (
java.util.InputMismatchException mismatchException) {
System.out.printf("That created an exception, the message is %s%n", mismatchException.getMessage());
}
int arrayArray [][] = new int[array[0]][array[0]];
return arrayArray;
}
public String wordStorage(){
Scanner keyboard = new Scanner(System.in);
System.out.printf("Enter a word with less than 8 characters: ");
String word = keyboard.nextLine();
return word;
}
}
您可能希望在代码中做一些事情:
- 将 main 方法移动到一个空的 Runner class 中。它所做的只是实例化和 运行
Assignment2
. - 确保您的字段是您在 class 中定义的第一件事。它使您的代码更容易阅读。
- 一般静态字段都是大写的。这当然只是一个惯例。你会在网上找到很多风格指南,例如Google's guide.
- 了解您的错误。
我 运行 您的代码并输入了一个字符串 (java)。结果是:
Enter a number between (2-15):
java
Exception in thread "main" java.util.InputMismatchException
at java.util.Scanner.throwFor(Scanner.java:864)
at java.util.Scanner.next(Scanner.java:1485)
at java.util.Scanner.nextInt(Scanner.java:2117)
at java.util.Scanner.nextInt(Scanner.java:2076)
at eu.webfarmr.Assignment2.numRowCol(Assignment2.java:35)
at eu.webfarmr.Assignment2.playWordSearch(Assignment2.java:26)
at eu.webfarmr.Assignment2.main(Assignment2.java:15)
堆栈跟踪实际上告诉您错误发生的位置 (Assignment2.java:35)。所以你知道这是你需要包装在 try/catch.
中的代码部分例如你可以这样做:
public int[][] numRowCol() {
int array[] = new int[2];
try {
for (int i = 0; i <= 1; i++) {
System.out.printf("Enter a number between (2-15): %n");
array[i] = keyboard.nextInt();
}
System.out.println(array[0]);
System.out.println(array[1]);
} catch (java.util.InputMismatchException mismatchException) {
System.out.printf("That created an exception, the message is %s%n", mismatchException.getMessage());
} catch (Exception err) {
System.out.println("Another error occurred.");
err.printStackTrace();
}
int arrayArray[][] = new int[array[0]][array[0]];
return arrayArray;
}
但也许您应该将输入读取为字符串 and 然后尝试将输入转换为整数/双精度/其他。这会让您更好地控制转换过程。
还有,你要想想失败意味着什么。在您的情况下,您最终会得到一个部分初始化的值数组。