gpt4 book ai didi

java - if 语句中的 NullPointerException

转载 作者:行者123 更新时间:2023-12-01 15:28:11 26 4
gpt4 key购买 nike

我在下面的 if 语句中遇到了 NullPointerException;

public Player players[];

public void sortPlayers() {
int n = players.length;

for (int pass=1; pass < n; pass++){
for (int i=0; i < n-pass; i++) {
if(players[i].getLastName().compareTo(players[i + 1].getLastName()) > 0)
temp = players[i];
players[i] = players[i+1];
players[i+1] = temp;
}
}
}

我用谷歌搜索了错误报告,但似乎没有合适的。如果有帮助,下面是 Player 类和 getLastName() 方法。另外,发送到 Player 类的预期数据将是一个名字,采用先名字后姓氏的形式,例如“Bobby Joe”。

public class Player {

public String[] name;

public Player(String inputname) {

name = inputname.split(" ");

}

public String getLastName() {
return name[1];
}

任何有关此事的帮助将不胜感激!

编辑- 抱歉,是的,这是 Java。双重编辑 -如果有人愿意看一下,我已将完整的源代码放在 Pastebin 上。错误范围已缩小到在 Team.sortPlayers() 方法中调用 players[i] 数组时出现。

http://pastebin.com/sJKTpJA9

最佳答案

问题出在if语句上:

for (int pass=1; pass < n; pass++){ 
for (int i=0; i < n-pass; i++) {
if(players[i].getLastName().compareTo(players[i + 1].getLastName()) > 0)
temp = players[i];
players[i] = players[i+1];
players[i+1] = temp;
}
}

如果在第一遍中(即 i == 0,compareTo 方法返回一个等于或小于 0 的值,则为 temp 分配指向players 数组元素 0 的指针的语句将不会执行,temp 将有一个空指针和接下来的两行(不在 if 语句的范围内有条件执行)将把元素 1 分配给players 数组的元素 0,并将空指针分配给元素 1。

在下一次传递(即 i == 1)时,这将导致 java.lang.NullPointerException,因为现在,players[1] 元素具有来自第一次传递的空指针。

根据名称输入的顺序,如果在第一次传递时,compareTo 方法返回值 > 0,则可能会或可能不会引发异常。从那时起,temp 将具有一个有效的指针,但无论它指向什么即使 to 不指向第 i 个元素,也会与第 i+1 个元素交换。数组的名称内容可能会被破坏,因为名称 sawp 不会按预期出现。

修复要读取的代码段:

for (int pass=1; pass < n; pass++) { 
for (int i=0; i < n-pass; i++) {
if(players[i].getLastName().compareTo(players[i + 1].getLastName()) > 0) {
temp = players[i];
players[i] = players[i+1];
players[i+1] = temp;
}
}
}

将解决这个问题并且还有更好的缩进实践。

问题的一个明显指标是,示例中的缩进虽然不是 if 和 for 范围的正常做法,但仍然表明只有数组元素交换的第一行位于 if 语句的范围内,而不是全部三行。

范围错误是否是软件错误的常见根源。

关于java - if 语句中的 NullPointerException,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9917371/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com