我在哪里可以在游戏中使用try / catch块?

时间:2017-01-20 21:06:59

标签: exception methods try-catch

这是我创建的游戏,我只需要以某种方式添加一个尝试捕获它,我就被卡住了。

/**
*
* @author 
*/
import java.util.*;
public class magiceightball {
public static void main (String [] args){
    questions();
} 
public static void questions(){ //method      

    Scanner input = new Scanner(System.in);

        while(true){

        System.out.println();
        System.out.println("Welcome to the Magic 8 Ball Game!");
        System.out.println("Shake(Type 'Shake' to have you question answered, or type 'No more'to end the game");
        String request = input.nextLine();

我想我可以在这里添加一个尝试

        if (request.equalsIgnoreCase("shake")){
    answer();
    }
        else if(request.equalsIgnoreCase("No more")){
        break;
    }
        else{
        System.out.println("Invalid answer. Please try again!");
    }
}

}

    public static void answer(){

    switch(shake()){
        case 1:System.out.println("It is certain");
            break;
        case 2:System.out.println("It is decidedly so");
            break;
        case 3:System.out.println("Most likely");
            break;
        case 4:System.out.println("Ask again later");
            break;
        case 5:System.out.println(" Better not tell you now");
            break;
        case 6:System.out.println("Don't count on it");
            break;
        case 7:System.out.println("My reply is no");
            break;
        case 8:System.out.println("My sources say no");
            break;
        case 9:System.out.println("Unlikely");
            break;
        case 10:System.out.println("Doubtful");
            break;
    }

}
        public static int shake(){

这是另一个我认为可以使用try和catch来检查算术的区域

    Random rand = new Random();//using random numbers
        int randomInt = rand.nextInt(10 - 1 + 1) + 1;//i used this to get a random number from 1-10
        System.out.println(randomInt);
        return randomInt;
        }
}

1 个答案:

答案 0 :(得分:1)

由于异常主要用于处理错误或其他异常/意外事件,因此适合此类异常的是answer()方法。想象一下你可能没想到的可能出现的问题。

例如,当shake()方法返回switch语句无法处理的值时会发生什么?考虑一种情况,你增加了随机数生成器的范围,忘了添加其他情况;或者,您没有从配置文件中动态加载足够的答案。

一个简单的解决方案可能是添加default:案例,该案例会返回一些“全能”答案(例如“我不知道”)。但是,更好的解决方案是让default:情况下抛出Exception来表示您的方法没有针对某些卷的答案。

int roll = shake();
switch ( roll ) {
   ...
   default:
       throw new Exception( "No answer for roll: " + roll );
}