我正在将游戏更新为Java,但是我剩下的唯一小错误是:
每次将死玩家的名称“添加”到死玩家名称列表时,它都会添加Player对象的哈希码。
编辑:这是带有源代码的zip文件夹的链接:
https://dl.dropboxusercontent.com/u/98444970/KarmaSource.zip
有问题的代码是该行获取播放器对象和获取对象名称的两个地方。当在println中使用它时,它可以正常工作并打印播放器的名称。但是,在第二部分中,它执行相同的操作,但是它打印播放器对象的哈希码,而不是调用其get_name方法并返回String。我不确定是否与第三部分有关,在第三部分中将“名称”添加到死玩家列表pdead中。
如果您想链接到编译版本,请告诉我。它在JDK 7 Update 51 64位下编译。
编辑:我得到它的工作,我最初是引用玩家列表而不是pdead列表。感谢所有为帮助做出贡献的人。如果您仍然想要游戏,请告诉我,我会放置一个下载链接:D
最佳答案
回答您的问题:
这段代码是错误的: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中我所知道的所有约定/良好实践。但是我在这里是要提供帮助,而不是批评,所以让我们尝试改进此代码。
切勿将状态保持在静态字段中。这是导致内存泄漏的原因。
您的主要功能甚至无法编译。应该看起来像这样:
公共静态void main(String [] args)
始终用括号将for循环的主体包裹起来。
保持一致:如果在新行中打开大括号,则每次都要这样做。切勿在左括号的同一行上编写代码。
好:
public void doSomething()
{
// body
}
好:
public void doSomething() {
// body
}
坏:
public void doSomething() {
// body
}
public void somethingOther()
{
// inconsistent!
}
public void terribleCode()
{ System.out.println("Never do this"); }
不要使用下划线分隔单词。在Java中,常用的约定是使用camelCase。
getName()
,而不是get_name()
。类名总是以大写字母开头,而变量名通常以小写字母开头。
如果要遍历列表的所有项目,只需使用forEach构造(如上所示),而不要使用索引导航。