Konstruktur - Verständnisproblem

MaCXyLo

Mitglied
Hallo,

Java:
package chapter3Statements.ATableOfSquareNumbers;

public class AuxiliaryExamplePart1 {


    final static String minus = "-";
    final static String empty = " ";
    
    private String[][] StringArray = null;
    int MultiplicateLine;
    int FormatLine;


    public int inputlength1 = String.valueOf(MultiplicateLine).length();
    public int inputlength2 = String.valueOf(MultiplicateLine*MultiplicateLine).length();
    
    public AuxiliaryExamplePart1(String[][] StringArray, int MultiplicateLine, int FormatLine)
    {
        this.StringArray = StringArray;
        this.MultiplicateLine = MultiplicateLine;
        this.FormatLine = FormatLine;
    }


    public void output2DArray() {
        for (int x = 0; x < StringArray.length; x++) {
            for (int y = 0; y < StringArray.length; y++) {
                System.out.print(StringArray[x][y]);
            }
                System.out.print("\n");
        }
    }


    public void fill2DArray(int x, int y, int m, int n) {
        for (; x < StringArray.length; x++, m++) {
            for (int y1 = y, n1 = n; y1 < StringArray.length; y1++, n1++) {
                StringArray[x][y1] = Integer.toString((m)*(n1));
                StringArray[x][y1] = spaces(StringArray[x][y1].length())+Integer.toString((m)*(n1));
            }
        }
    }


    public String spaces(int StringArrayContentLength) {
        
        StringBuilder spaces = new StringBuilder();
        
        for (int j = 0; j <= inputlength2-StringArrayContentLength; j++) {
            spaces.append(empty);
        }
        
        return spaces.toString();
    }
}

Java:
package chapter3Statements.ATableOfSquareNumbers;

public class AuxiliaryExamplePart1Main {


    public static void main(String[] args) {
        
        int MultiplicateLine = 5;
        int FormatLine = 2;
        
        String[][] StringArray = new String[MultiplicateLine+FormatLine][MultiplicateLine+FormatLine];
        
        AuxiliaryExamplePart1 generator = new AuxiliaryExamplePart1(StringArray, MultiplicateLine, FormatLine);
        
    //    for (int j = 0; j <= inputlength2; j++) {
    //        format.append(minus);
    //    }
        
        generator.fill2DArray(2,2,1,1);
        generator.output2DArray();
    }
}

ich versuche gerade die int MultiplicateLine von der Main Klasse der anderen Klasse bekannt zu machen über den Konstruktor.
Ich krieg es aber leider nicht gebacken. Kann mir jemand einen Tipp geben?

Grüße
 
Zuletzt bearbeitet von einem Moderator:
Java:
package chapter3Statements.ATableOfSquareNumbers;

public class AuxiliaryExamplePart1 {


    final static String minus = "-";
    final static String empty = " ";


    private String[][] StringArray = null;
    private int MultiplicateLine; 
    
    public AuxiliaryExamplePart1(String[][] StringArray, int MultiplicateLine)
    {
        this.StringArray = StringArray;
        this.MultiplicateLine = MultiplicateLine;
    }


    int inputlength1 = String.valueOf(MultiplicateLine).length();
    int inputlength2 = String.valueOf(MultiplicateLine*MultiplicateLine).length();
    
    public void output2DArray() {
        for (int x = 0; x < StringArray.length; x++) {
            for (int y = 0; y < StringArray.length; y++) {
                System.out.print(StringArray[x][y]);
            }
                System.out.print("\n");
        }
    }


    public void fill2DArray(int x, int y, int m, int n) {
        for (; x < StringArray.length; x++, m++) {
            for (int y1 = y, n1 = n; y1 < StringArray.length; y1++, n1++) {
                StringArray[x][y1] = Integer.toString((m)*(n1));
                StringArray[x][y1] = spaces(StringArray[x][y1].length())+Integer.toString((m)*(n1));
            }
        }
    }


    public String spaces(int StringArrayContentLength) {
        
        StringBuilder spaces = new StringBuilder();
        
        for (int j = 0; j <= inputlength2-StringArrayContentLength; j++) {
            spaces.append(empty);
        }
        
        return spaces.toString();
    }
}

Java:
package chapter3Statements.ATableOfSquareNumbers;

public class AuxiliaryExamplePart1Main {


    public static void main(String[] args) {
        
        int MultiplicateLine = 5;
        int FormatLine = 2;


        String[][] StringArray = new String[MultiplicateLine+FormatLine][MultiplicateLine+FormatLine];
        
        AuxiliaryExamplePart1 generator = new AuxiliaryExamplePart1(StringArray, MultiplicateLine);
        
    //    for (int j = 0; j <= inputlength2; j++) {
    //        format.append(minus);
    //    }
        
        generator.fill2DArray(2,2,1,1);
        generator.output2DArray();
    }
}

So, ich habe den Konstruktor in der Zwischenzeit verstanden.
Ich habe gedacht, es liegt daran, das ich den Konstruktor nicht richtig initialisiert habe, da war ich aber schief gewickelt.
Nachdem ich den Debugger benutzt habe, hat es dann irgendwann Klick gemacht.

int inputlength1 = String.valueOf(MultiplicateLine).length();

Es liegt an folgender Codezeile - das ganze hat aber schon mal einmal so funktioniert:

int inputlength2 = String.valueOf(MultiplicateLine*MultiplicateLine).length();

Seit neustem schreibt er aber in inputlength2 eine 1 anstatt eine 2 - ich habe aber keine Ahnung wieso.

Also als Beispiel MultiplicateLine = 5:
inputlength1 = 1; // 5
inputlength2 = 2; // 5x5

Der Workaround sieht wie folgt aus:

int inputlength1 = String.valueOf(MultiplicateLine).length();
int inputlength2 = inputlength1*2;

Vorschläge woran das liegt?
Mir geht's um's Verständnis, nicht um die Funktionalität.
 
Zuletzt bearbeitet von einem Moderator:
Java:
public class AuxiliaryExamplePart1 {
    final static String minus = "-";
    final static String empty = " ";
    private String[][] StringArray = null;
    private int MultiplicateLine; 
    
    public AuxiliaryExamplePart1(String[][] StringArray, int MultiplicateLine)
    {
        this.StringArray = StringArray;
        this.MultiplicateLine = MultiplicateLine;
    }


    int inputlength1 = String.valueOf(MultiplicateLine).length();
    int inputlength2 = String.valueOf(MultiplicateLine*MultiplicateLine).length();
}

Seit neustem schreibt er aber in inputlength2 eine 1 anstatt eine 2 - ich habe aber keine Ahnung wieso.

Die Instanzvariablen ("StringArray", "MultipcateLine", "inputlength1" und "inputlength2") werden initialisiert bevor der Konstruktor abgearbeitet wird!
Dadurch hat "MultiplicateLine" den Wert 0 und bei der Berechnung von "inputlength2" wird "0x0" gerechnet. Daher ist die Länge auch 1.

Werte die Abhängig von Parametern im Konstruktor sind, müssen im Konstruktor festgelegt werden. 🙂
 
Zuletzt bearbeitet:

Neue Themen


Zurück
Oben