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"

では、変数「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行目と最後の行に「移動」を定義しました。最後のものはエラーを与えます。

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]にコーディングでき、不変の配列の長さを指定する必要があります...その要素の 1 つを変更する場合は、index を使用してまたは、前述のように別のコードを記述し、それを参照に設定します。のように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 に答える