通过另一个arraylist的对象的方法将字符串添加到arraylist

时间:2014-03-20 20:53:01

标签: java string arraylist println

我正在将我的游戏更新为Java,但我留下的唯一小错误是:

每次将死亡玩家的名字“添加”到死亡玩家名单中,它就会添加玩家对象的哈希码。

编辑:这是一个包含源代码的zip文件夹的链接: https://dl.dropboxusercontent.com/u/98444970/KarmaSource.zip

有问题的代码是该行获取玩家对象并获取对象名称的两个位置。当它在println中使用时,它工作正常并打印播放器的名称。但是,在它执行相同操作的第二部分中,它会打印播放器对象的哈希码,而不是调用其get_name方法并返回String。我不确定它是否与第三部分有关,它将“名称”添加到死玩家列表pdead。

如果您想要编译版本的链接,请告诉我。它是在JDK 7 Update 51 64位下编译的。

编辑:我开始工作了,我最初引用了播放器列表而不是pdead列表。感谢所有为帮助做出贡献的人。如果你还想要游戏,请告诉我,我会下载一个下载链接:D

2 个答案:

答案 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"); }
  • 不要使用下划线来分隔单词。在Java中,最受欢迎的约定是使用camelCase。 getName(),而不是get_name()
  • 类名始终以大写字母开头,而变量名通常以小写字母开头。
  • 如果你在迭代列表的所有项目,只需使用forEach构造(如上所示)而不是索引导航。

答案 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