/ / 8x8 Array von 512x512 Array holen und verarbeiten - Java, Android, Arrays

Holen Sie sich 8x8 Array von 512x512 Array und verarbeiten Sie es - Java, Android, Arrays

Ich bin neu in Java Ich entwickle immer noch ein BildWasserzeichen-Programm mit DCT und SVD in Android, mein Programm 8x8-Array vom Hauptarray erhalten, DCT und SVD im 8x8-Array und zurück zum Hauptarray Zu Simulationszwecken erstelle ich ein 4x4-Array und versuche, daraus ein 2x2-Array zu erstellen. Das ist mein Code:

double[][] mainArray = new double[4][4];
double[][] subArray = new double[2][2];
double value = 1;
for (int i = 0; i < mainArray.length; i++){
for(int j = 0; j <mainArray[0].length; j++){
mainArray[i][j] = value;
value++;
}
}

//get 2x2 array from 4x4 array
int row = 0; int column = 0;
for (int m = 0; m < mainArray.length / 2; m++){
for(int n = 0; n < mainArray[0].length / 2; n++){
subArray[0][0] = mainArray[column][row]; subArray[0][1] = mainArray[column][row+1];
subArray[1][0] = mainArray[column+1][row]; subArray[1][1] = mainArray[column+1][row+1];
row += 2;
column+2;
System.out.print(subArray[0][0] + " " + subArray[0][1] + " " + subArray[1][0] + " " + subArray[1][1]);
}
}

Das gewünschte Ergebnis ist:

1st iterate[1 2]  2nd iterate[3 4]
[5 6]             [7 8]

3rd iterate[ 9 10] 4th iterate[11 12]
[13 14]            [15 16]

aber ich habe OutofBoundException als Ergebnis Bitte helfen Sie mir, was in meinem Code nicht stimmt

Antworten:

0 für die Antwort № 1

Sie sind nah dran, aber Ihnen fehlen ein paar Dinge. Der Fehler "Index außerhalb der Grenzen" beruht auf der Tatsache, dass die Spalte niemals auf Null zurückgesetzt wird. Sie muss auf jeden Fall außerhalb der Grenzen liegen, da sie niemals zurückgesetzt wird. Die Zeilenvariable sollte auch in der äußeren Schleife und nicht in der inneren mit Ihrem Code festgelegt werden, da sie zu oft aktualisiert wird, wie Sie es jetzt haben. Sie haben auch Spalte und Zeile, glaube ich, verwirrt. Es ist mainArray [Zeile] [Spalte].

Sie können Ihre Zähler auch für Zeilen und Spalten verwendenWenn in diesem Beispiel m die Zeile und n die Spalte ist und beide um zwei inkrementiert werden, müssen Sie auf diese Weise keine unnötigen Variablen erstellen. Beachten Sie, dass Sie bei diesem Ansatz die Bedingung ändern müssen, um die / 2 in zu entfernen die Bedingungsanweisung.

for (int row = 0; row < (mainArray.length); row += 2) {
for (int column = 0; column < mainArray[0].length; column+=2) {
subArray[0][0] = mainArray[row][column];
subArray[0][1] = mainArray[row][column + 1];
subArray[1][0] = mainArray[row + 1][column];
subArray[1][1] = mainArray[row + 1][column + 1];
//column += 2;
System.out.print(subArray[0][0] + " " + subArray[0][1] + "n"
+ subArray[1][0] + " " + subArray[1][1] + "n");
}
}