public boolean isItMyName(String name)
{
name = fullname.substring(0,fullname.indexOf(' '));
...
}
然后我的代码继续下去。当我运行它时,我得到一个空指针异常,错误指向这一行。
我还创建了一个JUnit测试器,它测试输入是真还是假。
Name myName = new Name();
assertEquals(false, myName.isItMyName("Troll");
它还在assertEquals(false, myName.isItMyName("Troll"));
我的智慧结束了。我该如何解决?
@ Greg Hewgill:
在我的Name类中,我这样做:
public class Name(String n)
{
name = n;
}
但在我的main方法中,我传入了字符串:Name myName = new Name(“Johnathy”);
因此字符串不为空。
FULLNAME:
public class EmailAddress {
private String address;
public EmailAddress(String a)
{
address = a;
}
public String toString()
{
return address;
}
答案 0 :(得分:3)
嗯,你忽略了你的参数...你在第一行为name
分配了一个新值。这意味着你的方法几乎肯定会被打破。
然后考虑fullname
(我假设是一个实例变量)将来自何处。除非您在无参数构造函数中将其设置为值,否则默认情况下它将为null
。这真的是你想要的吗?
我建议您将Name
类更改为,仅让构造函数采用名称参数,并验证它们不是null。这样,您就永远不会有一个无效的Name
对象,其全名是null
。
编辑:现在您发布了更多代码,查看无参数构造函数和setName
方法:
public Name()
{
setName(fullname);
}
public void setName(String n)
{
fullname = n;
}
这意味着您的无参数构造函数等效于:
public Name()
{
fullname = fullname;
}
...即无操作。 fullname
将为null,因此是例外。
我的建议是完全摆脱无参数构造函数,并使另一个验证参数。
答案 1 :(得分:3)
name = fullname.substring(0,fullname.indexOf(' '));
如果在该行上获得空指针异常,则fullname
为null
。这是唯一的可能性。
答案 2 :(得分:2)
没有更多的代码,我不能肯定地说,但我敢打赌你fullname
是空的,从不设置任何东西。
答案 3 :(得分:0)
如果在全名中找不到''索引则不会返回-1因此导致子串抓取0,-1为空...也许将其丢弃在if中并且如果索引是<则跳过该步骤0 ...并且你的参数不应该是fullname