Правильный способ использовать Scanner и Random в Switch-Statement с Try / catch - PullRequest
0 голосов
/ 11 сентября 2018

Я пытаюсь сделать текстовую игру на Java. и у меня будет много заявлений о переключении со сканером, но я не уверен, какой путь будет лучшим.

Какой лучший способ сделать заявление о переключении со сканером? лучше попробовать + поймать? или сделать петлю?

и если у меня есть, скажем, 10 switch-Statement. Лучше ли иметь 10 разных сканеров, объявленных для каждого оператора switch?

Мне нравится иметь в своем составе команду try + catch в стиле switch-Statement с отдельным сканером, но кто-то сказал, что в этом нет необходимости, и таким образом слишком много тратит память. Я предпочитаю вспоминать метод, когда вводился неправильный тип ввода, и я думаю, что try + catch был лучше в этом смысле, потому что когда он вызывался, он также вызывал Scanner и Random, что давало нам возможность сбросить ввод, введенный пользователем. а также случайно сгенерированное число по Random.

Эти коды здесь являются примерами. и код здесь не хороший код? (только когда дело доходит до try + catch, использование сканера)

public static void levelUpAsk_111(Character chosenMember) {
    try {
        Random rand = new Random();
        Scanner sc = new Scanner(System.in);
        int dicePercent = rand.nextInt(6) + 1;

        int num = sc.nextInt();
        if (num == dicePercent ) {
            System.out.println("** Congratulation!!");
            sc.nextLine();
            System.out.println("**Which one would you like to increase?");
            System.out.println("1. +20 HP");
            System.out.println("2. +10 MP");
            System.out.println("3. +5 ATT");

            levelUpAsk_222(chosenMember);    //the second method
        } else if (num > 7 || num < 1) {
            System.out.println("Please from 1 to 6");
            levelUpAsk_111(chosenMember);   //recall itself
        } else {
            System.out.println("** Sorry..");
            sc.nextLine();

        }
    } catch (InputMismatchException e) {
        System.out.println("Please integer only");
        levelUpAsk_111(chosenMember);  //recall itself
    }
}





 public static void levelUpAsk_222(Character chosenMember) {
    try {
        Scanner sc = new Scanner(System.in);
        int select = sc.nextInt();

        switch (select) {

        case 1:
            System.out.println("** HP has increased by 20.");
            break;
        case 2:
            System.out.println("** MP has increased by 10.");
            break;
        case 3:
            System.out.println("** ATT has incrased by 5.");
            break;
        default:
            System.out.println("From 1 to 3");
            levelUpAsk_222(chosenMember);  //recall itself
            break;

        }
    } catch (InputMismatchException e) {
        System.out.println("Only integer please");  //recall itself
        levelUpAsk_222(chosenMember);
    }
}

1 Ответ

0 голосов
/ 11 сентября 2018

Для операторов switch вам не нужно создавать новый объект Scanner каждый раз, когда вы хотите его использовать. Вы можете объявить это один раз в начале каждого метода. Это более запутанно, если вам приходится иметь дело с несколькими Scanner объектами в вашем коде, чем если у вас есть только один.

Вы можете создать меню циклического переключения с default:, чтобы перехватить незарегистрированные входы. Например

switch (option){  //assuming you declared option to an int and user has inputted a value for it
    case 1:
        {
        //put some code here
        break;
        }
    case 2:
        {
        //put more code here
        break;
        }
    case 0:
        {
        //used to exit the loop
        break;
        }
    default:
        {
        System.out.println("Please enter a integer only");
        levelUpAsk_111(chosenMember); //you can do it this way, or use a do-while looped switch menu that keeps asking until a valid int is input
        }

}
...