【问题标题】:Why I am receiving this result? JAVA [duplicate]为什么我会收到这个结果? JAVA [重复]
【发布时间】:2016-02-05 00:23:38
【问题描述】:

我正在学习使用比较器,但在执行我的程序时,我在控制台中得到了一个非常奇怪的结果:

我定义了一个名为 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 中。然后用户必须选择比较模式,我调用所选比较模式的类,在对列表进行排序后,我打印它排序的 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

但是我在控制台上收到了这个:

[Main.Zapato@2ff4acd0, Main.Zapato@279f2327, Main.Zapato@54bedef2]

当我每次在 System.out.println("Zapato introducido es: " + listaZapatos.get(2)) 所以我收到这样的信息:

Main.Zapato@2ff4acd0

【问题讨论】:

    标签: java sorting object arraylist comparator


    【解决方案1】:

    您需要在 Zapato 类中覆盖 toString 实现。打印集合时,该方法在内部对该集合中的每个对象调用toString()。默认的toString 实现为您提供所需的数据。

    这样的事情会有所帮助:

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

    在您的Zapato 班级中

    【讨论】:

    • 工作就像一个魅力!
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2022-01-23
    • 2020-12-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-08-10
    • 2019-07-24
    相关资源
    最近更新 更多