Do tego służy programowanie obiektowe by nie pisać tych wszystkich popieprzonych pętli. Serio. Jak już piszesz w Javie to nikt nie będzie narzekał na takie coś:
class Row {
private int[] row;
public Row(int[] row) {
this.row = row;
}
public void reverse() {
int reversed[] = new int[row.length];
for (int i = 0, j = row.length - 1; i < row.length; i++, j--) {
reversed[j] = row[i];
}
row = reversed;
}
@Override
public String toString() {
return Arrays.toString(row);
}
}
takie samo coś dla Array2d:
class Array2D {
private Row[] rows;
public Array2D(Row[] row) {
this.rows = row;
}
public void reverse() {
Row reversed[] = new Row[rows.length];
for (int i = 0, j = rows.length - 1; i < rows.length; i++, j--) {
reversed[j] = rows[i];
reversed[j].reverse();
}
rows = reversed;
}
@Override
public String toString() {
return Arrays.toString(rows);
}
}
i w ramach testu:
public class App {
private static BufferedReader reader;
public static void main(String[] args) throws Exception {
Row r1 = new Row(new int[] { 232, 123, 322 });
Row r2 = new Row(new int[] { 243 ,423 ,543 });
Row r3 = new Row(new int[] { 245 ,123 ,432 });
Array2D a = new Array2D(new Row[]{r1, r2, r3});
System.out.println(a);
a.reverse();
System.out.println(a);
}
}
Elegancko, obiektowo, a w dodatku można to jeszcze przerobić na genericsy i nie trzeba kombinować z zagnieżdżaniem pętli.