如何在java中应用用户定义的try catch块?

问题描述 投票:0回答:2

我是一个初学者,我已经完成了基本的Nim游戏。现在我想应用 try catch 块到程序中,以确保流程控制的完美。不过,我目前看到的资源是在主方法中捕捉异常,所有创建的方法必须在 try 块来捕获异常。

在我的例子中,我创建了我的类的构造函数来调用了 processCommands 面板。然后,这个面板调用类中的其他方法。

我需要捕捉用户的输入 commands 在面板上查看命令是否有效。

我已经试过了。https:/beginnersbook.com201304用户定义的异常在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.");
        }
    }
}
}
java try-catch user-defined
2个回答
1
投票
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.");
}

}


0
投票

最后,我这样做。我认为是更清晰的,因为我希望命令面板看起来很干净。

class InvalidUserInput extends Exception {}

Main class {

private void processCommands() {
// commands inside
// try catch block
try {
      String [] commandSet = {"addplayer", "addaiplayer", "removeplayer", "editplayer", "displayplayer", "startgame", "resetstats", "rankings"};
      boolean contains = Arrays.stream(commandSet).anyMatch(commandin[0]::equals); //check if commandin[0] in any of values in the commandSet

      if (!contains) {
           throw new InvalidUserInput();
       }

       } catch (Exception e) {
           System.out.println("`"+commandin[0]+"`" + " is not a valid command.");
}
}
© www.soinside.com 2019 - 2024. All rights reserved.