mam klasę Mold
z następującym konstruktorem
public Mold(int[][] mold){
this.mold = mold;
}
Też mam metodę sum()
który wygląda tak:
public int sum(){
int sum = 0;
for( int i = 0; i <matrix.length; i++) {
sum += matrix[i][i];
}
return sum;
}
Co próbuję zrobić, to obliczyć sumę wszystkich elementów w Mold
ale nie mam pewności co do tego, co włożyć sum += matrix[i][i];
część zamiast "i". Być może robię to zupełnie niewłaściwie. Utknąłem na tym przez jakiś czas i nie mogę tego zrozumieć.
Przykładem wyjścia, które chciałbym uzyskać, jest: int[][] test1 = { { 10, 5 }, { 2, 8 } };
powinien dać 25 sposób, w jaki zastosowano metodę sumy.
Gdyby ktoś popchnął mnie we właściwym kierunku, byłoby wspaniale! Wielkie dzięki,
Odpowiedzi:
2 dla odpowiedzi № 1Robisz to:
Przypuśćmy, że dwuwymiarowa tablica elementów 3x3 to ich współrzędne (wiersz, kolumna):
[0,0][0,1][0,2]
[1,0][1,1][1,2]
[2,0][2,1][2,2]
Sposób, w jaki liczą się za pomocą tylko jednej pętli i tylko jedna zmienna w pętli, to:
i = 0 (licząc elemenów 0,0)
[*][ ][ ]
[ ][ ][ ]
[ ][ ][ ]
i = 1 (wliczając w to elemen 1, 1)
[ ][ ][ ]
[ ][*][ ]
[ ][ ][ ]
i = 2 (licząc elemenów 2,2)
[ ][ ][ ]
[ ][ ][ ]
[ ][ ][*]
Aby wykonać tę sumę, musisz użyć podwójnej pętli. Pętla w każdym wierszu i dla każdego wiersza zapętlonego musisz pętli dla każdej kolumny tego wiersza.
Coś takiego:
for (i = 0; i < maxRows; i++){
for (j = 0; j < maxCols; j++{
//
}
}
1 dla odpowiedzi nr 2
W ten sposób podsumujesz tylko pozycje [0][0]
, [1][1]
, [2][2]
, ..., [i][i]
a będziesz tęsknił za większością elementów.
Masz 2 wymiary w swojej tablicy, więc potrzebujesz 2 pętli.
Utwórz kolejny for
pętla wewnątrz twojego istniejącego for
pętli, z inną zmienną pętli, j
. Zatrzyma się, gdy dojdzie do końca aktualnej długości wiersza: matrix[i].length
. Podczas dodawania do sum
, użyj obu zmiennych pętli: matrix[i][j]
.
1 dla odpowiedzi nr 3
W twoim obecnym podejściu dodajesz tylko elementy po przekątnej (0,0), (1,1), (2,2). Jeśli obsługujesz tablicę tablic, możesz użyć ulepszony for
pętla dwa razy: jeden do zapętlenia elementów w tablicy, a drugi do zapętlenia elementów w tablicy tablicy:
int sum = 0;
for(int[] moldElement : mold) {
for(int element : moldElement) {
sum += element;
}
}
return sum;
1 dla odpowiedzi nr 4
Zastanów się, co dokładnie robisz i jak to osiągnąć.
Pamiętaj, że tablica 2d to tablica tablic.
for( int i = 0; i <matrix.length; i++) {
sum += matrix[i][i];
}
`sum[i][i]` in this code is essentially doing this.
0 0
1 1
2 2
3 3
4 4
...
To, czego potrzebujesz, to zrobić
0 0
0 1
0 2
...
1 0
1 1
1 2
...
Pomyśl o tym jak o współrzędnych X i Y!
to byłaby twoja odpowiedź.
for(int i = 0; i < matrix.length; i++){
for(int j = 0; z < matrix[j].length; j++{
sum += matrix[i][j];
}
}
Zwróć szczególną uwagę na tę linię. matrix[i].length
Co jeśli tablica nie była całkowicie jednolita?
na przykład.
i
j[0][][][][][]
[1][]
[2][][][]
[3][][][][][][]
to wciąż byłoby w stanie powtórzyć.
0 dla odpowiedzi № 5
zrobić podwójne dla pętli.
int sum = 0;
for(int i = 0; i < matrix.length; i++)
{
for(int j = 0; j < matrix[0].length; j++)
{
sum += matrix[i][j];
}
}
return sum;
0 dla odpowiedzi № 6
Zagnieżdż pętlę for
public int sum(){
int sum = 0;
for( int i = 0; i <matrix.length; i++) {
for (int j = 0; k < matrix[i].length; j++){
sum += matrix[i][j];
}
}
return sum;
}
Jak ktoś powiedział, jesteś tylko iteracją nad jednym wymiarem tablicy. Gdy masz n wymiarów tablicy, potrzebujesz n pętli.