【问题标题】:Duplicate local variable Object[] JOptionPane重复的局部变量 Object[] JOptionPane
【发布时间】:2013-03-05 09:16:08
【问题描述】:

我在我的代码中使用 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 行和最后一行定义了“移动”。最后一个给出错误。

【问题讨论】:

  • 您是否在同一个方法中重复使用上述代码? move 的声明是否也在方法内部?
  • Object[] move = { "Up", "Down", "Left" }; 应该是有效的,你确定你没有在代码中的某处留下另一个move 声明吗?尝试将其重命名为其他名称,看看会发生什么。

标签: java eclipse variables duplicates


【解决方案1】:

试试这个

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

...

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

【讨论】:

  • 是的,它可以工作,但请记住,在 Java 中没有像 C 语言那样的动态分配,以便动态增加数组的大小。您在这里所做的是重新创建数组,当然这样一来,2 或 3 项数组就没有问题了。想象一下,现在您有一个包含 100 万个项目的数组,当您只有一个要添加的项目时,您会在每次代码中需要它时重新创建它吗?当你的集合大小是静态的时,数组很有趣,但是列表是用来处理这种情况的。
【解决方案2】:

尝试使用 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());

【讨论】:

    【解决方案3】:

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

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

    【讨论】:

      【解决方案4】:

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

      【讨论】:

        【解决方案5】:

        您应该改用列表,例如 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();
        

        【讨论】:

          【解决方案6】:

          试试这个方法

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

          【讨论】:

          • 他已经尝试过了,它给了"Array constants can only be used in initializers"
          • 谁赞成这个?这不是正确的答案,因为 OP 已经尝试过了,但没有奏效。
          猜你喜欢
          • 1970-01-01
          • 2015-08-19
          • 2012-11-05
          • 2018-04-18
          • 2021-11-11
          • 2014-08-06
          • 2012-08-03
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多