【问题标题】:Few questions about objects in JAVA关于JAVA中对象的几个问题
【发布时间】:2013-11-07 03:08:58
【问题描述】:

我对编程很陌生,本周我的任务是基于 java 中的对象。

首先是我的代码

public class Animal {
float mass;
String name;
int legs;

// Exercise 6-6
public Animal(String randomName) {
    name = randomName;
    legs = 0;
    mass = 0;
}

// Exercise 6-7
public Animal(float one, String two, int three) {
    mass = one;
    name = two;
    legs = three;
}

//Exercise 7
public String toString(){
    return "name =" + name + "legs=" + legs + "mass=" + mass;
}

public void massSetter() {

}

public String getName() {
    return name;
}

public int getLegs() {
    return legs;
}
}

还有这个

public class Zoo {
private Animal[] park;

// Exercise 9
public Zoo() {
    Animal[] park = new Animal[10];
}

// Exercise 10
public void addAnimal(Animal first) {
    for (int i = 0; i < 10; i++) {
        if (park[i] != null) {
            park[i] = first;
            i = 10;
        } else if (i == 9) {
            System.out.println("The zoo is full!");
        }

    }
}

// Exercise 11
public void feed() {
    for (int i = 0; i < 10; i++) {
        park[i].mass *= 1.1;
    }
}

public String toString() {
    return "The zoo is capable of keeping " + park.length + "animals"
            + '\n'
            + "The following is the list of animals currently in the zoo."
            + '\n' + "cage 1 status: " + park[0] + '\n' + "cage 2 status: "
            + park[1] + '\n' + "cage 3 status: " + park[2] + '\n'
            + "cage 4 status: " + park[3] + '\n' + "cage 5 status: "
            + park[4] + '\n' + "cage 6 status: " + park[5] + '\n'
            + "cage 7 status: " + park[6] + '\n' + "cage 8 status: "
            + park[7] + '\n' + "cage 9 status: " + park[8] + '\n'
            + "cage 10 status: " + park[9];
}

public void print() {
    System.out.println(park.toString());
}

public int totalLegs() {
    int totalLeg = 0;
    for (int i = 0; i < 10; i++) {
        totalLeg += park[i].legs;
    }
    return totalLeg;
}
}

最后

public class TestZoo {
public static void main(String[] args){
    Zoo zoo = new Zoo();

}
}

我有两个问题。

首先,从 Zoo 类的 toString 方法可以看出,我的 return 语句太长了。我尝试使用 for 循环,但我似乎无法在 return 语句中真正做到这一点,所以我想知道是否有更简单的方法。

第二个问题是,练习告诉我用大象和蜘蛛等名称填充我在 TestZoo 类中创建的对象动物园。我想知道我怎么能做到这一点。

【问题讨论】:

    标签: java object constructor


    【解决方案1】:

    1) 您可以使用StringBuilder 和循环来构建字符串。请参阅文档here
    2) 你有方法addAnimal(Animal first) 将动物添加到动物园。

    【讨论】:

      【解决方案2】:

      首先,从 Zoo 类的 toString 方法可以看出,我的 return 语句太长了。我尝试使用 for 循环,但我似乎无法在 return 语句中真正做到这一点,所以我想知道是否有更简单的方法。

      public String toString() {
          String str = "The zoo is capable of keeping " + park.length + "animals\nThe following is the list of animals currently in the zoo.";
          for(int i = 0; i < park.length; i++)
              str += '\n' + "cage " + i + " status: " + park[i];
      
          return str;
      
      }
      

      第二个问题是,练习告诉我用大象和蜘蛛等名称填充我在 TestZoo 类中创建的对象动物园。我想知道我怎么能做到这一点。

      public class TestZoo {
          public static void main(String[] args){
              Zoo zoo = new Zoo();
              Animal spider = new Animal("spider");
              zoo.addAnimal(spider);
          }
      }
      

      如果你有很多动物,上面的方法实际上是不可行的。所以创建一个Strings 数组(字符串,因为你需要一个来制作动物)

      String[] arr = {"Spider", "Elephant"};
      

      然后添加为每个字符串创建一个动物,并添加动物

      for(int i = 0; i < arr.length; i++)
      {
          Animal a = new Animal( arr[0] );
          zoo.addAnimal(a);
      }
      

      或者只是

      for(int i = 0; i < arr.length; i++)
          zoo.addAnimal(new Animal(arr[0]));
      

      【讨论】:

        【解决方案3】:
        1. toString 与任何其他方法一样。您可以创建变量。

          String value = "动物园可以饲养" + park.length + "animals"; 值 = 值 + '\n'; // ETC 返回值;

        2. 有点像

          zoo.add(new Animal("zebra"));

        【讨论】:

        • 不建议解决toString 方法中数组的手动索引问题。
        【解决方案4】:

        对于您的 toString():使用带有 for 循环的 StringBuilderString.format() 来大大减少长度。

        循环很重要,因为您基本上是在回显整个数组的内容。确保 Animal 已覆盖 toString() 以提供有关实例的有价值信息。

        public String toString() {
            StringBuilder ret = new StringBuilder("The zoo is capable of keeping " + park.length + "animals");
            ret.append("\n");
            ret.append("The following is the list of animals currently in the zoo.");
        
            for(int i = 0; i < park.length; i++) {
                ret.append(String.format("\ncage %d status : " + park[i].toString()));
            }
            return ret.toString();
        }
        

        为了填满你的动物园,给定 Animal 的构造函数,我认为传递名称“蜘蛛”就足够了。

        Animal spider = new Animal("spider");
        Zoo zoo = new Zoo();
        zoo.addAnimal(spider);
        

        【讨论】:

          【解决方案5】:

          Q1:...return 语句太长...在 return 语句中无法做到这一点 A:分开做。循环构建显示字符串(或StringBuilder),然后返回结果。

          Q2: ...填满对象动物园 答:您需要创建新动物并为每个动物调用一次 addAnimal。 一个初始化的动物名称数组和一个 for 循环可能会有所帮助: 字符串名称[]= {"aardvark", "bison", "cat", "dog", "eagle", "elephant", "giraffe", "horse", "owl", "emu"};

          【讨论】:

            【解决方案6】:

            你可以这样做:

            String result = "The list:\n";
            for (int i = 0; i< 10; i++) {
                result = result + "cage " + i + " status:" + park[i] + "\n"; 
            }
            return result;
            

            这里“+”将相邻的字符串连接起来,你可以一次一行地建立总结果。

            但是使用字符串连接有点低效(尽管在大多数情况下对于toString 来说完全足够了,因为这通常用于诊断),所以很多时候最好使用类似 StringBuilder 的东西,尤其是对于主线“生产”方法。

            【讨论】:

              猜你喜欢
              • 2022-01-22
              • 2015-03-16
              • 2011-05-12
              • 2011-08-24
              • 2013-01-30
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              相关资源
              最近更新 更多