首页 > 解决方案 > 如何在java中应用用户定义的try catch块

问题描述

我是初学者,我已经完成了基本的 Nim 游戏。现在我想将try catch块应用到程序中以确保流控制是完美的。但是,我现在看到的资源是在main方法中捕获异常,所有创建的方法都必须在try块中调用才能捕获异常。

就我而言,我创建了类的构造函数来调用processCommands面板。然后,此面板调用类中的其他方法。

我需要commands在面板中捕获用户输入以查看命令是否有效。

我试过了:https ://beginnersbook.com/2013/04/user-defined-exception-in-java/

但似乎我必须重建我迄今为止建立的方法。有没有什么办法解决这一问题?

任何帮助表示赞赏。感谢您的善意和耐心。

这是我的一部分Nimsys

import java.util.ArrayList;
import java.util.Scanner;

class InvalidUserInput extends Exception {
public InvalidUserInput(String s) {
    super(s);
}
}

public class Nimsys{

private NimModel nimModel;

public static void main(String[] args) throws InvalidUserInput {
    Nimsys nimsys = new Nimsys();
    nimsys.processCommands();
}


public Scanner in = new Scanner(System.in);

private void processCommands() {
    this.nimModel = new NimModel();
    System.out.println("Welcome to Nim\n");
    while (true) {
        System.out.print('$');
        String [] commandin = in.nextLine().split(" ");

        if (commandin[0].equalsIgnoreCase("addplayer")) {
            addPlayer(commandin[1]);
        }
        if (commandin[0].equalsIgnoreCase("removeplayer")) {
            if (commandin.length > 1) {
                removePlayer(commandin[1]);
            } else {
                removePlayer("");
            }
        }
        if (commandin[0].equalsIgnoreCase("editplayer")) {
            editPlayer(commandin[1]);
        }
        if (commandin[0].equalsIgnoreCase("displayplayer")) {
            if (commandin.length > 1 ){
                displayPlayer(commandin[1]);
            } else {
                displayPlayer("");
            }

        }
        if (commandin[0].equalsIgnoreCase("startgame")) {
            startGame(commandin[1]);
        }
        if (commandin[0].equalsIgnoreCase("resetstats")) {
            if (commandin.length > 1 ){
                resetStats(commandin[1]);
            } else {
                resetStats("");
            }
        }

        if (commandin[0].equalsIgnoreCase("rankings")) {
            if (commandin.length > 1 && commandin[1].equals("asc")) {
                rankings(commandin[1]);
            }
            else if (commandin.length > 1 && commandin[1].equals("desc")) {
                rankings(commandin[1]);
            } else {
                rankings("");
            }  
        }

        if (commandin[0].equalsIgnoreCase("exit")) {
            if (commandin.length == 1) {
                System.out.println("");
                break;
            }
        }
    }
}

void userCommandCheck(String [] command) throws InvalidUserInput {
    if (command.length >2) {
        throw new InvalidUserInput("Incorrect number of arguments supplied to command.");
    }
    String [] commandSet = {"addplayer", "removeplayer", "editplayer", "displayplayer", "startgame", "resetstats", "rankings"};
    for(String commandCell: commandSet) {
        if (command[0] != commandCell) {
            throw new InvalidUserInput("`"+command[0]+"'" + " is not a valid command.");
        }
    }
}
}

标签: javatry-catchuser-defined

解决方案


private void processCommands() {
    this.nimModel = new NimModel();
    System.out.println("Welcome to Nim\n");
    while (true) {
        System.out.print('$');
        String [] commandin = in.nextLine().split(" ");

        try {
            switch (userCommandCheck(commandin[0])) {
                case "addplayer":
                    addPlayer(commandin[1]);
                default:

            }
        } catch (InvalidUserInput e) {

        }
}

static String userCommandCheck(String command) throws InvalidUserInput {

    String [] commandSet = {"addplayer", "removeplayer", "editplayer", "displayplayer", "startgame", "resetstats", "rankings"};
    for(String commandCell: commandSet) {
        if (command.equalsIgnoreCase(commandCell)) {
            return command.toLowerCase();
        }
    }
    throw new InvalidUserInput("`"+command+"'" + " is not a valid command.");
}

}


推荐阅读