Sortieren eines array mit Komparator
Ich habe den folgenden code. Wenn ich versuche zu kompilieren, dann erhalte ich die folgende Fehlermeldung:
The method sort(List<T>, Comparator<? super T>) in the type Collections is not
applicable for the arguments (Software[], new Comparator(){})
The type new Comparator(){} must implement the inherited abstract method
Comparator.compare(Object, Object)
- Code
import java.text.DecimalFormat; //For proper currency
import java.util.Comparator;
import java.util.Collections;
public class Software
{
//Declare variables
String SoftwareTitle; //SoftwareTitle
int SoftwareStock; //Software totals
double SoftwarePrice; //Software Price
int SoftwareNum; //Software Product ID
double CalculateInventory; //To add inventory
double SoftwareValue; //Software Total value
double value; //Complete inventory total
Software( String softtitle, int softstock, double softprice, int softitemnum )
{
//Create object constructor
SoftwareTitle = softtitle;
SoftwareStock = softstock;
SoftwarePrice = softprice;
SoftwareNum = softitemnum;
}
//Set Software Title
public void setSoftwareTitle( String softtitle )
{
SoftwareTitle = softtitle;
}
//Return Software Title
public String getSoftwareTitle()
{
return SoftwareTitle;
}
//Set software inventory
public void setSoftwareStock( int softstock)
{
SoftwareStock = softstock;
}
//Return software inventory
public int getSoftwareStock()
{
return SoftwareStock;
}
//Set software price
public void setSoftwarePrice( double softprice )
{
SoftwarePrice = softprice;
}
//Return software price
public double getSoftwarePrice()
{
return SoftwarePrice;
}
//Set item number
public void setSoftwareNum( int softitemnum )
{
SoftwareNum = softitemnum;
} //
//return software item number
public int getSoftwareNum()
{
return SoftwareNum;
} //
//calculate inventory value
public double Softwarevalue()
{
return SoftwarePrice * SoftwareStock;
}
public void setCalculateInventory (double value){
this.CalculateInventory = value;
}
public double getCalculateInventory(){
double value = 0;
for(int i = 0; i < 3; i++){
value = Softwarevalue();
}
return value;
}
}//end method value
//
import java.text.DecimalFormat; //For proper currency
import java.util.Arrays;
import java.util.Collections;
import java.util.Comparator;
public class Inventory {
public static void main( String args[] )
{
//Start array of software titles
Software[] aSoftware = new Software[4];
aSoftware[0]= new Software("Command and Conquer ", 6, 29.99, 10122);
aSoftware[1]= new Software("Alice in Wonderland", 1, 10.99,10233);
aSoftware[2]= new Software("Doom", 1, 10.99, 10344);
aSoftware[3]= new Software("Walking Dead", 6, 9.99, 10455);
//Set currency format
DecimalFormat money = new DecimalFormat("$0.00");
//Sort in order of Software Name
Collections.sort(aSoftware, new Comparator() {
public int compare(Software s1, Software s2) {
return s1.getSoftwareTitle().compareTo(s2.getSoftwareTitle());
}
});
//Display software title, number of units, cost, item number and total inventory
for (int i = 0; i < aSoftware.length; i++){
System.out.println("Software Title is "+ aSoftware[i].getSoftwareTitle() );
System.out.println("The number of units in stock is "+ aSoftware[i].getSoftwareStock() );
System.out.println("The price of the Software Title is "+ (money.format(aSoftware[i].getSoftwarePrice() )));
System.out.println( "The item number is "+ aSoftware[i].getSoftwareNum());
System.out.println( "The value of the Software Inventory is "+ (money.format(aSoftware[i].Softwarevalue() )));
System.out.println();
}
//output total inventory value
double total = 0.0;
for (int i = 0; i < 3; i++){
total += aSoftware[i].getCalculateInventory();
}
System.out.printf("Total Value of Software Inventory is: \t$%.2f\n", total);
//end output total inventory value
}
}
//
//end
Wie bekomme ich den software-Titel (ein array), um die Anzeige in alphabetischer Reihenfolge mit dem Komparator?
Was ist der Fehler, den du bekommen?
Die Methode sort(List<T>, Komparator<? super T>) in der Art der Sammlungen ist nicht anwendbar für die Argumente (Software, [], new Comparator(){}) Die Art new Comparator(){} implementieren muss, um die geerbte abstrakte Methode Komparator.compare(Object, Object)
Suche im code, es scheint der Fehler (compile-time) ist in der Zeile aufrufen
Die Methode sort(List<T>, Komparator<? super T>) in der Art der Sammlungen ist nicht anwendbar für die Argumente (Software, [], new Comparator(){}) Die Art new Comparator(){} implementieren muss, um die geerbte abstrakte Methode Komparator.compare(Object, Object)
Suche im code, es scheint der Fehler (compile-time) ist in der Zeile aufrufen
Collections.sort()
. Übergeben Sie ein array an die Methode sort
erwartet Sie ein List
. Konvertieren Sie Ihre array in eine Liste.
InformationsquelleAutor user1795189 | 2012-11-02
Du musst angemeldet sein, um einen Kommentar abzugeben.
Du hast zwei Probleme:
1) Du bist mit
Sammlungen.Sortieren
(das dauert eineList<E>
), sondern versuchen, ein array Sortieren. Verwenden- Arrays.Sortieren
statt.2) Sie müssen angeben, dass Sie implementieren
Comparator<Software>
, nicht nur die raw -Comparator
geben.Also im Grunde funktioniert dies:
InformationsquelleAutor Jon Skeet
Erstens: ein array Sortieren, wie
Software[]
verwenden, benötigen Siejava.util.Arrays.sort
eher alsjava.util.Collections.sort
.Zweitens: seit Ihr
Comparator
ist speziell fürSoftware
Instanzen, sollten Sie schreibennew Comparator<Software>()
anstatt bloßnew Comparator()
. (Letzteres ist eigentlich schlechten code, auch wenn es funktioniert.)InformationsquelleAutor ruakh
Kann man nicht Sortieren auf Arrays bei der Verwendung von
Collections.sort
.Collections.sort
akzeptiert nur eine Liste. BenutzerArrays.sort
eher alsCollection.sort
.InformationsquelleAutor kosa
Weil Sie versuchen, zu verwenden array-Objekt verwenden, unten:
Ihre software Klasse implementiert implementiert Vergleichbar und überschreiben Sie die compareTo-Methode:
Habe ich gemacht, die Korrektur Ihrer Klasse wie folgt:
Inventar-Klasse:
Unten ist die endgültige Ausgabe in sortierter Reihenfolge:
InformationsquelleAutor user3468976
Solltest du deine "Software" Klasse implementieren vergleichbar und überschreiben Sie dann die Methode vergleichen, um wieder eine vergleichen Sie auf den Titel, wie Sie es außerhalb Ihres code. Dieses wird ein Ersatz für den Komparator. Dann alles, was Sie brauchen, um zu rufen Arrays.Art.
InformationsquelleAutor Mitch Connor