Compiler-Fehler Comparable / compareTo implementierung

nuri

Mitglied
Hallo leute,

ich stehe vor einem Problem und komme einfach nicht mehr weiter.

folgende Situation ist gegeben:

Klasse CMaterial:

Java:
import java.io.*;
import java.util.*;
/**
 *Class CMateriatl. Jedes Material besteht aus einem Namen zum Beispiel Holz oder Gals. Jedes 
 *dieser Materialien hat eine festgelegte Dichte und einen festgelegten Preis pro Kilogramm.
 * 
 * @author () 
 * @version 29.05.2014
 */
public class CMaterial
{
    // instance variables - replace the example below with your own
    public  String Name;
    private double Dichte;
    public double Pprokg;
    private static String Datei;
    private boolean Check;

    /**
     * Konstruktor des Objekts CMaterial
     */
    public CMaterial(String Name, double Dichte, double Pprokg)
    {
        this.Name = Name;
        this.Dichte = Dichte;
        this.Pprokg = Pprokg;
    }
    
    /**
     * Konstruktor des Objekts CMaterial am Beispiel von Holz
     */
    public CMaterial()
    {
        this.Name="Holz";
        this.Dichte=0.0006; //(kg/cm)
        this.Pprokg=0.3; //€
    }
    /**
     * Diese Methode liest eine *.txt - Datei ein. Diese hat alle Materialien hinterlegt.
     * 
     * @ return: materialien
     */
    public static CMaterial[] MaterialEinlesen ()
    {  
        int zaehler = 0;
        CMaterial[] materialien = null;
        Scanner dateiwerte=null;
        Scanner hilfe=null;
        
   
        try 
        {
            File Datei = new File("Materialliste.txt");
       
            dateiwerte = new Scanner(Datei);
            hilfe = new Scanner(Datei);
        
            while(hilfe.hasNext())
            {
                zaehler++;
                hilfe.next();
            }
                     
            materialien = new CMaterial[zaehler/3];
            for(int i = 0; i < zaehler/3; i++)
            {
                materialien[i] = new CMaterial(dateiwerte.next(),Double.parseDouble(dateiwerte.next()),Double.parseDouble(dateiwerte.next()));
            }
        } catch (IOException e) {
            System.err.println("Fehler! Datei konnte nicht eingelesen werden. :" + e);
        } finally {
            try {
                    System.out.println("Closing Scanner!");
                    dateiwerte.close();
                    hilfe.close();
                    System.out.println("Scanner Closed!");
            } catch (Exception e) {
                System.err.println("Fehler! Datei konnte nicht geschlossen werden. :" + e);
            }
        }
    
        return materialien;
    }
     
    /**
     * Eine Methode zum überprüfen, ob Dateiname richtig übergeben wurden ist.
     * 
     * @return: boolean check5
     */
    public boolean getCheck()
     {
       if (Datei.equals("Materialliste.txt"))
            {
                boolean Check = true;
                
            }
            else 
            {
                System.out.println("Der Dateinamen ist falsch!");
            }
            return Check ;
        }
    
     /**
    * Methode zur Rückgabe der Dichte des Materials
    * 
    * @param  keine Parameter
    * @return Dichte
    */
   
    public double getDichte()
    {
        return Dichte;
    }
    
     /**
    * Methode zur Rückgabe des Preises pro Kilogramm
    * 
    * @param  keine Parameter
    * @return Pprokg 
    */
    public double getPprokg()
    {
        return Pprokg;
    }
    
     /**
    * Methode zur Rückgabe des Namens des Materials
    * 
    * @param  keine Parameter
    * @return Name
    */
    public String getName()
    {
        return Name;
    }
    
     /**
    * Methode zum Setzen der Dichte
    * 
    * @param  neue Dichte
    * @return keine Rückgabe
    */
   
    public void setDichte(double neuDichte)
    {
       Dichte=neuDichte; 
    }
    
     /**
    * Methode zum Setzen des Preises pro Kilogramm
    * 
    * @param  neuer Pprokg (Preis pro Kilogramm
    * @return keine Rückgabe
    */
   
    public void setPprokg(double neuPprokg)
    {
        Pprokg=neuPprokg;
    }
    
     /**
    * Methode zum Setzen des Namens
    * 
    * @param  neuer Name
    * @return keine Rückgabe
    */
   
    public void setName(String neuName)
    {
        Name=neuName;
    }
}

und die abstrakte klasse CMaterialsort:

Java:
/**
 * Write a description of class CMaterialSort here.
 * 
 * @author (your name) 
 * @version (a version number or a date)
 */
public abstract class CMaterialsort implements Comparable<CMaterial>

{

    private String Name;
    private double Pprokg;
    private double Dichte;

    public void Material(String Name, double Pprokg, double Dichte) 
    {
        this.Dichte = Dichte;
        this.Name = Name;
        this.Pprokg = Pprokg;
       
    }
   
    @Override
    public String compareTo(CMaterial comparestu) {
        String compareage=((CMaterial)comparestu).getName();
        /* For Ascending order*/
        return this.Name-compareage;

        /* For Descending order do like this */
        //return compareage-this.studentage;
    }

    @Override
    public String toString() {
        return "[ Dichte=" + Dichte + ", Name=" + Name + ", Dichte pro Kg=" + Pprokg + "]";
    }

}

der Kompiler gibt folgenden Fehler aus:

Bildschirmfoto%20vom%202014-06-02%2018%3A53%3A10.png


Quelltext wurde in BlueJ geschrieben.

Woran liegt es?


Vielen dank im voraus für eure mühen.

MfG
 
Der Fehler liegt in der Klasse "CMaterialsort" in Zeile 24.
Da steht ja keine Zeilenangabe bei dem Fehler bei.
Und es geht darum, dass ja (logischerweise) String und Int nicht kompatibel sind 😉

Die Fehlermeldung war ja:
"java.lang.Comparable return type java.lang.String is not compatible with int."

Das erstmal so als Tipp 😉
Guck dir nochmal genau an, was zurück gegeben wird 😀
Wenn du immer noch nicht weiter weißt, dann sag nochmal Bescheid 😉

Gruß BK
 
Zuletzt bearbeitet:
Was kommt raus, wenn ich

"Hallo" MINUS "Haus" mache??

Selbst wenn das gehen würde, Sag die Fehlermeldung ja schon korrekt, was schief läuft:

Du sagst "@Override" bei der Methode "public String compareTo(CMaterial comparestu) {"

Damit die Methode korrekt overriden kann, muss diese aber int zurück geben.

compareTo und String Rückgabe macht auch iwie wenig sinn.
 

Zurück
Oben