【问题标题】:how to print all of arrays with for loop in java如何在java中使用for循环打印所有数组
【发布时间】:2014-03-30 08:49:58
【问题描述】:

我在String 中有数组。我想使用for 循环来打印所有对象。我的印象是,这将通过创建 for 循环然后返回 String 来完成。我不确定我需要改变什么来实现这一点。 以下是我的努力:

    public class SolarSystem {
        private Planet[] planets;
        private int position = 0;
     public SolarSystem(int size) {
         planets = new Planet[size];
     }
    public void add(Planet planet) {
        planets[position] = planet;
        position++; 
    }
    public String toString(){
          for(int i = 0; i < planets.length; i++){

          } 
          return toString();  
    }
   }

添加的星球类

public class Planet  {


    String name;
    int moons;

    public Planet(String name, int moons)
    {
        this.moons = moons;
        this.name = name;               
    }

    public String toString() {
        return "The Planet " + name  + " Has " + moons + " Moon(s) \r\n ";
    }

}

【问题讨论】:

  • System.out.println(planets[i]) 没有填补空白?

标签: java arrays string loops for-loop


【解决方案1】:

您可以尝试使用StringBuilder

public String toString() {
    StringBuilder sb = new StringBuilder();

    for(int i = 0; i < planets.length; i++){
        sb.append(planets[i].getName()); // getName() or toString()
        sb.append("\n");
    }

    return sb.toString();
}

【讨论】:

    【解决方案2】:

    覆盖Planet 类中的toString() 方法,并使用以下代码:

    public String toString(){
          String result = "";
          for(int i = 0; i < planets.length; i++){
              result += planets[i].toString(); // append comma if you need to separate it,
                              // and most of all handle nulls
          } 
          return result;  
    }
    

    【讨论】:

    • 既然这是添加到toString方法的,这是否考虑调用toString方法来获取结果?我知道这可能是一个愚蠢的问题,但我正试图解决这个问题......:/
    • 没错。良好的做法,虽然这取决于您需要什么细节,但您可以自定义它。在这里使用StringBuilder 是一种很好的做法,所以我给了Christian +1。
    • 建议您编辑答案以显示 Planet toString 方法的外观。
    • @user2310289 :我没有Planet 课程详细信息。 OP 没有添加它。
    • 我添加了 Planet 类以防万一有人想看
    【解决方案3】:
    public String toString() {
    StringBuilder mainresult = new StringBuilder();
    for(int i = 0; i < planets.length; i++){
      StringBuilder result = new StringBuilder();
      String newLine = System.getProperty("line.separator");
    
      result.append( planets[i].getClass().getName() );
      result.append( " Object {" );
      result.append(newLine);
    
      //determine fields declared in this class only (no fields of superclass)
      Field[] fields = this.getClass().getDeclaredFields();
    
      //print field names paired with their values
      for ( Field field : fields  ) {
        result.append("  ");
        try {
          result.append( field.getName() );
          result.append(": ");
          //requires access to private field:
          result.append( field.get(this) );
        } catch ( IllegalAccessException ex ) {
          System.out.println(ex);
        }
        result.append(newLine);
      }
      result.append("}");
      //if it is the first one then no new line added
      if(i==0)
      {
         mainresult.append(result.toString());
         continue;
      }
      mainresult.append(newLine);
      mainresult.append(result.toString());
    }
      return mainresult.toString();
    }
    

    【讨论】:

      【解决方案4】:

      重写 toString() 方法

      @Override
      public String toString() {
          return "SolarSystem [te=" + Arrays.toString(te) + ", position=" + position + "]";
      }
      

      【讨论】:

        【解决方案5】:

        如果你的星球类中有这个覆盖方法

        public String toString(){
            StringBuilder result = new StringBuilder();
        
            String NEW_LINE = System.getProperty("line.separator");
        
            result.append(" planetProperty1: ").append (planetProperty1).append(NEW_LINE);   
            result.append(" planetProperty2: ").append (planetProperty2).append(NEW_LINE);   
        
            return result.toString();
        }
        

        然后你可以从调用类中迭代集合调用

          System.out.println (planets[i].toString());
        

        【讨论】:

        • 使用单独的append() 而不是通过+ 连接。这就是你使用StringBuilder的原因。
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2013-08-02
        • 2013-02-20
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-11
        相关资源
        最近更新 更多