array 2 dimensional treppe

Siisii92

Mitglied
Kann mir jemand sagen, wie ich meinen Cod verbessern kann?

Java:
    public static char[][] treppe(int n) {
        assert (n > 0);
        int lange = 0;
        int amfang = -2;

        char[][] x = new char[n][(2 * n) - 1];

        for (int i = 0; i < x.length; i++) {
            amfang += 2;
            lange = 0;

            for (int j = 0; j < x[0].length; j++) {

                if (i + j >= amfang && lange < n) {

                    x[i][j] = '*';
                    lange++;
                }

                else {
                    x[i][j] = '.';
                }

            }

        }

        return x;
    }
 

Anhänge

  • 1676065804443.png
    1676065804443.png
    49,6 KB · Aufrufe: 2
Also Deine Logik ist schwer zu verstehen. Die * fangen in Zeile 0 bei 0 an, bei Zeile 1 in Feld 1, in Zeile 2 in Feld 2 ...
Und es endet in Zeile 0 in Spalte 4. In Zeile 1in Spalte 5, in Zeile 2 in Spalte 6.

Damit könnte man dann einiges vereinfachen denke ich mal.
 
Kann mir jemand sagen, wie ich meinen Cod verbessern kann?
Ja
a) zuerst einmal lesbarere Bezeichner wählen.
b) unnötige Variablen entfernen (lange, amfang ). Sie sind unnötig da der Treppenanfang und das Treppenende direkt von der Spalte und der Zeile also der augenblicklichen Position abhängen.
c) die Berechnung des Zeichens in eine Funktion auslagern.
Das Ganze wird dadurch übersichtlicher.
Java:
    public static char[][] treppe(int numRow) {
        assert (numRow > 0);
        int numCol = 2 * numRow - 1;
        char[][] treppe = new char[numRow][numCol];
        for (int row = 0; row < treppe.length; row++) {
            for (int col = 0; col < treppe[row].length; col++) {
                treppe[row][col] = positionToChar(numRow, numCol, row, col);
            }
        }
        return treppe;
    }

    private static char positionToChar(int numRow, int numCol, int row, int col) {
        return (col >= row && col <= row + numCol - numRow) ? '*' : '.';
    }
 

Zurück
Oben