Java 如何编写一个通用的用户输入语句,并使用不同的值多次使用?

Java 如何编写一个通用的用户输入语句,并使用不同的值多次使用?,java,user-input,Java,User Input,我是Java新手,所以我真的不知道如何表达我的问题。我正在尝试编写一个文本冒险,有很多不同的选项供用户输入。我已经取得了相当大的进步,但是我对所有的用户输入和选项感到非常困惑。请注意,我在main之前创建了一个输入System.out.println的短方法,允许我只输入文本。我想知道我是否可以对用户输入代码块做类似的事情 import java.util.Scanner; public class AdventureTest { static void text(String body){

我是Java新手,所以我真的不知道如何表达我的问题。我正在尝试编写一个文本冒险,有很多不同的选项供用户输入。我已经取得了相当大的进步,但是我对所有的用户输入和选项感到非常困惑。请注意,我在main之前创建了一个输入System.out.println的短方法,允许我只输入文本。我想知道我是否可以对用户输入代码块做类似的事情

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");
}

}我不知道我是否理解正确。您想要一个用于读取输入的shorcut吗? 处理中心函数不同输入的最通用方法是返回字符串,然后将其转换为所需类型,如下所示:

public static String read(){
    return (new Scanner(System.in)).nextLine();
}
但我不建议您这样做,因为您每次读取用户输入时都要创建一个新的扫描仪。 您还可以为这种情况下需要的每种类型创建相应的版本

public static String readChr(){
    return (new Scanner(System.in)).nextLine().charAt(0);
}
但你最终会再次制造轮子。
请告诉我你的意思。

这是你的解决方案,伙计! 我将您的开关置于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");
}
}
你想做的是循环,问同样的问题,但是你需要一些方法来停止循环

在这里,我加入了一个循环。
我创建了一个布尔值
done
,它以
false
开头——您还没有“完成”。
当输入
q
而不是nesw方向时,
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);
    }
}
import java.util.Scanner;
公开课考试{
静态无效文本(字符串体){
System.out.println(“+”正文);
}
公共静态void main(字符串[]args){
煤焦方向;

boolean done=false;//常见的方法是问多项选择题,而不单独回答。因此,用户只有预定义的选项,您可以通过数字或前缀数字来识别,如answer_01、answer_02等。如果您想从用户获得多个输入,最简单的方法是将其放入循环中。谢谢,我的意思是不喜欢用户输入“n”对于North,我是否需要再次重写整个Scanner语句和switch语句,以继续处理位于North的内容和那里的用户选项。如果在上一次移动到North之后,我们再次决定在下一次移动到North?或者改为向东?然后再到North,会发生什么?一旦世界从起点开始超过两个正方形,你几乎不可能写出足够的
开关
es来覆盖所有可能性!你需要考虑建立一张世界地图,并跟踪玩家漫游的地方。