0

我正在做一项任务,我们必须创建温度列表(双精度)和天数(字符串),并使用对象数组实现该列表。每个对象都存储温度和日期,我们可以在程序中分配温度和日期。然后用插入算法排序,输出原始列表和排序后的列表。

我将温度和日期的分配放在 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;
    }
}
4

1 回答 1

0

因为这是家庭作业,所以我不会给你完整的现成解决方案,而是给你一些指导,以帮助你在你的道路上......

您正在DailyTemperature构造函数中初始化 's 列表。
但是,这没有任何意义,因为该列表是构造函数的本地列表,并且无法在其外部访问。
同样在课堂上,您以一种没有意义的方式混合事物。

班级问题

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就会超出范围并被垃圾收集器销毁。所以即使有办法访问它,它也会在你之前被摧毁。

对编码风格
的评论 类的名称以大写字母开头。
函数和变量名以小写字母开头。除了构造函数,它与类同名,因此以大写字母开头。

我喜欢K&R 风格的编码,其中开头{在同一行。它在屏幕上保留了更多代码。(但这只是我,如果你愿意,你可以忽略这个)

于 2013-10-05T20:08:22.440 回答