如何管理由char和int组成的控制台用户输入?

时间:2016-12-09 10:32:30

标签: java multidimensional-array user-input

我创建了一个如下所示的2D数组游戏:

.........H
...X......
...X.@@@..
...X......
...X.@.X..
.XXXXX.X..
.......X..
.....@.X..
.......X..
P.........
Next option ?

玩家在吃“甜甜圈”时的生命增加一,这使得跳跃网格成为可选。因此,不是按下‘U’, ’D’, ’L’ or ’R’并按下Enter键从一个网格移动到下一个网格,玩家在吃完一个甜甜圈后可以选择输入‘U2’来跳过一个网格并降落到更高的网格或说‘R2’向右跳一个网格等。如果玩家吃了第二个甜甜圈,他现在可以输入‘U3’'D3'之类的命令来跳过两个网格。等等。

我编写了以下代码,没有取得多大成功:

// Declare a variable to hold values for use in regular movements
    private static char opt1;

// Declare a variable to hold values for use in specifying square numbers for super moves
private static int opt2;

public static void main(String[] args) {
String opt;

    // The code below is a part of a do-while loop that keeps the game running till it ends naturally

        System.out.print("Next option ?");
                opt = scan.next();
                if (lives == 1) {
                    opt1 = opt.charAt(0);
                } else if (lives > 1) {
                    opt1 = opt.charAt(0);
                    opt2 = Character.getNumericValue(opt.charAt(1));
                }

只有1点生命,它完美无缺,但是当生命增加时,我所拥有的问题就是如此: 控制台现在需要两个输入,即一个char和一个int,我理解是因为程序切换到上面代码的'else'部分,但我想要一个场景,即使生命不止一个,如果用户输入像‘U’, ’D’, ’L’, ’R’, ‘Z’ (undo move) or ’M’ (mark player movement trail)之类的字符,程序将只读取它并执行函数而不需要int。因为截至目前,当生命高于一,我输入一个字符并按下输入时,它会打击我:

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 1
    at java.lang.String.charAt(String.java:658)

提前感谢您的建议和指示。

如果您需要进一步澄清,请与我们联系。

0 个答案:

没有答案