Tri d'un tableau à l'aide du Comparateur
J'ai le code suivant. Lorsque j'essaie de compiler, il me donne l'erreur suivante:
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
Comment puis-je obtenir les titres de logiciels (un tableau) à afficher dans l'ordre alphabétique en utilisant le Comparateur?
Quelle est l'erreur que vous obtenez?
La méthode sort(List<T>, Comparateur de<? super T>) dans le type de Collections n'est pas applicable pour les arguments (Logiciel[], nouveau Comparateur(){}) Le type nouveau Comparateur(){} doit mettre en œuvre les hérité résumé de la méthode de Comparaison.compare(Object, Object)
En regardant le code, il semble que l'erreur (la compilation) est à la ligne invoquant
La méthode sort(List<T>, Comparateur de<? super T>) dans le type de Collections n'est pas applicable pour les arguments (Logiciel[], nouveau Comparateur(){}) Le type nouveau Comparateur(){} doit mettre en œuvre les hérité résumé de la méthode de Comparaison.compare(Object, Object)
En regardant le code, il semble que l'erreur (la compilation) est à la ligne invoquant
Collections.sort()
. Vous êtes de passage d'un tableau à la méthode sort
, il s'attend à un List
. Convertir votre tableau dans une liste.
OriginalL'auteur user1795189 | 2012-11-02
Vous devez vous connecter pour publier un commentaire.
Vous avez deux problèmes:
1) Vous utilisez
Collections.trier
(qui prend unList<E>
), mais en essayant de trier un tableau. UtilisationTableaux.trier
à la place.2) Vous devez indiquer que vous êtes à la mise en œuvre de
Comparator<Software>
, pas seulement la premièreComparator
type.Donc, fondamentalement, cela fonctionne:
OriginalL'auteur Jon Skeet
Tout d'abord: le tri d'un tableau, comme
Software[]
, vous devez utiliserjava.util.Arrays.sort
plutôt quejava.util.Collections.sort
.Deuxièmement: depuis votre
Comparator
est spécifiquement pour lesSoftware
le cas, vous devriez écrirenew Comparator<Software>()
plutôt que de simplementnew Comparator()
. (Le dernier est en fait mauvais code, même quand elle ne fonctionne pas.)OriginalL'auteur ruakh
Vous ne pouvez pas trier sur le tableau lors de l'utilisation de
Collections.sort
.Collections.sort
n'accepte que de la Liste. l'utilisateurArrays.sort
plutôt queCollection.sort
.OriginalL'auteur kosa
Parce que vous essayez d'utiliser l'objet du tableau d'utilisation ci-dessous:
et votre logiciel de classe implémente implémente Comparable et redéfinir sa méthode compareTo:
J'ai fait la correction de votre classe comme ci-dessous:
Votre Inventaire class:
Ci-dessous est la sortie finale dans l'ordre de tri:
OriginalL'auteur user3468976
Vous devriez faire de votre "Logiciel" classe implémente comparable et puis écraser la méthode de comparaison de retourner une comparaison sur les titres comme vous l'avez fait à l'extérieur de votre code. Ce sera un remplacement pour le comparateur. Ensuite, tout ce que vous devez à appeler les Tableaux.de tri.
OriginalL'auteur Mitch Connor