gpt4 book ai didi

java - 如何创建合适的自定义异常类?

转载 作者:太空宇宙 更新时间:2023-11-04 13:07:08 26 4
gpt4 key购买 nike

我正在尝试创建一个自定义异常类,但遇到了很多麻烦。有人可以帮我吗!我最近刚刚开始编程,希望得到一些指导。

import java.util.Random;
import java.util.Scanner;
import java.util.InputMismatchException;

public class GuessingGame {

public static void main(String[]args) throws BadGuessException
{
int min = 1;
int max = 10;
Random rand = new Random();

int numberToGuess = rand.nextInt((max - min) + 1) + min;

Scanner input = new Scanner(System.in);
int guess;
boolean win = false;
int numberOfTries = 0;

while (!win)
{

System.out.println("Guess a number between 1 and 10: ");
try
{
guess = input.nextInt();
numberOfTries++;


if (guess == numberToGuess)
{
win = true;
System.out.println("YOU GOT IT!");
System.out.println("It took you " + numberOfTries + " tires.");

}
else
{
throw new BadGuessException();
}
}
catch(InputMismatchException e)
{
e.getMessage();
}
}
}

}


import java.util.*;

public class BadGuessException extends Exception {

String message = "Sorry, that was an invalid guess!";

//Default Constructor
public BadGuessException()
{
super();
}

//Parameterized Constructor
public BadGuessException(Throwable cause)
{
super(cause);
}

}

我应该创建 2 个构造函数,一个默认构造函数,一个参数化构造函数。如果用户输入 1-10 之间的数字,我应该在 catch block 中捕获它并打印消息“无效猜测”,如果他们输入字母或其他内容,输出应该类似于“无效输入”(我应该在 BadGuessException 中捕获无效输入,然后将其传递给 InputMismmatch 吗?如果是这样,我该怎么做?)现在,当我运行此代码时,如果我输入一个字母,它不会崩溃,但 while 循环会连续迭代,我无法再输入任何输入。它只是不断重复“猜一个 1 到 10 之间的数字”。

我假设这是因为一旦 try block 执行一次,它就不会再次执行?我该如何解决?抱歉造成任何困惑,很高兴澄清!任何帮助深表感谢。

此外,我不确定如何同时捕获 2 个不同的异常。一种用于无效猜测,另一种用于无效输入。 :/

最佳答案

异常应该用于处理错误、无效输入、非法、异常情况。如果没有猜出正确的数字就是一个错误,那么听起来就好像没有成为读心者也是一个错误。所以 BadGuessException 在这里被滥用了。

为了更好的用例,对于无意义的输入抛出此异常怎么样?例如,由于程序要求用户输入 1 到 10 之间的数字,因此输入 -3 或 99 显然会出错。

中间的循环可以相应修正:

while (!win) {
System.out.println("Guess a number between 1 and 10: ");
try {
guess = input.nextInt();
numberOfTries++;

if (guess == numberToGuess) {
win = true;
System.out.println("YOU GOT IT!");
System.out.println("It took you " + numberOfTries + " tires.");
} else if (guess < 1 || guess > 10) {
throw new BadGuessException();
}
} catch (InputMismatchException e) {
input.nextLine();
}
}

至于创建自定义异常类,您已经这样做了。写得有点乱,清理一下(去掉不必要的东西)就变成了:

public class BadGuessException extends Exception {

private static final String message = "Sorry, that was an invalid guess!";

public BadGuessException() {
super(message);
}
}

更新

我修复了代码中的另一个错误:如果您输入非整数输入,则会抛出 InputMismatchException 。反复。永远。这是因为如果输入无效,input.nextInt() 不会消耗输入。因此,无效输入会保留在那里,并且 input.nextInt() 将继续失败,使您的程序陷入无限循环。

要解决这个问题,您必须以某种方式消耗错误的输入,例如通过读取以下行:

    } catch (InputMismatchException e) {
input.nextLine();
}

关于java - 如何创建合适的自定义异常类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34321468/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com