2016-02-05 2 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); 
    } 
} 

В Main Я прошу значений, создать 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 Azul 21,34 Verde 46

, но вместо этого я получаю это на консоли:

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

Также появляется, когда я печатаю объект, созданный с помощью введенных значений каждый раз, когда я прошу их в System.out.println («Zapato introducido эс:» + listaZapatos.get (2)) так что я получать такие вещи:

[email protected]

ответ

3

Вы должны переопределить toString реализации в классе Zapato. При печати коллекции внутренне метод будет вызывать toString() для каждого объекта в этой коллекции. Реализация по умолчанию toString дает вам нужные данные.

Нечто подобное поможет:

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

В вашем Zapato классе

+1

Работал как шарм! –

Смежные вопросы