有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

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

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

每次死亡玩家的名字被“添加”到死亡玩家的名字列表中,它都会添加玩家对象的哈希代码

编辑:这里有一个指向zip文件夹的链接,其中包含源代码: https://dl.dropboxusercontent.com/u/98444970/KarmaSource.zip

有问题的代码是两个地方,其中一行获取玩家对象,另一行获取对象的名称。在println中使用时,它可以很好地打印玩家的名字。然而,在第二部分中,它做了同样的事情,但它打印player对象的hashcode,而不是调用其get_name方法并返回字符串。我不确定它是否与第三部分有关,在第三部分中,它将“名字”添加到死亡玩家列表pdead中

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

编辑:我成功了,我最初引用的是玩家列表,而不是pdead列表。感谢所有帮助我的人。如果你还想要这个游戏,请告诉我,我会放一个下载链接:D


共 (1) 个答案

  1. # 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中所知道的所有惯例/良好实践。但我是来帮忙的,不是来批评的,所以让我们努力改进这段代码

    • 永远不要在静态字段中保持状态。这是导致内存泄漏的一个方法
    • 你的主函数甚至不会编译。应该是这样的:

      公共静态void main(字符串[]参数)

    • 始终用大括号将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中,最受欢迎的约定是使用camelCasegetName(),而不是{}
    • 类名总是以大写字母开头,而变量名通常以小写字母开头
    • 如果要迭代列表中的所有项,只需使用forEach结构(如上所示)而不是索引导航