【问题标题】:Stuck with Pascal's Triangle in Java卡在 Java 中的帕斯卡三角形
【发布时间】:2013-11-19 14:02:31
【问题描述】:

好的,我需要一个类来重新创建帕斯卡三角形。我们正在使用 BlueJ,但我无法让我的阵列相互访问。 代码如下:

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;
        }
    }
}

该类将编译,但当我到达第三行时,应该是1 2 1,我在PascalTriangle.nextLine(PascalTriangle.java:29) 处得到一个java.lang.NullPointerException,它将nextLineArray[(nextLineCount)] = (previousLineArray[(nextLineCount-1) 行列为高亮。为什么 nextLineArray 会从第一次调用 nextLine() 方法时设置的 previousLineArray 中获取信息?

任何帮助将不胜感激 :) 谢谢。

【问题讨论】:

    标签: java bluej pascals-triangle


    【解决方案1】:

    问题如下:

    int [] previousLineArray = new int [(currentLineNumber+1)]; 所在的行中 - 您创建一个本地数组,该数组会隐藏您的成员,并且仅在 if 语句内部可见。然后当你来到这一行时:nextLineArray[(nextLineCount)] = (previousLineArray[(nextLineCount-1) 它使用你不是初始化的成员数组。

    【讨论】:

    • 如何制作它以便可以在 if 语句之外访问它?感谢您的帮助:)
    • 只需从 nextLine() 方法中删除 int[] 并调用 previousLineArray 就好像它已经被声明(因为它已经被声明为一个字段)。所以,previousLineArray = new int [(currentLineNumber+1)];
    • 非常感谢,当您说它是局部变量时,我只是这样做了。非常感谢:))))))
    • 假设需要阴影(我认为不是这种情况),您可以将声明移到 if 语句之外。
    猜你喜欢
    • 2012-10-24
    • 1970-01-01
    • 1970-01-01
    • 2014-11-12
    • 2015-01-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多