【问题标题】:instead of class name being returned, the memory address is returned不是返回类名,而是返回内存地址
【发布时间】:2014-09-15 01:59:29
【问题描述】:

我正在尝试让 2 支球队互相比赛。当我说 team1.play(team2); 当我生成一个小于 0.5 的数字时,团队 2 应该获胜,如果它大于 0.5,那么团队 1 应该获胜。队 1 获胜时,它正确显示为尼克斯队,但当队 2 获胜时,它显示内存地址。我怎样才能正确地说篮网赢了而不是team@78987neu73

public class teams{
    public static void main(String [] argv){
        team team1 = new team("knicks");
        team team2 = new team("nets");
        team1.lose();
        team2.win();
        team2.lose();
        team2.printrecord();
        team1.play(team2);
    }//main
}//teams

class team{
    int wins; 
    int losses;
    String name;

    public team(String n){
        name = n;
        wins = losses = 0;
    }//constructor

    public void lose(){
        losses++;
    }//losses

    public void win(){
        wins++;
    }//wins

    public void printrecord(){
        System.out.println("W-L: " +wins+"-"+losses);
    }

    public void play(team j){
        if((Math.random())<0.5){
            System.out.println("The "+j+" Have Won!");
        }//if
        else 
            System.out.println("The "+name+" Have Won!");
    }

}

【问题讨论】:

  • 那不是内存地址。它是hashCode() 的值。

标签: java


【解决方案1】:

您需要在 team 类中进行以下两项修改

public String getName() {
    return name;
}

public void play(team j){
    if((Math.random())<0.5){
        System.out.println("The "+j.getName()+" Have Won!");
    }//if
    else 
        System.out.println("The "+name+" Have Won!");
}

【讨论】:

    【解决方案2】:

    你直接输入了j。尝试使用以下代码

    public void play(team j){
            if((Math.random())<0.5){
                System.out.println("The "+j.name+" Have Won!");
            }//if
            else 
                System.out.println("The "+this.name+" Have Won!");
        }
    

    【讨论】:

      【解决方案3】:
      public void play(team j){
          if((Math.random())<0.5){
              System.out.println("The "+j+" Have Won!");
          }//if
          else 
              System.out.println("The "+name+" Have Won!");
      }
      

      在这里,“j”是一个对象,而不是一个字符串。使用 j.name 代替 j。

      【讨论】:

        【解决方案4】:

        team 中覆盖toString(),这是一个示例

        @Override
        public String toString(){
            return String.format("%s W-L: %d-%d",name, wins, losses);
        }
        

        这样您的play(team j) 可以打印team j。此外,Java 命名约定的类以大写字母开头。 team 应该是 Team

        【讨论】:

        • 好的,谢谢,我忘了我应该用大写字母开始我的课。
        【解决方案5】:

        有很多方法可以解决您的问题,最简单的一种是直接获取j 团队的名称,如下所示:

        if((Math.random())<0.5){
            System.out.println("The "+j.name+" Have Won!"); //You should use the name of the j team
        }
        else {
            System.out.println("The "+name+" Have Won!");
        }
        

        另一种方法是覆盖team 类中的toString() 方法。

        public String toString() {
            return name;
        }
        

        如果您想更先进并遵循行业标准,那么让我们正确构建您的team 类:

        class Team { //class names are PascalCase
        
            private int wins; //encapsulate fields
            private int losses;
            private String name;
        
            //constructor
            public Team(String n) {
                name = n;
                wins = losses = 0;
            }
        
            //getter and setter methods
            public int getWins() {
                return wins;
            }
        
            public void setWins(int wins) {
                this.wins = wins;
            }
        
            public int getLosses() {
                return losses;
            }
        
            public void setLosses(int losses) {
                this.losses = losses;
            }
        
            public String getName() {
                return name;
            }
        
            public void setName(String name) {
                this.name = name;
            }    
        
            public void lose() {
                setLosses(getLosses() + 1);
            }
        
            public void win() {
                setWins(getWins() + 1);
            }
        
            public void printrecord() {
                System.out.println("W-L: " + getWins() + "-" + getLosses());
            }
        
            public void play(Team otherTeam) { //more descriptive name
                if ((Math.random()) < 0.5) {
                    System.out.println("The " + otherTeam.getName() + " Have Won!");
                }
                else {
                    System.out.println("The " + this.getName() + " Have Won!");
                }
            }
        }
        

        【讨论】:

          【解决方案6】:

          您需要做的就是在您的团队类中覆盖 toString 功能以返回名称...

          只需将此代码添加到团队类中即可。

          @Override
          public String toString() {
              return name;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2016-05-08
            • 2013-08-20
            • 2017-07-03
            • 1970-01-01
            • 1970-01-01
            • 2015-07-17
            • 2020-05-07
            相关资源
            最近更新 更多