2

2次元配列で作業する必要があります。配列内の行スロットの最大長は 100 です。多くの場合、これらの配列スロットの 5 ~ 20 が満たされ、それ以上ではありませんが、最大 100 行までコードをビルドする必要があります。私の質問は、設定されている配列スロットのみを繰り返し処理し、最後の未設定の null スロットの前で停止する方法はありますか?

//initialize array
String[][] variables = new String[numVariables][100];

//System.out.printf("%s \n", numVariables);

for(int i=0; i < numVariables; i++){
    //reads in variable line
    String variableLine = fin.nextLine();

    //turn variable line into array
    varArray = variableLine.split(" ");

    numRules = Integer.parseInt(varArray[0].replaceAll("\\s",""));

    for(int j=0; j < numRules+1; j++){
        variables[i][j] = varArray[j+1];

        System.out.printf("%s ", variables[i][j]);
    }
    System.out.println("\n");
}

//**LATER IN MY CODE ****//
//ITERATE THROUGH 'variables' array and PRINT OUT ONLY VALUES THAT ARE SET
4

4 に答える 4

3

配列に 0 から 100 の順序で入力する場合。最初の 51 要素に文字列が入力される場合は、次を使用できます。

    for(int i=0; i < numVariables; i++){
        for(int j=0; j < numRules+1; j++){
            if (variables[i][j] == null)
                break;
            System.out.printf("%s ", variables[i][j]);
        }
    }
于 2013-01-31T21:32:19.663 に答える
0

あなたが説明した状況を考えると、おそらく別のデータ構造を使用したほうがよいでしょうが、変更された値を記録しておくことができないためです。

したがって、各行の長さの配列を保持し、そこで行の各検索を終了できます。

    String[][] variables = new String[numVariables][100];
    int rowLength[] = new int[numVariables];

    //...
    // get and record the rowLength
    //...

    for(int x=0; x < numVariables; x ++) {
        for(int y=0; y < rowLength[x]; y ++) {
            // do your stuff
        }
    }
}

または、マップまたは ArrayList を使用して、数値を含む各位置を追跡することもできます。

于 2013-01-31T21:36:52.983 に答える
0

の配列を使用するかList<String>、すべての行の長さを追跡することもできます。

int [] rowLength = new int[numVariables]

for(int i=0; i < numVariables; i++){
    /* ... */

    numRules = Integer.parseInt(varArray[0].replaceAll("\\s",""));

    // store the number of slots in variable[i]
    rowLength[i] = numRules+1;

    /* ... */
}

次に、ゼロから行の長さまでのみ反復します ( rowLength[i])。

3 番目のアプローチ (および私が好むアプローチ) は、配列内の行スロットの長さを指定しないことです。

String [][] variables = new String[numVariables][];

次に、numRules を計算した後:

variables[i] = new String[numRules+1];
于 2013-01-31T21:24:57.473 に答える