2013-10-05 1 views
0

Je suis en train d'écrire un programme qui va prendre une liste de temps et de jours et implémenter la liste en utilisant un tableau d'objet. chaque objet va stocker le temp (double) et le jour (string). alors nous devons trier les objets et les sortir. J'ai créé ma première classe (DailyTemperature) avec les deux variables, les méthodes get/set et un constructeur. Maintenant, quand je vais créer ma deuxième classe (DailyTemperatureList) avec l'ArrayList, j'obtiens une erreur en essayant d'ajouter à la liste l'erreur "aucune méthode appropriée trouvée pour ajouter (java.lang.String, double) la méthode java .util.ArrayList.add (int, DailyTemperature) n'est pas applicable (l'argument réel java.lang.String ne peut pas être converti en int par la conversion d'invocation de méthode) La méthode java.util.ArrayList.add (DailyTemperature) ne s'applique pas aux listes actuelles et officielles Je suppose que c'est parce que j'essaie d'utiliser des variables de la classe DailyTemperature, mais quand je l'étend, j'obtiens une erreur disant constructeur DailyTemperature dans la classe DailyTemperature ne peut pas être appliqué à des types donnés.Je ne sais pas pourquoi Suis-je pas censé m'étendre et peut-être faire autre chose?Problème lors de la tentative d'extension de la classe

Voici mon code:

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

Répondre

2

Ne pas avoir DailyTemperatureList étendre DailyTemperature. Ce n'est pas ce que l'héritage est pour depuis une collection de quelque chose n'est pas quelque chose. Votre héritage ne passe pas le test "is-a"; par exemple, une classe d'étudiants n'est pas un concept plus spécifique d'un étudiant individuel. Au lieu de cela, la première classe contient une ArrayList de la deuxième classe, ou ArrayList<DailyTemperature>.

En outre, ArrayList a une méthode add qui accepte un paramètre, ici votre objet DailyTemperature, ou un qui accepte un int et un objet, mais pas un String et un objet.

Je voudrais également que DailyTemperature implémente l'interface Comparable<DailyTemperature> afin qu'une liste de ceci puisse être facilement triée.

+0

Comment implémenter l'interface comparable? donc dans la classe DailyTemperatureList utiliserait cette ligne "dailytemps.add (new DailyTemperature (" Mon ", 78.1));" ajouter des éléments à la liste que je pourrais alors trier? –

+1

@SophiaAli implémentant 'Comparable' est utile, mais vous devriez d'abord faire travailler le code. Pour implémenter 'Comparable ', 'DailyTemperature' doit déclarer qu'il l'implémente, et il doit implémenter' int compareTo (DailyTemperature) 'comme défini par [Comparable] (http://docs.oracle.com/javase/ 7/docs/api/java/lang/Comparable.html). Lisez à propos de la mise en œuvre des interfaces à partir du [tutorial] (http://docs.oracle.com/javase/tutorial/java/IandI/usinginterface.html). – kiheru

2

dailytemps est un ArrayList de DailyTemperature. Alors, quand ajoutant, vous devez ajouter une instance de DailyTemperature:

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

mise en œuvre actuelle, DailyTemperatureList n'a pas besoin d'étendre DailyTemperature.

+0

Les problèmes que vous obtenez lorsque vous étendez 'DailyTemperature' proviennent du besoin d'appeler explicitement le constructeur de la classe parent lorsque la classe parent n'a pas de constructeur sans argument. Vous auriez besoin d'un constructeur qui appelle 'super (String, double)', mais comme 'DailyTemperatureList' ne devrait pas étendre' DailyTemperature' en premier lieu, c'est un peu académique. – kiheru

+0

J'ai ajouté dailytemps.add (new DailyTemperature ("Mon", 78.1)); pour tous les 5 jours. Les jours/températures sont-ils également sauvegardés dans un tableau ou dois-je créer un tableau liant la liste? –

+0

@SophiaAli Je ne sais pas où ou pourquoi vous auriez besoin d'un tableau. 'ArrayList' (c'est-à-dire dailytemps) utilise en interne un tableau pour stocker le contenu, il n'est tout simplement pas exposé par l'interface.Si vous avez vraiment besoin d'un tableau, vous pouvez utiliser le [toArray] (http://docs.oracle.com/javase/6/docs/api/java/util/ArrayList.html#toArray%28T [] % 29) méthode de la liste. – kiheru

Questions connexes