Java中使用try-catch处理输入异常
Using try-catch to handle input exceptions in Java
我已经为此工作了几个小时,但我无法理解如何在这两个 do while 循环中实现 try-catch 以在用户输入非 int 时进行捕获。我知道有关于此的帖子,但我似乎无法理解。我非常感谢任何建议。
public class Paint {
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
double wallHeight;
double wallWidth;
double wallArea = 0.0;
double gallonsPaintNeeded = 0.0;
final double squareFeetPerGallons = 350.0;
// Implement a do-while loop to ensure input is valid
// Handle exceptions(could use try-catch block)
do {
System.out.println("Enter wall height (feet): ");
wallHeight = scnr.nextDouble();
} while (!(wallHeight > 0));
// Implement a do-while loop to ensure input is valid
// Handle exceptions(could use try-catch block)
do {
System.out.println("Enter wall width (feet): ");
wallWidth = scnr.nextDouble();
} while (!(wallWidth > 0));
// Calculate and output wall area
wallArea = wallHeight * wallWidth;
System.out.println("Wall area: " + wallArea + " square feet");
// Calculate and output the amount of paint (in gallons)
// needed to paint the wall
gallonsPaintNeeded = wallArea/squareFeetPerGallons;
System.out.println("Paint needed: " + gallonsPaintNeeded + " gallons");
}
}
首先在 class:
中将 wallHeight 和 wallWidth 初始化为一个临时值(我们将使用 0)
double wallHeight = 0;
double wallWidth = 0;
然后你想把 scnr.nextDouble();
放在 try
块中以捕获解析错误:
do {
System.out.println("Enter wall height (feet): ");
try{
wallHeight = scnr.nextDouble();
}catch(InputMismatchException e){
scnr.next(); //You need to consume the invalid token to avoid an infinite loop
System.out.println("Input must be a double!");
}
} while (!(wallHeight > 0));
注意 catch
块中的 scnr.next();
。您需要这样做才能使用无效令牌。否则它将永远不会从缓冲区中删除并且 scnr.nextDouble();
将继续尝试读取它并立即抛出异常。
我已经为此工作了几个小时,但我无法理解如何在这两个 do while 循环中实现 try-catch 以在用户输入非 int 时进行捕获。我知道有关于此的帖子,但我似乎无法理解。我非常感谢任何建议。
public class Paint {
public static void main(String[] args) {
Scanner scnr = new Scanner(System.in);
double wallHeight;
double wallWidth;
double wallArea = 0.0;
double gallonsPaintNeeded = 0.0;
final double squareFeetPerGallons = 350.0;
// Implement a do-while loop to ensure input is valid
// Handle exceptions(could use try-catch block)
do {
System.out.println("Enter wall height (feet): ");
wallHeight = scnr.nextDouble();
} while (!(wallHeight > 0));
// Implement a do-while loop to ensure input is valid
// Handle exceptions(could use try-catch block)
do {
System.out.println("Enter wall width (feet): ");
wallWidth = scnr.nextDouble();
} while (!(wallWidth > 0));
// Calculate and output wall area
wallArea = wallHeight * wallWidth;
System.out.println("Wall area: " + wallArea + " square feet");
// Calculate and output the amount of paint (in gallons)
// needed to paint the wall
gallonsPaintNeeded = wallArea/squareFeetPerGallons;
System.out.println("Paint needed: " + gallonsPaintNeeded + " gallons");
}
}
首先在 class:
中将 wallHeight 和 wallWidth 初始化为一个临时值(我们将使用 0)double wallHeight = 0;
double wallWidth = 0;
然后你想把 scnr.nextDouble();
放在 try
块中以捕获解析错误:
do {
System.out.println("Enter wall height (feet): ");
try{
wallHeight = scnr.nextDouble();
}catch(InputMismatchException e){
scnr.next(); //You need to consume the invalid token to avoid an infinite loop
System.out.println("Input must be a double!");
}
} while (!(wallHeight > 0));
注意 catch
块中的 scnr.next();
。您需要这样做才能使用无效令牌。否则它将永远不会从缓冲区中删除并且 scnr.nextDouble();
将继续尝试读取它并立即抛出异常。