Java 通过另一个arraylist向arraylist添加字符串';s对象';s法
我正在将我的游戏更新为Java,但我留下的唯一一个小错误是: 每次死亡玩家的名字被“添加”到死亡玩家名字列表中时,它都会添加玩家对象的哈希代码 编辑:以下是指向zip文件夹的链接,其中包含源代码: 有问题的代码是两个地方,其中一行获取player对象,另一行获取对象的名称。在println中使用时,它可以很好地打印玩家的名字。然而,在第二部分中,它做了同样的事情,但是它打印player对象的hashcode,而不是调用其get_name方法并返回字符串。我不确定它是否与第三部分有关,在第三部分中,它将“名字”添加到死亡玩家列表pdead中 如果你想要一个到编译版本的链接,请告诉我。它是在JDK 7 Update 51 64位下编译的Java 通过另一个arraylist向arraylist添加字符串';s对象';s法,java,string,arraylist,println,Java,String,Arraylist,Println,我正在将我的游戏更新为Java,但我留下的唯一一个小错误是: 每次死亡玩家的名字被“添加”到死亡玩家名字列表中时,它都会添加玩家对象的哈希代码 编辑:以下是指向zip文件夹的链接,其中包含源代码: 有问题的代码是两个地方,其中一行获取player对象,另一行获取对象的名称。在println中使用时,它可以很好地打印玩家的名字。然而,在第二部分中,它做了同样的事情,但是它打印player对象的hashcode,而不是调用其get_name方法并返回字符串。我不确定它是否与第三部分有关,在第三部分
编辑:我让它工作了,我最初引用的是玩家列表而不是pdead列表。感谢所有帮助我的人。如果你还想要这个游戏,请告诉我,我会放一个下载链接:D回答你的问题: 此代码错误:
if(karma.pdead.isEmpty())
{System.out.println(“无”);}
其他的
对于(int index=0;index
什么是业力?不管是什么,看起来你指的是两种不同的东西
试试这个:
if(pdead.isEmpty()){
系统输出打印项次(“无”);
}否则{
for(字符串无效播放器:pdead){
System.out.println(deadPlayer);
}
}
非常肯定这会奏效:)
一些进一步的建设性建议:
您的代码几乎打破了我在Java中所知道的所有约定/良好实践。但我在这里是为了帮助,而不是批评,所以让我们尝试改进这段代码
- 不要在静态字段中保持状态。这是导致内存泄漏的一种方法
- 您的主函数甚至不会编译。应该是这样的: 公共静态void main(字符串[]args)
- 始终使用大括号包裹for循环的主体
- 保持一致:如果你在新行中打开大括号,那么每次都要这样做。切勿将代码写在与开头括号相同的行上
- 不要用下划线分隔单词。在Java中,最受欢迎的约定是使用camelCase
,而不是getName()
get\u name()
- 类名总是以大写字母开头,而变量名通常以小写字母开头
- 如果要迭代列表的所有项,只需使用forEach构造(如上所示)而不是索引导航
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;
}
}
它不应该是
System.out.println(pdead.get(index.getName())
?@Keppil一开始我也这么认为,但是pdead
是一个字符串列表。我认为我们缺少的重要部分是创建Player
类的实例并设置它们的名称。这看起来不对,您的主方法声明无效。这真的是您在中看到的问题代码吗?如果没有,请提供产生问题的代码的确切示例。在不允许使用分号的地方也有分号。这段代码甚至无法编译。注释最初使用反斜杠。如果您希望得到答案,请向我们展示您的实际代码。谢谢您的提示。我发现我做错了一段代码,但我将使用这些规范清理源代码。感谢您提供的使用for each循环的提示(以及所有人)。我将在更新版本中添加这一点。for each循环是否与ArrayList一起工作,还是仅适用于标准数组?是的,我相信for each循环适用于列表和集合。它不适用于映射,您必须从映射中获取EntrySet,然后您可以在该映射上使用for-each循环。我在大多数代码中使用循环索引的主要原因是其他部分需要引用索引(圈数、具有并行结构的其他变量等)。如果您愿意,我也将代码更新为新格式。
public void doSomething() {
// body
}
public void doSomething() {
// body
}
public void somethingOther()
{
// inconsistent!
}
public void terribleCode()
{ System.out.println("Never do this"); }
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