Frage

Ok, ich muss eine Klasse haben, die das Pascal-Dreieck neu erstellt. Wir verwenden Bluej und ich kann meine Arrays nicht dazu bringen, auf einander zugreifen zu können. Hier ist der Code:

public class PascalTriangle {

    private int currentLineNumber;
    private int[] previousLineArray;
    private int[] nextLineArray;

    public void firstLine()
    {
        currentLineNumber = 1;
        System.out.println("1");
    }

    public void nextLine()
    {
        if (currentLineNumber == 1) {
            int [] previousLineArray = new int [(currentLineNumber+1)];
            previousLineArray[0] = 1;
            previousLineArray[1] = 1;
            System.out.println("1 1");
            currentLineNumber = 2;
        }
        else if(currentLineNumber >= 2) {
            for (int lineCount = currentLineNumber; lineCount <= currentLineNumber; lineCount++) {
                int [] nextLineArray = new int [(lineCount+1)];
                nextLineArray[0] = 1;
                System.out.print(nextLineArray[0] + " ");
                for (int nextLineCount = 1; nextLineCount < lineCount; nextLineCount++) {
                    // The next line is the line with the NullPointerException
                    nextLineArray[(nextLineCount)] = (previousLineArray[(nextLineCount-1)
                    + previousLineArray[(nextLineCount)]]); 
                    System.out.print(nextLineArray[(nextLineCount)] + " ");
                }
                nextLineArray[(lineCount)] = 1;
                System.out.print(nextLineArray[(lineCount)] + "\n");
                previousLineArray = nextLineArray;
            }
            currentLineNumber = currentLineNumber+1;
        }
    }
}

Die Klasse wird kompilieren, aber wenn ich zur dritten Zeile komme, sollte es lesen 1 2 1, Ich bekomme ein java.lang.NullPointerException bei PascalTriangle.nextLine(PascalTriangle.java:29) Es schenkt die nextLineArray[(nextLineCount)] = (previousLineArray[(nextLineCount-1) Linie. Warum nimmt der nächsteLinearray die Informationen aus dem vorherigen Linearray, der festgelegt ist, wenn der nextLine() Methode wird zum ersten Mal aufgerufen?

Jede Hilfe wäre geschätzt :) Danke.

War es hilfreich?

Lösung

Das Problem ist das folgende:

in der Linie wo int [] previousLineArray = new int [(currentLineNumber+1)]; - Sie erstellen ein lokales Array, das Ihr Mitglied beschattet und nur im Inneren von sichtbar ist if Aussage. Dann, wenn Sie zu dieser Zeile kommen: nextLineArray[(nextLineCount)] = (previousLineArray[(nextLineCount-1) Es verwendet Ihr Mitgliedsarray, das nicht init war.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top