2016-06-09 25 views
0

Verwenden Sie die Klasse Check, fügen Sie den Code hinzu, damit die Checks nach checkNumber sortiert wird.Fügen Sie mithilfe der Check-Klasse den Code hinzu, damit die Checks nach checkNumber sortiert werden.

import java.util.Date; 

public class Check implements Comparable { 

    private int checkNumber; 
    private String payTo; 
    private Date date; 
    private float amount; 

    public int compareTo(Object arg0) { 
     //Insert code here 

    } 

    public int getCheckNumber() { 
     return checkNumber; 
    } 

    public void setCheckNumber(int checkNumber) { 
     this.checkNumber = checkNumber; 
    } 

    public String getPayTo() { 
     return payTo; 
    } 

    public void setPayTo (String payTo) { 
     this.payTo = payTo; 
    } 

    public Date getDate() { 
     return date; 
    } 

    public void setDate (Date date) { 
     this.date = date; 
    } 

    public float getAmount() { 
     return amount; 
    } 

    public void setAmount (float amount) { 
     this.amount = amount; 
    } 
} 

Meine Lösung ist unten, aber es scheint nicht zu funktionieren.

Kann mir jemand mit der Lösung helfen?

public int compareTo(Object arg0) { 
    if(this.checkNumber == arg0.checkNumber) 
     return 0; 
    else 
     return this.checkNumber > arg0.checkNumber ? 1 : -1; 
} 

Antwort

0

Sie nicht angeben, was Sie unter „nicht funktioniert“, aber Ihr Code zu lesen, ich nehme an, dass Sie einen Kompilierungsfehler erhalten.

Der Grund dafür ist, weil der Code, den Sie erhielten, keinen Typ für das Vergleichbare angegeben hat, also weiß er nicht, mit welchem ​​Typ Sie es überhaupt vergleichen möchten. Es wird Object standardmäßig verwenden, die (von Entwurf) nichts über die Felder und Methoden von Check weiß.

Die folgende Modifikation ist die beste Lösung:

public class Check implements Comparable<Check> { 

    public int compareTo(Check arg0) {/* ...*/ } 
} 

Dieser wird Sie zwingen, diese s zu anderen Check‘nur zu vergleichen und machen arg0 ein Check Objekt, wodurch seine Felder und Methoden zur Verfügung.

Sollten sich die Parameter des Problems nicht zulassen, erhielten Sie den bereitgestellten Code zu ändern, dann ist das (sehr sehr weit entfernten) zweitbeste Lösung ist:

public int compareTo(Object arg0) { 
    Check other = null; 
    if(arg0 instanceof Check) 
     other = (Check)arg0; 
    // Other checks. 
} 

Diese Anpassung würde technisch Arbeit für Ihre Problem aufgrund der Vorgabe, dass Sie den bereitgestellten Code nicht ändern dürfen, aber ansonsten überhaupt nicht empfohlen wird, da der Vertrag für Vergleichbare die Art des Objekts, mit dem Sie vergleichen möchten, angegeben werden soll, und keine Angabe kann zu Problemen führen.

In der Tat, ich würde sagen, Sie sind völlig berechtigt, die Person, die Ihnen dieses Problem gab, dass sie eine schreckliche Person sind, geben Sie ein Problem mit diesem Fehler darin, weil nicht eine vergleichbare Art ist ein wirklich schlechte Übung. Vor allem, wenn sie dir beibringen, wie man programmiert.

+0

Ja das ist der Fehler. Und ja, das ist der Code, der keine weiteren Anweisungen gibt, also gibt es nicht einmal einen Konstruktor oder etwas, das ich benutzen kann oder etwas, weshalb ich verwirrt bin. – Premo

+0

Das Fehlen von Konstruktor ist kein Problem (zumindest technisch gesehen ist es ein stilistischer Fauxpas), Sie können eine Instanz mit 'new Check()' initialisieren und Felder mit den Sätzen füllen, da kein anderer Konstruktor existiert. Für das Vergleichbare möchten Sie vielleicht [Generische Typen] (https://docs.oracle.com/javase/tutorial/java/generics/types.html) und das [Vergleichbare Javadoc] lesen (https: // docs.oracle.com/javase/8/docs/api/java/lang/Comparable.html). –