интересно, может ли кто-нибудь сказать мне, почему мой try-catch не работает. Я вводил символ, когда я должен вводить целое число, и программа просто выходит с исключением. Это похоже на попытку, которую я написал в другой программе. Не знаю, почему это не работает. :(Java try-catch не работает
import java.io.*;
import java.util.*;
public class Lab8FileIO {
public static void main(String[] args) throws IOException {
int menuChoice = 0;
String filename, userInput, choice;
boolean playAgain = true;
char response;
Scanner keyboard = new Scanner(System.in);
while (playAgain)
{
// Display menu and get user selection
displayMenu();
do
{
try
{
menuChoice = keyboard.nextInt();
if ((menuChoice < 1) || (menuChoice > 4)) // Make sure user enters a number within the specified range
System.out.print("You must enter a number from 1 to 4!");
}
catch (InputMismatchException e)
{
System.out.print("You must enter a number from 1 to 4!");
keyboard.nextInt();
}
} while (menuChoice < 1 && menuChoice > 4);
// Get input/output filename from user
System.out.print("\nEnter filename in the format filename.txt: ");
filename = keyboard.next();
switch (menuChoice)
{
// Write to file
case 1:
PrintWriter outputFile = new PrintWriter(filename);
userInput = getUserInput();
System.out.println("I am writing your input to filename: " + filename + "\n");
outputFile.println(userInput);
outputFile.close();
break;
// Read from file
case 2:
File file = new File(filename);
Scanner inputFile = new Scanner(file);
System.out.println("I am reading from filename: " + filename + "\n");
while (inputFile.hasNextLine())
{
String line = inputFile.nextLine();
System.out.println(line);
}
inputFile.close();
break;
// Append to file
case 3:
FileWriter appendFile = new FileWriter(filename, true);
userInput = getUserInput();
System.out.println("I am appending your input to filename: " + filename + "\n");
appendFile.write(userInput);
appendFile.close();
break;
// Exit
case 4:
System.out.println("Goodbye!");
System.exit(0);
break;
}
// Ask user to play again
do
{
System.out.print("\nWould you like to continue (Y/N)? ");
choice = keyboard.next();
response = Character.toUpperCase(choice.charAt(0));
} while (response != 'Y' && response != 'N'); // Keep asking until user enters correct response
if (response == 'Y') // Play again
{
playAgain = true;
System.out.println();
}
else if (response == 'N') // Quit
{
playAgain = false;
System.out.println("\nThanks for playing!");
}
}
}
public static void displayMenu()
{
System.out.println("File IO Options:");
System.out.println("1) Write");
System.out.println("2) Read");
System.out.println("3) Append");
System.out.println("4) Quit");
System.out.print("What would you like to do: ");
}
public static String getUserInput()
{
String str;
Scanner keyboard = new Scanner(System.in);
System.out.println("Start typing. Hit enter when you're done:");
str = keyboard.nextLine();
return str;
}
}
Это ошибка, я получаю:
File IO Опции:
1) Написать
2) Читать
3) Append
4) Выйти
Что вы хотите сделать: a
Вы должны ввести число от 1 до 4! Исключение в потоке "главный"
java.util.InputMismatchException
на java.util.Scanner.throwFor (Scanner.java:840)
в java.util.Scanner .next (Scanner.java:1461)
на java.util.Scanner.nextInt (Scanner.java:2091)
на java.util.Scanner.nextInt (Scanner.java:2050)
в Lab8FileIO.main (Lab8FileIO.java:41)
Опубликовать трассировку стека, возможно, вы пытаетесь поймать неправильное исключение * или * вы неправильно используете блок. Вероятно, вы не поймаете все, 'keyboard.nextInt();' также называется * внутри * catch. –
Обратите внимание, что если блок 'keyboard.nextInt()' * inside * 'catch исключает исключение, он не будет пойман, потому что вы уже находитесь за пределами блока' try'. – ruakh
В другой программе, в которой у меня есть подобный try-catch, есть 'keyboard.nextInt();' в ней. Я не понимаю, почему это работает, а этого нет. – speedracer