我正在将我的游戏更新为Java,但我留下的唯一小错误是:
每次将死亡玩家的名字“添加”到死亡玩家名单中,它就会添加玩家对象的哈希码。
编辑:这是一个包含源代码的zip文件夹的链接: https://dl.dropboxusercontent.com/u/98444970/KarmaSource.zip
有问题的代码是该行获取玩家对象并获取对象名称的两个位置。当它在println中使用时,它工作正常并打印播放器的名称。但是,在它执行相同操作的第二部分中,它会打印播放器对象的哈希码,而不是调用其get_name方法并返回String。我不确定它是否与第三部分有关,它将“名称”添加到死玩家列表pdead。
如果您想要编译版本的链接,请告诉我。它是在JDK 7 Update 51 64位下编译的。
编辑:我开始工作了,我最初引用了播放器列表而不是pdead列表。感谢所有为帮助做出贡献的人。如果你还想要游戏,请告诉我,我会下载一个下载链接:D答案 0 :(得分:1)
回答您的问题:
这段代码错了:
if (karma.pdead.isEmpty())
{System.out.println("None");}
else
for (int index = 0;index < karma.pdead.size();index++)
System.out.println(pdead.get(index));
什么是业力?无论如何,看起来你在那里指的是两种不同的东西。
试试这个:
if (pdead.isEmpty()) {
System.out.println("None");
} else {
for (String deadPlayer : pdead) {
System.out.println(deadPlayer);
}
}
很确定这会起作用:)
一些进一步的建设性建议:
您的代码几乎打破了我在Java中所知的所有约定/良好实践。但我来这里是为了帮助,而不是批评,所以让我们试着改进这段代码。
您的主要功能甚至不会编译。应该是这样的:
public static void main(String [] args)
始终用括号包裹for循环体。
GOOD:
public void doSomething()
{
// body
}
GOOD:
public void doSomething() {
// body
}
BAD:
public void doSomething() {
// body
}
public void somethingOther()
{
// inconsistent!
}
public void terribleCode()
{ System.out.println("Never do this"); }
getName()
,而不是get_name()
。答案 1 :(得分:0)
我想查看是否存在一些微妙的语法错误,因此我将您的代码剪切/粘贴到编辑器中并尝试按摩它以使其运行。在我按摩之后,我跑了它,它运行良好。这是我运行的代码和我得到的结果:
代码: import java.util.ArrayList;
public class Game {
private static ArrayList<Player> players = new ArrayList<Player>();
private static ArrayList<String> pdead = new ArrayList<String>();
public static void main(String[] args) {
// Some Test Data
Player p1 = new Player("George");
p1.setHp(10);
players.add(p1);
Player p2 = new Player("Bob");
p2.setHp(10);
players.add(p2);
// Print Current State of data
System.out.println("Current Players");
for(Player p: players) {
System.out.println(p.getName() + ": " + p.getHp());
}
System.out.println("Dead Players");
if (pdead.isEmpty()) {
System.out.println("None");
} else {
for (int index=0; index < pdead.size(); index++) {
System.out.println(pdead.get(index));
}
}
// Kill Bob
p2.setHp(0);
// Do work to add names to dead players data structure
for (int index2=0; index2 < players.size(); index2++) {
if ((players.get(index2).getHp() <= 0) && !(pdead.contains(players.get(index2).getName()))) {
pdead.add(players.get(index2).getName());
}
}
// Print Current State of data
System.out.println("Current Players");
for(Player p: players) {
System.out.println(p.getName() + ": " + p.getHp());
}
System.out.println("Dead Players");
if (pdead.isEmpty()) {
System.out.println("None");
} else {
for (int index=0; index < pdead.size(); index++) {
System.out.println(pdead.get(index));
}
}
}
}
class Player {
private String name = "";
private int hp = 0;
public Player(String n) {
name = n;
}
public String getName() {
return name;
}
public int getHp() {
return hp;
}
public void setHp(int h) {
hp = h;
}
}
以下是代码给我的结果:
javac Game.java
java Game
Current Players
George: 10
Bob: 10
Dead Players
None
Current Players
George: 10
Bob: 0
Dead Players
Bob