3

私はJavaが初めてです。Javaで配列を効果的に使用する方法がよくわかりません。正しい用語を使用できない可能性があるため、コードで示します。基本的に、これは私の配列です。

int[] arrayCount = {1,2,3,4,5,6,7,8,9,10,11,12,13,14,15,16,17,18,19,20};

そのようにif関数を設定したいと思います(arrayCount [1]がデフォルトであると仮定して....その配列が[1]の最初の状態にあり、「one」.equals(match)の場合、設定します配列をarrayCount[2]に、そしてそこから. 基本的に、「1」=一致の場合、arrayCountを2に設定する必要があり、「2」=一致の場合、および最初のifステートメントがすでに実行されている場合、テストを実行します最終的にこのチェーンは 100 まで上がりますが、これはテスト用です。

for (String match : matches) {
                if (arrayCount[1]== 1 && "one".equals(match)) {
                    testSound.start();
                    arrayCount[2]=2; 
                } else if (arrayCount[2]==2 && "two".equals(match)) {
                    testSound.start();

                }
4

4 に答える 4

3

うまくいけば、私は質問を正しく理解しています。ユーザーに「1」、「2」、「3」などの単語を順番に入力してもらい、成功した入力の各ステップでテスト音を再生しますか?

その場合、次を考慮してください。

import java.util.Queue;
import java.util.LinkedList;

Queue<String> inputs = new LinkedList<String>();
inputs.push("one");
inputs.push("two");
inputs.push("three");
// etc
// Then to check the user input
for (String match : matches) {
  if (match.equals(inputs.peek())) {
    inputs.pop(); // Removes the element you just matched
    testSound.start();
  }
}

これは、各ステップで同じアクションを実行することを想定していることに注意してください。「正しい応答」動作の要件をもう少し説明していただければ、より正確な回答を提供できます。

先入れ先出しの順序を示すため、上記の Queue を使用します。これは、一致が追加された順序で表示される必要があることを意味します (上記のすべてのプッシュ ステートメント)。ループ内で一致が成功すると、次に必要な一致がチェックされます。たとえば、("three", "two", "one") とmatches("one", "two", "thirty") を含む Queue の場合、ループは次のように実行されます。

  1. match "one" はキューの先頭 "one" と比較されます
  2. これは一致するので、ヘッドを「ポップ」し、キューに ("three", "two") を残します。
  3. 次の一致 "two" は、キューの先頭 (現在は "two") と比較されます。
  4. これは一致するので、再び head をポップし、("three") をキューに残します。
  5. 次の一致 "thirty" は、キューの先頭 (現在は "three") と比較されます。
  6. これは一致しないため、キューでそれ以上の変更は発生しません

一致ごとに特定の動作をさせたい場合 (つまり、"1" 一致したときに何かを行い、"2" 一致したときに別のことをするなど)、次のように (上記に加えて) 接続できます。

public interface MatchAction {
  public void doTheThing();
}

Map<String, MatchAction> actionMap = new HashMap<String,MatchAction>();
// Fill this bad boy up
actionMap.put("one", new MatchAction() { public void doTheThing() { /* do stuff */ } });
// Etc for each action (you can reuse instances here if some actions are the same)
// Then, we modify the check above to be:
for (String match : matches) {
  if (match.equals(inputs.peek())) {
    String input = inputs.pop();
    MatchAction action = actionMap.get(input);
    if (action != null) action.doTheThing();
  }
}
于 2013-05-15T01:25:44.820 に答える
1

基本的に、探しているのは次のような HasMap です。

Map<String,Integer> map = new HashMap<String,Integer>();
map.put("one",1);
map.put("two",2);

h番目

于 2013-05-15T01:06:38.317 に答える
0

「その配列が[1]の最初の状態にある場合...配列をarrayCount [2]に設定します」は意味がありません。配列には「状態」がありません。

配列は、同じ型の多数の変数またはオブジェクトを作成する簡単な方法です。int次のように 5 つの変数を宣言する代わりに:

int num1 = 234;
int num2 = 635;
int num3 = 3568;
int num4 = 23;
int num5 = 745;

あなたはこれを行うことができます:

int[] nums = {234, 635, 3568, 23, 745};

そして、次のようにそれらを参照できます。

System.out.println(nums[2]);

これにより、数値が出力されます3568(配列は 0 ベースであるため、 にnums[0]なります234)。

達成したいことを説明してください (説明にコードを使用しないようにしてください)。あなたが望むことを実行するコードを提供します。

于 2013-05-15T01:18:19.563 に答える