【问题标题】:Printing address instead of array elements? [duplicate]打印地址而不是数组元素? [复制]
【发布时间】:2016-07-04 18:34:16
【问题描述】:

所以在我的代码中,我创建了一个名为 Pet 的类,它既有一个默认构造函数,也有一个传入字符串名称和宠物年龄的非默认构造函数。

public class Pet
{
// instance variables 
private int age;
private String name;

/**
 * Constructor for objects of class Pet
 */
    public Pet()
    {
        // initialise instance variables
        age = 0;
        name = "somePet";
    }

    public Pet(int age, String name)
    {
        this.age = age;
        this.name = name; 
    }
}

然后我创建了一个名为 petArray 的类,它将添加到数组中并打印出数组...

public class PetArray
{
// instance variables 
private Pet [] petArray;

/**
 * Constructor for objects of class PetArray
 */
public PetArray()
{
    // initialise instance variables
    petArray = new Pet[5];
}

public void addPets()
{
    // put your code here
    Pet myPet = new Pet(4, "Spots");
    petArray[0] = (myPet);
    petArray[1] = new Pet(2, "Lucky");
    petArray[2] = new Pet(7, "Joe");
}

public void printPets()
{
    for (int i = 0; i < petArray.length; i++)
    {
        System.out.println(petArray[i]);
    }
}

}

但是,当我试图打印出来时,我在终端窗口中得到了这个......

宠物@13255e3c 宠物@171ac880 宠物@52185407 空值 空

【问题讨论】:

  • 这不是错误。你需要在你的课堂上覆盖toString()
  • 阅读toString 方法的作用。你需要在Pet 类中写一个。
  • @TheLostMind 抱歉,我不是说错误的意思。我的问题发生了变化。

标签: java bluej


【解决方案1】:

您忘记覆盖从 Object 继承的 toString() 方法。

在这种情况下,您可以使用以下内容:

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

Java 编译器只是不知道如何打印它,你必须通知它:)

【讨论】:

    【解决方案2】:

    在您的 addPets() 方法中,您只需将 3 个对象添加到您的 petArray 中,而当您声明该数组的长度为 5 时,您还需要填充 2 个空格。

    您可以将数组的长度更改为 3,或者您可以再添加 2 个对象,这应该可以解决您的问题。

    如上所述,添加 toString 方法将摆脱寻址问题。

    【讨论】:

      【解决方案3】:
      class Pet {
          ...
          @Override
          public String toString(){
              // the string passed from here will be shown in console
          }
      }
      

      【讨论】:

        【解决方案4】:

        根据您的代码,您的输出很好。您必须覆盖 toString() 方法才能根据您的要求进行打印。添加这个可能会有所帮助。

        @override
        public string toString(){
         return "your required string"; // i.e : name or name+age
        }
        

        【讨论】:

          猜你喜欢
          • 2020-01-09
          • 1970-01-01
          • 2013-09-12
          • 2020-04-23
          • 2021-12-10
          • 1970-01-01
          • 1970-01-01
          • 2014-05-17
          • 1970-01-01
          相关资源
          最近更新 更多