String.isEmpty()中的持久java.lang.NullPointerException错误
我一直在尝试搜索这个bug,但我找不到它。已经花了一个小时试图解决问题。当(!player.isPlayerSet()){时,当代码进入isPlayerSet方法String.isEmpty()中的持久java.lang.NullPointerException错误,java,string,oop,nullpointerexception,Java,String,Oop,Nullpointerexception,我一直在尝试搜索这个bug,但我找不到它。已经花了一个小时试图解决问题。当(!player.isPlayerSet()){时,当代码进入isPlayerSet方法时,错误开始。我已经将已使用的属性设置为“”,但仍然会出现此nullpointerexeption错误。请理解,我对编程相当陌生,尤其是Java 这是主要课程 public class Main { public static void main(String[] args) { Scanner scanner
时,错误开始。我已经将已使用的属性设置为“”,但仍然会出现此nullpointerexeption错误。请理解,我对编程相当陌生,尤其是Java
这是主要课程
public class Main {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
String playerName = "";
int chosenPokemon = 0;
boolean isANumber = false;;
Player player;
/*
* Initialize Players
*/
Player[] players = new Player[2];
for (int counter = 0; counter < players.length; counter++) {
player = new Player();
}
/*
* Get details of trainers
*/
for (int counter = 0; counter <= players.length-1; counter++) {
player = players[counter];
while (!player.isPlayerSet()) {
/*
* Input player name
*/
if(player.getPlayerName() == "") {
System.out.println("Enter a valid name for Player " + (counter+1) + ":");
player.setPlayerName(playerName);
}
/*
* Choose Pokemon
*/
if(player.getChosenPokemon() == ""){
System.out.println("Choose a starting pokemon for Player " + (counter+1) + ":");
System.out.println("[1] Charmander");
System.out.println("[2] Bulbasaur");
System.out.println("[3] Squirtle");
do {
if(!scanner.hasNextInt())
{
System.out.println("Input must be a valid integer. Try Again.");
scanner.next();
}
else if(!(chosenPokemon >= 1) && !(chosenPokemon <= 3))
{
System.out.println("Input must be a number from 1-3. Try Again.");
scanner.next();
}
else {
chosenPokemon = scanner.nextInt();
isANumber = true;
}
} while(!isANumber);
player.setChosenPokemon(chosenPokemon);
}
} // End of while loop
} // End of for loop
}
}
我还有另一个问题,是否建议将玩家[计数器]
替换为玩家
?您正在此处创建新的玩家对象:
for (int counter = 0; counter < players.length; counter++) {
player = new Player();
}
当然,你真的很想读这篇文章。你在这个循环中重击同一个变量
for (int counter = 0; counter < players.length; counter++) {
player = new Player();
}
循环中
for (int counter = 0; counter < players.length; counter++) {
player = new Player();
}
这个
for(int counter=0;counter
应该是这个
for (int counter = 0; counter < players.length; counter++) {
players[counter] = new Player();
}
for(int counter=0;counter
Ohh伙计,我声明了一个名为Player-Player;
的变量来替换所有的Player[counter]
。它工作正常,可能是我按了某个键弄乱了那行代码造成了bug。不管怎样,放Player[counter]是否明智
在Player
变量中?谢谢!很抱歉,我把太多精力放在了错误消息上,而不是扫描我的代码。这里有一条评论:尽量避免这样做。A)不要编写太多代码,然后编译并运行它。相反,一旦你找到了“有意义的”东西,就尝试编译/运行它.B)更改正在运行的程序时,最好创建一个完整的新文件;这样您就可以返回并检查所做的更改;如果事情突然“中断”…。您打算添加“玩家”而不是“玩家[计数器]”吗?我声明了一个以player类作为对象数据类型的player变量。我想把它放在一个变量中。因此,不要键入player[counter].someMethod,我只做player.someMethod。如果这有意义的话。我想知道它是否会影响程序的性能。我正在尝试学习如何简化代码。那么数组“players”的意图是什么在不知道你想做什么的情况下回答你的问题是非常困难的:)数组玩家是我存储2名玩家的地方,他们将要战斗。这个想法是你做的不仅仅是发布“这是工作代码”。你总是解释为什么你的答案会有效。@Jägermeister 100%同意你的观点。在这种情况下,错误的原因不仅仅是不知道逻辑(非常直截了当),还只是一点粗心(玩家和玩家之间的混淆)。所以答案应该足够好,可以找出错误的地方。:)
for (int counter = 0; counter < players.length; counter++) {
players[counter] = new Player();
}
for (Player p: players) p = new Player();
for (int counter = 0; counter < players.length; counter++) {
player = new Player();
}
for (int counter = 0; counter < players.length; counter++) {
players[counter] = new Player();
}
for (int counter = 0; counter < players.length; counter++) {
player = new Player();
}
for (int counter = 0; counter < players.length; counter++) {
players[counter] = new Player();
}