Как мне написать общий оператор ввода пользователя, который будет использоваться несколько раз с разными значениями? - PullRequest
0 голосов
/ 05 июня 2018

Я новичок в Java, поэтому я не знал, как сформулировать свой вопрос.Я пытаюсь написать текстовое приключение с множеством различных вариантов для ввода пользователем.Я довольно далеко продвинулся, но меня очень запутывают все пользовательские входы и варианты, которые они могут использовать.Обратите внимание, что я создал короткий способ ввода System.out.println до main , что позволяет мне просто вместо этого ввести text .Мне интересно, могу ли я сделать что-то подобное с пользовательским блоком ввода кода.

import java.util.Scanner;

public class AdventureTest {

static void text(String body){
System.out.println("" + body);
}

public static void main(String[] args) {
    char direction;
    Scanner input = new Scanner(System.in);

    System.out.print("Go: (n/e/s/w)? ");
    direction = input.nextLine().charAt(0);

    switch( direction )
    {
        case 'n':
            text("You go North");
            break;
        case 'e':   
            text("You go East");
            break;
        case 's':
            text("You go South");
            break;
        case 'w':
            text("You go West");
            break;
        default:
            text("You fall down a hole!");
    System.exit(0);
    }

    text("Program continues");
}

}

Ответы [ 3 ]

0 голосов
/ 05 июня 2018

Это твое решение, мой мужчина!Я включил ваш переключатель в цикл do ... while, поэтому после каждого выбора пользователя вы можете спросить его / ее, хотят ли они выбрать другой шаг, и он отлично работает после того, как пользователь не хочет продолжать.

import java.util.Scanner;

public class AdventureTest {

private static Scanner input = new Scanner(System.in);

private static void text(String body) {
    System.out.println("" + body);
}
public static void main(String[] args) {
    char direction,answer = 0;
    do{
    System.out.print("Go n,e,s or w?: ");
    direction = input.nextLine().charAt(0);


        switch( direction )
        {
            case 'n': {
                text("You go North");
                System.out.println("Do you want to continue? (y/n)");
                answer = input.nextLine().charAt(0);
            }
            break;
            case 'e': {
                text("You go East");
                System.out.println("Do you want to continue? (y/n)");
                answer = input.nextLine().charAt(0);
            }
            break;
            case 's':{
                text("You go South");
                System.out.println("Do you want to continue? (y/n)");
                answer = input.nextLine().charAt(0);
            }
            break;
            case 'w':{
                text("You go West");
                System.out.println("Do you want to continue? (y/n)");
                answer = input.nextLine().charAt(0);
            }
            break;
            default:
                text("You fall down a hole!");
                System.exit(0);
        }
    }while(answer == 'y');
    text("Program continues");
}
}
0 голосов
/ 05 июня 2018

То, что вы хотите сделать, это loop , задающий тот же вопрос, но тогда вам понадобится какой-нибудь способ прекратить зацикливание.

Здесь я вставил do .. while (condition) loop.
Я создаю логическое значение done, которое начинается как false - вы не «сделали».
Когда вместо направления nesw вводится q, done - этоустановите на true, чтобы условие while изменилось, и программа прекратила цикл.

import java.util.Scanner;

public class AdventureTest {

    static void text(String body) {
        System.out.println("" + body);
    }

    public static void main(String[] args) {
        char direction;
        boolean done = false;    //  <----- Added This
        Scanner input = new Scanner(System.in);
        System.out.println("Enter q to quit");

        do {
            System.out.print("Go: (n/e/s/w)? ");
            direction = input.nextLine().charAt(0);

            switch( direction )
            {
                case 'n':
                    text("You go North");
                    break;
                case 'e':   
                    text("You go East");
                    break;
                case 's':
                    text("You go South");
                    break;
                case 'w':
                    text("You go West");
                    break;
                case 'q':            // <---- new case, for quit
                    text("You have quit");
                    done = true;
                    break;
                default:
                    text("You fall down a hole!");
                    System.exit(0);
            }

            if (!done) text("Program continues");
        }
        while (!done);
    }
}
0 голосов
/ 05 июня 2018

Не знаю, правильно ли я понял.Хотите ярлык для чтения ввода?Я считаю, что самый общий способ обработки различных входных данных из центральной функции - это вернуть строку и затем преобразовать ее в нужный вам тип:

public static String read(){
    return (new Scanner(System.in)).nextLine();
}

Но я не рекомендую вам делать этотак как вы создаете новый сканер каждый раз, когда читаете ввод пользователя.Вы также можете создать версии для этого для каждого типа, который вам нужен, например, в этой ситуации.

public static String readChr(){
    return (new Scanner(System.in)).nextLine().charAt(0);
}

Но в итоге вы снова сделаете колесо.Пожалуйста, объясните мне, что вы имели в виду.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...