2016-02-05 49 views
2

我正在學習使用比較器,並在執行我的程序時在控制檯中得到一個非常奇怪的結果:爲什麼我收到這個結果? JAVA

我定義了一個名爲Zapato的對象,其屬性的值在傳遞給用戶後通過參數傳遞給用戶:

public class Zapato { 

    int talla; 
    String color; 
    int precio; 

    public Zapato (int talla,String color,int precio){ 
     this.talla = talla; 
     this.color = color; 
     this.precio = precio; 
    } 

} 

然後,我創建了一些比較基於顏色或價格爲例。

public class OrdenarPorColor implements Comparator<Zapato>{ 

    @Override 
    public int compare(Zapato z1, Zapato z2) { 

     return z1.color.compareTo(z2.color); 
    } 
} 

在主我要求的值,創建3個對象和我保存它們上的ArrayList.Then用戶必須選擇爲比較模式和我調用類中選擇的比較模式的和排序列表之後,我打印了3名對象進行排序:

//Before this there is code repeated where I ask the values for the other 2 objects 
System.out.println("Introduzca la talla,el color y la talla de los zapatos: "); 
     System.out.println("Talla: "); 
     talla = Integer.parseInt(sc.nextLine()); 
     System.out.println("Color: "); 
     color = sc.nextLine(); 
     System.out.println("Precio: "); 
     precio = Integer.parseInt(sc.nextLine()); 

     listaZapatos.add(new Zapato(talla,color,precio)); 
     System.out.println("Zapato introducido es: " + listaZapatos.get(2)); 


     System.out.println("Escriba la opcion para comparar:"); 
     System.out.println("1-Por talla\n2-Por color\3-Por precio"); 
     System.out.println("Opcion: "); 

     int opcion = sc.nextInt(); 

     switch (opcion){ 

      case 1: 
       Collections.sort(listaZapatos,new OrdenarPorTalla()); 
       System.out.println(listaZapatos); 
       break; 
      case 2: 
       Collections.sort(listaZapatos,new OrdenarPorColor()); 
       System.out.println(listaZapatos); 
       break; 
      case 3: 
       Collections.sort(listaZapatos,new OrdenarPorPrecio()); 
       System.out.println(listaZapatos); 
       break; 
     } 

     return; 

但是,當該程序將它們打印的System.out.println(listaZapatos),它應該出現類似

45羅莎32,56蘇爾21,34維德46

而是我收到此在控制檯上:

[[email protected][email protected][email protected]]

而且當我打印所引入的值每次我問他們時所創建的對象的System.out.println(「Zapato introducido ES:」 + listaZapatos.get(2))似乎所以我接收像這樣的東西:

[email protected]

回答

3

您需要覆蓋Zapato類中的toString實現。打印集合時,內部方法將在該集合中的每個對象上調用toString()。默認toString實現爲您提供所需的數據。

像這樣的東西會有所幫助:

@Override 
public String toString() 
{ 
    return color + ":" + talla; 
} 

在你Zapato

+1

工作就像一個魅力! –

相關問題