2013-10-05 2 views
0

Я выполняю задание, в котором мы должны создать список температур (double) и days (String) и реализовать список, используя массив объектов. Каждый объект хранит темп и день, и мы можем назначить темп и день в нашей программе. затем выполните сортировку с вставкой alogrithm и выведите исходный список и отсортированный список.Реализовать список, используя массив объектов

Я разместил задания температуры и дня под конструктором dailyTemperature и скомпилировал его. Моя последняя часть - цикл for и if, я утверждаю, что если getTemp больше 0, добавьте в getTemperature ArrayList, но я думаю, что это неправильно, потому что getTemp не имеет назначенных ему температур. Должен ли я назначать дни и температуры отдельно в ежедневной температуре? Затем вызовите переменную, которую я присваиваю значениям температуры в выражении 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; 
    } 
} 
+0

Незначительный nitpick: функции в java начинаются с строчной буквы; однако конструктор соответствует имени класса, и поэтому (по соглашению) начинается с буквы верхнего регистра. Как и имя класса, поэтому он 'DailyTemperature' не' daily .... ' – Johan

+0

@Johan Спасибо, я просто изменил их. –

+0

Ваш вопрос непонятен - «Должен ли я назначать дни и температуры отдельно в ежедневной температуре?» - не уверен, что вы имеете в виду по отдельности. Вы уже назначили каждое значение дважды в конструкторе, а также создавали и заполняли массив в конструкторе. Я * думаю * первые три строки вашего конструктора - все, что нужно, просто закончите это после. Заполните массив каким-либо другим методом. И да, температура может быть отрицательной, поэтому я бы взял это. Если в коде есть что-то, что не работает прямо, вы не упомянули об этом ... – arcy

ответ

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>(); 

Проблемы с конструктором
Вы назначаете элементы в локальной переменной, которая выходит из области видимости, как только вы выходите из конструктора ...

Пусть me показать вам:

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 style of coding, где открытие { находится на этой же строке. Он держит больше кода на экране. (но это только я, и вы можете проигнорировать это, если хотите)

+0

Я был смущен, если мне нужны методы get и set, а также ежедневная температура [] getTemperature = новая ежедневная температура [5]; Я смущен тем, как именно я назначаю создание списка с днями и температурами, а затем реализую их с помощью массива объектов. –

+0

Каждый dailytemp стоит один и только хранит 1 день. Затем вы помещаете их в список. Один за раз. – Johan

+0

Итак, вам нужны два класса. Один для простых элементов и Один для того, чтобы держать коллектив. – Johan

Смежные вопросы