当前位置: 首页 > 知识库问答 >
问题:

用throw语句实现try-catch块

华聪
2023-03-14

在我必须进行的猜测游戏中,我需要包含一个带有两个catch子句的try-catch块(一个多catch块用于我的两个自定义异常:BadGuessExceptionToomanyGuessException,一个块用于NumberFormatException)。

我试图在程序中创建条件来抛出自定义异常,因为我不知道它们如何正常工作的逻辑。我有编译错误,希望能帮助重新运行我的程序,以便它正确地实现try-catch块。

我的自定义异常类:

public class BadGuessException extends Exception
{
  /**
   * no-arg constructor
   */
  public BadGuessException()
  {
    super("Sorry, that was an invalid guess!");
  }

  /**
   * parametrized constructor
   * @param message String message passed to super class's constructor
   */
  public BadGuessException(String message)
  {
    super(message);
  }
}

public class TooManyGuessesException extends Exception
{
  /**
   * no-arg constructor
   */
  public TooManyGuessesException()
  {
    super("Sorry, too many guesses!");
  }

  /**
   * parametrized constructor
   * @param guess integer value representing amount of guesses (turns)
   */
  public TooManyGuessesException(int guess)
  {
    super("Sorry, you guessed " + guess + " times!");
  }

}

我的程序有编译错误:

import java.util.Random;
import java.util.*;

public class GuessingGame throws NumberFormatException
{
  public static void main(String[] args)
  {
    //Scanner object to receive user input
    Scanner keyboard = new Scanner(System.in);

    //Create Random class object & random variable
    Random rng = new Random();
    int n = rng.nextInt(10 - 1 + 1) + 1;

    //Initialize incrementor for guessing turns
    int turn = 1;

    //Create variable for user input (guess)
    int guess;

    try
    {
      while(guess != n)
      {
        //Exception handling for more than five turns
        if(turn > 5)
          throw new TooManyGuessesException();

        //Prompt user to enter their guess
        System.out.println("Guess a number between 1 and 10 inclusive.");
        System.out.println("Hint: the answer is " + n);
        //Receive user input (their guess)
        guess = keyboard.nextInt();

        //Increment turn variable
        turn++;

        if(guess < 1 || guess > 10)
          throw new BadGuessException();
        else if(guess == n)
          System.out.println("YOU WIN!\nIt took you " + turn + " attempts.");
      }
    }
    catch(BadGuessException e | TooManyGuessesException e)
    {
      e.getMessage();
    }
    catch(NumberFormatException e)
    {
      System.out.println("Sorry, you entered an invalid number format.");
    }

  }
}

共有1个答案

魏朗
2023-03-14

在GuessingGame类中进行更改,在多个try块中删除BadGuessException之后的e。用0初始化guess并从类声明中删除NumberformatException;

import java.util.Random;
import java.util.*;

public class GuessingGame
{
  public static void main(String[] args)
  {
    //Scanner object to receive user input
    Scanner keyboard = new Scanner(System.in);

    //Create Random class object & random variable
    Random rng = new Random();
    int n = rng.nextInt(10 - 1 + 1) + 1;

    //Initialize incrementor for guessing turns
    int turn = 1;

    //Create variable for user input (guess)
    int guess = 0 ;

    try
    {
      while(guess != n)
      {
        //Exception handling for more than five turns
        if(turn > 5)
          throw new TooManyGuessesException();

        //Prompt user to enter their guess
        System.out.println("Guess a number between 1 and 10 inclusive.");
        System.out.println("Hint: the answer is " + n);
        //Receive user input (their guess)
        guess = keyboard.nextInt();

        //Increment turn variable
        turn++;

        if(guess < 1 || guess > 10)
          throw new BadGuessException();
        else if(guess == n)
          System.out.println("YOU WIN!\nIt took you " + turn + " attempts.");
      }
    }
    catch(BadGuessException | TooManyGuessesException e)
    {
      e.getMessage();
    }
    catch(NumberFormatException e)
    {
      System.out.println("Sorry, you entered an invalid number format.");
    }

  }
}
 类似资料:
  • 本文向大家介绍JavaScript语句错误throw、try及catch实例解析,包括了JavaScript语句错误throw、try及catch实例解析的使用技巧和注意事项,需要的朋友参考一下 try 语句测试代码块的错误。 catch 语句处理错误。 throw 语句创建自定义错误。 finally 语句在 try 和 catch 语句之后,无论是否有触发异常,该语句都会执行。 JavaScr

  • 在实际开发中,根据 try catch 语句的执行过程,try 语句块和 catch 语句块有可能不被完全执行,而有些处理代码则要求必须执行。例如,程序在 try 块里打开了一些物理资源(如数据库连接、网络连接和磁盘文件等),这些物理资源都必须显式回收。 Java的垃圾回收机制不会回收任何物理资源,垃圾回收机制只回收堆内存中对象所占用的内存。 所以为了确保一定能回收 try 块中打开的物理资源,异

  • 我刚刚开始用java编写一个21点游戏。我试图让程序要求用户再次输入,如果他们输入的现金不是一个有效的整数。我看到许多带有catch的try语句示例,但没有一个是有效的。程序给出的错误InputMismatchException无法解析为类型。我遵循的一个线程就是这个,我有完全相同的代码,只是变量名不同。给你。Java输入不匹配异常 这是我的密码: 任何关于为什么我几乎精确的代码不起作用的帮助都将

  • 主要内容:多重catch语句在实际应用中,对于错误的处理是极其重要的,任何程序都很难做到百分百完美,程序中可能存在大量未知问题,所以程序开发时一定要对各种问题进行相应的处理,而 Java 提供的异常处理机制可以帮用户更好地解决这方面的问题。Java 的异常处理机制可以让程序具有极好的容错性,让程序更加健壮。 Java 的异常处理通过 5 个关键字来实现: try、 catch、 throw、 throws 和 finally

  • 问题内容: 在内部使用try / catch或在内部使用try / catch的正确方法是什么? 与 问题答案: 在我看来,我的观点是: 以上是正确的方法。 因为,使用这种方法,如果与数据库的连接存在异常,则将其捕获在catch块内。但是使用第一种方法,则不会。

  • 本文向大家介绍C++编程异常处理中try和throw以及catch语句的用法,包括了C++编程异常处理中try和throw以及catch语句的用法的使用技巧和注意事项,需要的朋友参考一下 若要在 C++ 中实现异常处理,你可以使用 try、throw 和 catch 表达式。 首先,使用 try 块将可能引发异常的一个或多个语句封闭起来。 throw 表达式发出信号,异常条件(通常是错误)已在 t