1

我在我的代码中使用 JOptionPane 并且我有这个块:

Object[] move = { "Up", "Down" };
Object moveValue = JOptionPane.showInputDialog(null,
"Where do you want to move?", "Input",
JOptionPane.INFORMATION_MESSAGE, null, move,
move[0]);

我多次使用上面的块,我在想,有没有办法给

Object[] move;

新的价值观。当我尝试时

Object[] move = { "Up", "Down", "Left" };

它说"Duplicate local variable move",当我尝试

move = { "Up", "Down", "Left" };

它给出了错误"Array constants can only be used in initializers"

那么有没有办法让我多次使用我的变量“移动”?

编辑:

代码的更大部分是

        while (true) {
        switch(hero.getPos()) {
        case 1:
            Object[] move = { "Up", "Down" };
            Object moveValue = JOptionPane.showInputDialog(null,
                    "Where do you want to move?", "Input",
                    JOptionPane.INFORMATION_MESSAGE, null, move,
                    move[0]);
            move = null;
            switch ((String) moveValue) {
            case "Üles":
                hero.setPos(hero.getPos() + 1);
                break;
            case "Paremale":
                hero.setPos(hero.getPos() + 5);
                break;
            }
            break;
        case 2:
            System.out.println("Draakon!!!!");
            dragon = new Dragon(1);
            fight = new Fight(hero, dragon);
            break;
        case 3:
            System.out.println("hallo!");
            move = { "Up", "Right", "Left" };

所以我在第四行和最后一行都定义了“移动”。最后一个给出错误。

4

6 回答 6

2

试试这个

Object[] move = { "Up", "Down" };

...

move = new Object[]{ "Up", "Down", "Left" };
于 2013-03-05T09:38:15.037 回答
1

尝试使用 LinkedList 而不是数组

看到这种方法:

   LinkedList<Object> link = new LinkedList<Object>();//needs java.util.*; as import
   link.add("Left");
   link.add("right");
        Object moveValue = JOptionPane.showInputDialog(null,
                "Where do you want to move?", "Input",
                JOptionPane.INFORMATION_MESSAGE, null, link.toArray(),
                link.get(0).toString());
        System.out.println(moveValue);
        link.add("Down");
         moveValue = JOptionPane.showInputDialog(null,
                "Where do you want to move?", "Input",
                JOptionPane.INFORMATION_MESSAGE, null, link.toArray(),
                link.get(0).toString());
于 2013-03-05T09:27:27.860 回答
0

您可以为每个变量的用途设置更详细且唯一的名称。move[]您还可以小心地使用空白代码块来提供更小的范围:

{
    Object[] move = {...};
    ...
}
...
{
    Object[] move = {...};
    ...
}
于 2013-03-05T09:19:49.717 回答
0

嗯,你的问题可以参考java数组初始化。当您编写这样的代码时Object[] move = { "Up", "Down" };,您应该静态初始化数组。因此,如果您再次尝试这样做move = { "Up", "Down", "Left" };,则意味着您将再次初始化数组,这是非法的。因此,您将收到一条错误消息。如果要创建对要多次使用的对象数组的引用,则可以编写类似的代码,Object[] move=new Object[count]并且必须给出不可变数组的长度...如果要更改其中的一个元素,请使用索引或者您像提到的那样编写另一个代码并将其设置为参考。喜欢Object[] move2=new Object[count];move=move2;

于 2013-03-05T09:31:26.480 回答
0

您应该改用列表,例如 ArrayList。

Object[] move = { "Up", "Down" };
ArrayList<Object> list = new ArrayList<>();
for(Object o : move) list.add(o);
// When you need it
list.add("Left");
// To use it with JOptionPane
Object[] finalMoves = list.toArray();
于 2013-03-05T09:33:30.337 回答
-1

试试这个方法

    Object[] move = { "Up", "Down" };

.... some code

    move = { "Up", "Down", "Left" };
于 2013-03-05T09:19:40.593 回答