项目赢得';t运行、Java、StringBuilder、数组

项目赢得';t运行、Java、StringBuilder、数组,java,arrays,stringbuilder,Java,Arrays,Stringbuilder,我正在试着让我的程序运行。但是,我得到了一个NullPointerException 任何帮助都将不胜感激。我不想包含太多的代码;所以,我只包括eclipse所说的错误的块 这是puzzle类的构造函数(java.lang.NullPointerException) 我纠正了第一个问题并添加了“StringBuilder puzzle=new StringBuilder();”。现在,我在同一行中得到了这些错误 Exception in thread "main" java.lang.Strin

我正在试着让我的程序运行。但是,我得到了一个
NullPointerException

任何帮助都将不胜感激。我不想包含太多的代码;所以,我只包括eclipse所说的错误的块

这是puzzle类的构造函数<代码>(java.lang.NullPointerException)

我纠正了第一个问题并添加了“StringBuilder puzzle=new StringBuilder();”。现在,我在同一行中得到了这些错误

Exception in thread "main" java.lang.StringIndexOutOfBoundsException: String index out of range: 0
at java.lang.AbstractStringBuilder.setCharAt(Unknown Source)
at java.lang.StringBuilder.setCharAt(Unknown Source)
at Puzzle.<init>(Puzzle.java:55)
at PuzzleGameConsole.main(PuzzleGameConsole.java:22)

您的问题可能是您从未初始化拼图,从未为其分配
新的StringBuilder()
。i、 e

StringBuilder puzzle = new StringBuilder();  
e、 g

公共类难题
{
private StringBuilder puzzle=新建StringBuilder();//****添加此项!
公共拼图(字符串解决方案)
{
for(int index=0;index


更重要的是,您需要学习如何调试NPE(NullPointerException)的一般概念。您应该仔细检查抛出它的行,找出哪个变量为null,然后回溯到代码中以了解原因。相信我,您会一次又一次地遇到这些问题。

您的问题可能是您从未初始化拼图,从未为其分配新的
StringBuilder()
。i、 e

StringBuilder puzzle = new StringBuilder();  
e、 g

公共类难题
{
private StringBuilder puzzle=新建StringBuilder();//****添加此项!
公共拼图(字符串解决方案)
{
for(int index=0;index


更重要的是,您需要学习如何调试NPE(NullPointerException)的一般概念。您应该仔细检查抛出它的行,找出哪个变量为null,然后回溯到代码中以了解原因。相信我,您会一次又一次地遇到这些问题。

您遇到的问题是,StringBuilder最初是空的,您无法设置一个不存在的值/字符。对于您试图做的事情,一个简单的解决方案是使用正则表达式

private StringBuilder puzzle;

Puzzle(String theSolution) {
    // create a buffer where all non space are turned into -
    puzzle = new StringBuilder(theSolution.replaceAll("\\S", "-"));
}

您遇到的问题是,StringBuilder最初是空的,您无法设置一个不存在的值/字符。对于您试图做的事情,一个简单的解决方案是使用正则表达式

private StringBuilder puzzle;

Puzzle(String theSolution) {
    // create a buffer where all non space are turned into -
    puzzle = new StringBuilder(theSolution.replaceAll("\\S", "-"));
}

为什么会发生NullPointerException?

NullPointerException是由尝试取消引用 不指向任何东西的指针;指针为空。这是 可以找到NullPointerException的两种常见场景:

  • String myString=null
  • System.out.println(myString.length())
  • 在这里,在第#1行声明了一个变量myString并将其初始化为null。当第2行 尝试遵从变量myString以打印 字符串的长度时,会引发NullPointerException,因为myString 没有指向任何东西

  • System.out.println(amethodthattreturnsnall().toString())
  • 第二个例子有点棘手。未声明任何变量,但 还有一个指针:方法的返回值 返回snall()的方法。那是虚构的(而且似乎毫无用处) 方法将始终返回null。正如我们在第一个例子中看到的, 试图取消对空指针的引用并调用 引用的对象(为null)会导致NullPointerException

    如何追踪NullPointerException?

    要查找NullPointerException的源,请从堆栈开始 跟踪。在Java控制台或日志文件中,您将看到如下内容 这:

    线程“main”java.lang.NullPointerException中出现异常
    位于com.foo.example.NullPointerExample.main(NullPointerExample.java:21)

    堆栈跟踪告诉您发生了什么(NullPointerException)和 其中(NullPointerExample.java的第21行)。看那条线,看 如果您能识别上面给出的两种模式之一。问问你自己 这些问题:

  • 是否对可能为null的变量调用方法
  • 是否对另一个方法的返回值调用方法,其中第一个方法可能返回null
  • 你绝对肯定前两个问题的答案是“不”吗
  • NullPointerException可能发生在 其他原因,但这两个是最常见的


    为什么会发生NullPointerException?

    NullPointerException是由尝试取消引用 不指向任何东西的指针;指针为空。这是 可以找到NullPointerException的两种常见场景:

  • String myString=null
  • System.out.println(myString.length())
  • 在这里,在第#1行声明了一个变量myString并将其初始化为null。当第2行 尝试遵从变量myString以打印 字符串的长度时,会引发NullPointerException,因为myString 没有指向任何东西

  • System.out.println(amethodthattreturnsnall().toString())
  • 第二个例子有点棘手。未声明任何变量,但 还有一个指针:方法的返回值 返回snall()的方法。那是虚构的(而且似乎毫无用处) 方法将始终返回null。正如我们在第一个例子中看到的, 试图取消对空点的引用
    private StringBuilder puzzle;
    
    Puzzle(String theSolution) {
        // create a buffer where all non space are turned into -
        puzzle = new StringBuilder(theSolution.replaceAll("\\S", "-"));
    }