重复的局部变量Object [] JOptionPane

时间:2013-03-05 09:16:09

标签: java eclipse variables duplicates

我在我的代码中使用了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"

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

编辑:

代码的大部分是

        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行和最后一行定义了“move”。最后一个给出错误。

6 个答案:

答案 0 :(得分:2)

试试这个

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

...

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

答案 1 :(得分:1)

尝试使用LinkedList而不是array

看到这种方法:

   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());

答案 2 :(得分:0)

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

{
    Object[] move = {...};
    ...
}
...
{
    Object[] move = {...};
    ...
}

答案 3 :(得分:0)

好吧,你的问题可以引用java数组初始化。当您编写类似Object[] move = { "Up", "Down" };的代码时,您应该静态初始化数组。因此,如果您再次尝试move = { "Up", "Down", "Left" };,则意味着您将再次初始化阵列,这是非法的。所以你会收到一条错误信息。如果要创建对多次使用的对象数组的引用,可以编写类似Object[] move=new Object[count]的代码,并且必须给出不可变数组的长度...如果要更改一个元素它,通过使用索引或您编写另一个代码,如上所述,并将其设置为引用。比如Object[] move2=new Object[count];move=move2;

答案 4 :(得分: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();

答案 5 :(得分:-1)

试试这种方式

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

.... some code

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