2013-10-05 64 views
0

我正在编写一个程序,它将采用临时和日期列表并使用对象数组实现列表。每个对象将存储temp(double)和day(string)。那么我们需要对这些对象进行排序并输出它们。我用两个变量创建了我的第一个类(DailyTemperature),get/set方法和一个构造函数。现在,当我去创建我的第二类(DailyTemperatureList)与ArrayList的时候,当我尝试添加到列表中时出现错误,错误提示 “找不到适用于add(java.lang.String,double)方法的方法java .util.ArrayList.add(int,DailyTemperature)不适用(实际参数java.lang.String不能通过方法调用转换转换为int)方法java.util.ArrayList.add(DailyTemperature)不适用实际和正式列表不同的长度试图扩展类时遇到问题

我假设它是因为我想使用DailyTemperature类的变量。但是当我扩展它时,我得到一个错误,说类DailyTemperature中的构造函数DailyTemperature不能应用于给定的类型。 。我不应该延长,也许做别的事吗?

这里是我的代码:

import java.io.*; 
import java.util.Scanner; 
import java.util.ArrayList; 

public class DailyTemperature 
{ 
    //variables 
    private double temperature; 
    private String day; 

    //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 day, double temperature) { 

     this.day = day; 
     this.temperature = temperature; 
    } 


} 



import java.io.*; 
import java.util.Scanner; 
import java.util.ArrayList; 

public class DailyTemperatureList extends DailyTemperature 
{ 
    public static void main (String [] args) { 


    ArrayList<DailyTemperature> dailytemps = new ArrayList<DailyTemperature>(); 

    dailytemps.add("Mon", 78.1); 
} 
} 

回答

2

不要有DailyTemperatureList延伸DailyTemperature。这不是什么继承,因为一些东西不是什么东西。你的继承不通过“is-a”测试;例如一个大学班的学生并不是个别学生的更具体的概念。相反,第一个类包含第二个类的ArrayList,或ArrayList<DailyTemperature>

另外,ArrayList有一个add方法,它接受一个参数,这里是你的DailyTemperature对象,或者接受一个int和一个对象,但不接受一个String和一个对象的方法。

我还会让DailyTemperature实现Comparable<DailyTemperature>接口,以便可以轻松地对其列表进行排序。

+0

如何实现可比较的界面? (DailyTemperature(“Mon”,78.1));“将元素添加到列表中,然后我可以排序? –

+1

@SophiaAli实现'Comparable'很有用,但你应该先让你的代码工作。为了实现'Comparable ','DailyTemperature'需要声明它实现它,并且它需要实现[Comparable]定义的'int compareTo(DailyTemperature)'(http://docs.oracle.com/javase/) 7 /文档/ API /爪哇/郎/ Comparable.html)。阅读[教程](http://docs.oracle.com/javase/tutorial/java/IandI/usinginterface.html)的实现接口。 – kiheru

2

dailytempsDailyTemperatureArrayList。因此,增加它的时候,你需要添加的DailyTemperature一个实例:

dailytemps.add(new DailyTemperature("Mon", 78.1)); 

当前实现,DailyTemperatureList并不需要延长DailyTemperature

+0

扩展'DailyTemperature'时得到的问题来自当父类没有无参数构造函数时需要显式调用父类的构造函数。你需要一个调用'super(String,double)'的构造函数,但是由于'DailyTemperatureList'不应该首先扩展'DailyTemperature',这有点学术性。 – kiheru

+0

我加了dailytemps.add(new DailyTemperature(“Mon”,78.1));全部5天。天数/温度是否也保存在数组中?还是需要创建一个将它链接到列表的数组? –

+0

@SophiaAli我不知道你在哪里或为什么需要一个数组。 'ArrayList'(即dailytemps)在内部使用一个数组来存储内容,它只是不被接口公开。如果你真的需要一个数组,你可以使用[toArray](http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#toArray%28T [] %29)方法的列表。 – kiheru