使用对象数组实现列表

时间:2013-10-05 19:43:55

标签: java arrays arraylist

我正在进行一项任务,我们必须创建温度列表(double)和days(String),并使用对象数组实现列表。每个对象都存储temp和day,我们可以在程序中分配temp和day。然后使用insert alogrithm排序并输出原始列表和排序列表。

我将温度和日期的分配放在dailyTemperature构造函数下并进行编译。我的最后一部分是for循环和if循环,我说它是否getTemp大于0添加到getTemperature ArrayList,但我认为这是错误的,因为getTemp没有分配温度。我是否必须在dailyTemperature中分别指定日期和温度?然后在if语句中调用我指定温度的变量?

这是我的代码:

 import java.util.ArrayList;

public class dailyTemperature 
{

    //variables
    private double temperature;
    private String day;
    private static ArrayList<dailyTemperature> temp = new ArrayList<dailyTemperature>();


    //getTemp & setTemp methods
    public double getTemp()
    {
      return temperature;
    }

    public void setTemp(double newTemp)
    {
      temperature = newTemp;
    }

    //getDay & setTEmp methods
    public String getDay()
    {
      return day;
    }

    public void setDay(String newDay)
    {
      day = newDay;
    }


    public dailyTemperature(String dayInput, double temperatureInput) {
       this.day = day;
       this.temperature = temperature;
       temp.add(this);


      this.day = dayInput;
      this.temperature = temperatureInput;



    dailyTemperature[] getTemperature = new dailyTemperature[5];
    getTemperature[0] = new dailyTemperature("Mon", 70.0);
    getTemperature[1] = new dailyTemperature("Tue", 80.0);
    getTemperature[2] = new dailyTemperature("Wed", 65.2);
    getTemperature[3] = new dailyTemperature("Thur", 67.0);
    getTemperature[4] = new dailyTemperature("Fri", 68.5);


    }

    public static ArrayList<dailyTemperature> getTemperature()
    {
        ArrayList<dailyTemperature> getTemperature = new ArrayList<dailyTemperature>();
        for(dailyTemperature i : temp)
        {
            if(i.getTemp() > 0)
                getTemperature.add(i);
        }
        return getTemperature;
    }
}

1 个答案:

答案 0 :(得分:0)

因为这是家庭作业,我不打算给你完整的现成解决方案,但是给你一些指导,帮助你上路......

您正在构造函数中初始化DailyTemperature的列表 但是这没有意义,因为构造函数的本地列表在其外部无法访问 同样在课堂上,你正在以一种没有意义的方式混合东西。

课程问题

public class DailyTemperature { 
    //variables
    private double temperature;   <<-- single element
    private String day;           <<-- single element
    private static ArrayList<dailyTemperature> temp = new ArrayList<dailyTemperature>
    ^
    +----- list of elements

这种混合没有意义 您需要为单个元素和元素列表使用单独的类。

类似的东西:

public class DailyTemp {
  private double temperature;
  private Date day;
  //followed with getters and setters 
  //and a constructor
}

ArrayList<DailyTemp> dailyTemps = new ArrayList<DailyTemp>();

构造函数的问题
退出构造函数后,您正在将项目分配给超出范围的局部变量...

让我告诉你:

  public DailyTemperature(String dayInput, double temperatureInput) {
   this.day = day;                   
   this.temperature = temperature;   <<-- so far so good.
   temp.add(this);        <<--- No, this is a single element, no lists in here

  this.day = dayInput;     <<-- user input should never be in a constructor
  this.temperature = temperatureInput;  <<--??

  dailyTemperature[] getTemperature = new dailyTemperature[5];  <<--see 
  getTemperature[0] = new dailyTemperature("Mon", 70.0);    <<---  comments
  getTemperature[1] = new dailyTemperature("Tue", 80.0);    <<---  below
  getTemperature[2] = new dailyTemperature("Wed", 65.2);
  getTemperature[3] = new dailyTemperature("Thur", 67.0);
  getTemperature[4] = new dailyTemperature("Fri", 68.5);
}

您声明了一个局部变量getTemperature。这有以下问题:

  1. getTemperature是一个令人困惑的名字。 get你得到的就是吸气剂。它不是变量的好名称。
  2. 无法在构造函数之外访问此局部变量,因此您无需进行所有这些工作。
  3. 一旦构造函数退出,getTemperature将超出范围并将被垃圾收集器销毁。所以甚至如果有办法访问它,它会被破坏之前。
  4. 关于编码风格的评论
    课程名称以大写字母开头 函数和变量名以小写字母开头。除了构造函数之外,它与类具有相同的名称,因此以大写字母开头。

    我喜欢开场{位于同一行的K&R style of coding。它在屏幕上保留了更多代码。 (但这只是我,如果你愿意,你可以忽略它)