当前位置: 首页 > 知识库问答 >
问题:

空指针异常错误,不确定原因

谯振国
2023-03-14

因此,我必须创建一个方法,将输入字符串分成名字/中间名/姓氏,计算创建的“学生”的数量,等等,然后我必须创建测试这些方法的类。

public void setName(String newName)
{
    String[] nameInput = newName.split(" ");
    if(nameInput.length == 0)
    {
        System.out.println("Error, please enter at least two names.");
        newName = null;
    }
    else if(nameInput.length == 1)
    {
        firstName = nameInput[0];
        middleName = "";
        lastName = nameInput[1];
        newName = firstName +  lastName;
    }
    else if(nameInput.length == 2)
    {
        firstName = nameInput[0];
        middleName = nameInput[1];
        lastName = nameInput[2];
        newName = firstName + middleName + lastName;

    }

    else
    {
        System.out.println("Error! You can only enter up to three names.");

    }
}
public String getName()
{
    if (middleName == null)
    {
        return firstName + " " + lastName;
    }
    else
        return firstName + " " + middleName + " " + lastName;
}

public String getId()
{
    return identifier = generateID();
}

@Override

public String toString()
{
    return getName() + "\n" + "(" + generateID() + ")";
}


private String generateID()
{
    return UUID.randomUUID().toString();
}

这是我测试代码的方式:

public static void testStudent()
{
    System.out.println("Trying to create testStudent1 with a single name...");
    testStudent1 = new Student("A");
    System.out.println("testStudent1.toString() is " + testStudent1.toString());
    System.out.println("testStudent1.getFirstName() is " + testStudent1.getFirstName());
    System.out.println("testStudent1.getMiddleName() is " + testStudent1.getMiddleName());
    System.out.println("testStudent1.getLastName() is " + testStudent1.getLastName());

    System.out.println("Trying to create testStudent2 with two names...");
    testStudent1 = new Student("A B");
    System.out.println("testStudent2.toString() is " + testStudent2.toString());
    System.out.println("testStudent2.getFirstName() is " + testStudent2.getFirstName());
    System.out.println("testStudent2.getMiddleName() is " + testStudent2.getMiddleName());
    System.out.println("testStudent2.getLastName() is " + testStudent2.getLastName());

    System.out.println("Trying to create testStudent3 with three names...");
    testStudent1 = new Student("A B C");
    System.out.println("testStudent3.toString() is " + testStudent3.toString());
    System.out.println("testStudent3.getFirstName() is " + testStudent3.getFirstName());
    System.out.println("testStudent3.getMiddleName() is " + testStudent3.getMiddleName());
    System.out.println("testStudent3.getLastName() is " + testStudent3.getLastName());

}

当它为具有2个名称的学生测试toString时,我一直遇到空指针异常,我不知道为什么。

共有3个答案

辛渝
2023-03-14

请检查trim()方法

public static void getName(String newName) {
        newName = newName.trim();
        String fullName = null;
        String[] nameInput = newName.split(" ");
        switch (nameInput.length) {
        case 2:
            fullName = mergeName(nameInput[0], "", nameInput[1]);
            break;
        case 3:
            fullName = mergeName(nameInput[0], nameInput[1], nameInput[2]);
            break;
        default:
            System.out.println("Error, please enter at least two names.");
            break;
        }
        System.out.println(fullName);
    }

    public static String mergeName(String firstName, String middleName,
            String lastName) {
        String name = firstName+" " + middleName+" " + lastName;
        return name;
    }
陆仲渊
2023-03-14

您可以使用<code>StringTokenizer

import java.util.StringTokenizer
StringTokenizer test = new StringTokenizer("An example string");
while (test.hasMoreTokens()) {
   System.out.println(test.nextToken());
}

输出:

An
example
string.

countTokens() 方法可以提供字符串在处理之前将提供多少个令牌。这样你就会知道你是否有中间名。

羿昊英
2023-03-14

编辑:问题出在 testStudent() 方法中的 testStudent 变量上。

System.out.println("Trying to create testStudent1 with a single name...");
testStudent1 = new Student("A");
System.out.println("testStudent1.toString() is " + testStudent1.toString());
System.out.println("testStudent1.getFirstName() is " + testStudent1.getFirstName());
System.out.println("testStudent1.getMiddleName() is " + testStudent1.getMiddleName());
System.out.println("testStudent1.getLastName() is " + testStudent1.getLastName());

System.out.println("Trying to create testStudent2 with two names...");
Student testStudent2 = new Student("A B");
System.out.println("testStudent2.toString() is " + testStudent2.toString());
System.out.println("testStudent2.getFirstName() is " + testStudent2.getFirstName());
System.out.println("testStudent2.getMiddleName() is " + testStudent2.getMiddleName());
System.out.println("testStudent2.getLastName() is " + testStudent2.getLastName());

System.out.println("Trying to create testStudent3 with three names...");
Student testStudent3 = new Student("A B C");
System.out.println("testStudent3.toString() is " + testStudent3.toString());
System.out.println("testStudent3.getFirstName() is " + testStudent3.getFirstName());
System.out.println("testStudent3.getMiddleName() is " + testStudent3.getMiddleName());
System.out.println("testStudent3.getLastName() is " + testStudent3.getLastName());

由于您正在重用teststuent1变量来创建学生类的新Object,而不是使用它们来调用getter函数,因此它会为testStuent2testStuent3变量抛出NPE。

您可以通过执行<code>nameInput来查找计数。字符串数组的长度。

应该是这样的:

String[] nameInput = newName.split(" ");
if (nameInput.length == 1)
{
   System.out.println("Error, please enter at least two names.");
   newName = null;
}
else if (nameInput.length == 2)
{ 
  ...
}
else if (nameInput.length == 3)
{ 
  ...
}
else 
{
  ...
}
 类似资料:
  • 我在当前版本的Java8中发现了一个奇怪的行为。在我看来,下面的代码应该可以,但是JVM抛出了一个: 这并不重要,它是什么样的lambda表达式(与相同)或使用了什么泛型类型。也可以用更有意义的表达式来代替。上面的例子很短。这里有一个更丰富多彩的例子: 然而,这些代码段运行良好: 和 或与功能: 我测试了两个Java版本: openjdk版本“1.8.0_66-internal”openjdk运行

  • 所以我已经开始创建一个应用程序,它使用jsoup来取消股票数据。当我通过导航抽屉从home活动转移到'Stocks'活动时,我要求结果活动显示第一个片段(视图中的RecycerView),该片段刮擦并列出所有股票。但是,这总是导致以下错误。但是,如果将片段作为第三个片段放入,并按下图所示打开(编辑:还不能发布图片),它就像预期的那样工作了。 9200-9200/com.blueinklabs.In

  • 问题内容: 我正在继续我的上学项目,似乎遇到了另一个错误。所以发生的事情基本上是我收到一个空指针异常,即使代码看起来很好。我相信我的阵列出了点问题,即使经过数小时的搜索,我似乎也找不到该错误。再一次,任何帮助/解决方案将不胜感激。 } 我有一个带有构造函数的学生班,并且有一个说明 但仍然出现错误。我知道要处理的代码很多,因此再次感谢任何帮助。 问题答案: 由于您的代码是当前编写的, 由于您永远不会

  • 我正在使用寻呼机适配器来显示视图寻呼机中的图像,这将在异步任务中由bitmap工厂下载。 pageradapter类: 我的日志: 02-08 18:49:22.55418345-18345/奥托涅。dg10 E/AndroidRuntime:致命异常:主java。autogenie上的lang.NullPointerException。dg10。pageradapter$LoadImage。au

  • 问题内容: 有可能这可能是一个双重问题。我将String变量初始化为null。我可能会或可能不会使用一个值更新它。现在我想检查此变量是否不等于null以及我尝试执行的操作是否会得到null指针异常。空指针异常,因为它代价高昂。是否有任何有效的解决方法.TIA 问题答案: 如果您使用 你 不会 得到。 我怀疑你在做什么: 这是因为null 而引发,而不是因为null。 如果仍然无法解释,请发布您用于

  • 我已经更新了我的项目中的一些依赖关系之后,我的Hibernate配置类显示Nullpointerx的。 我将SpringDataJPA存储库与hibernate一起使用,已经超过24小时了,仍然没有找到任何关于小问题的适当解决方案。 我已经尝试过的一些解决方案:- 使用@bean(name=“entityManagerFactory”)提供bean名称 我面临的问题 波姆。xml文件 配置类 db