黑马程序员技术交流社区

标题: 数组打印问题 [打印本页]

作者: adamjy    时间: 2014-4-22 00:51
标题: 数组打印问题
本帖最后由 adamjy 于 2014-4-22 12:36 编辑

代码如下,
  1. public class Employee implements Comparator {
  2.         private String Name;
  3.         private int Salary;

  4.         public String getName() {
  5.                 return Name;
  6.         }

  7.         public Employee() {
  8.                 super();
  9.                 // TODO Auto-generated constructor stub
  10.         }

  11.         public void setName(String name) {
  12.                 Name = name;
  13.         }

  14.         public int getSalary() {
  15.                 return Salary;
  16.         }

  17.         public void setSalary(int salary) {
  18.                 Salary = salary;
  19.         }

  20.         public static Comparator<Employee> Comparesal = new Comparator<Employee>() {

  21.                 @Override
  22.                 public int compare(Employee o1, Employee o2) {
  23.                         // TODO Auto-generated method stub
  24.                         return (int) (o1.getSalary() - o2.getSalary());
  25.                 }
  26.         };

  27.         public static Comparator<Employee> Comparename = new Comparator<Employee>() {

  28.                 @Override
  29.                 public int compare(Employee o1, Employee o2) {
  30.                         // TODO Auto-generated method stub
  31.                         return (o1.getName().compareTo(o2.getName()));
  32.                 }
  33.         };

  34.         @Override
  35.         public int compare(Object o1, Object o2) {
  36.                 // TODO Auto-generated method stub
  37.                 return 0;
  38.         }

  39.         public Employee(String name, int salary) {
  40.                 super();
  41.                 this.Name = name;
  42.                 this.Salary = salary;
  43.         }

  44.         public static void main(String args[]) {
  45.                 Employee[] emparr = new Employee[3];

  46.                 emparr[0] = new Employee("Adam", 30000);
  47.                 emparr[1] = new Employee("John", 40000);
  48.                 emparr[2] = new Employee("Gates", 50000);

  49.                 Arrays.sort(emparr, Employee.Comparename);
  50.                 System.out.println(Arrays.toString(emparr));

  51.         }
  52. }
复制代码

打印结果,“[com.itheima.Employee@c0dd841, com.itheima.Employee@60f09995, com.itheima.Employee@53f336eb]”
为什么不是“Adam,Gates,John”
作者: 左拉    时间: 2014-4-22 01:00
System.out.println()打印对象的时候是打印地址信息,如果想按照自己需要的信息进行打印,必须在类中重写toString()方法,按照字面上理解,toString()表示将对象变成字符串信息,这个方法是在Object类中定义的,Object类是java中所有类的父类,所以任何类都默认有这个方法。在System.out.println()打印引用数据类型时,它都会默认调用toString()方法。

所以要想按照你的需要输出信息,只需在Employee类中加入toString()方法即可:
  1. //在这里这个方法需要重写,所以,访问权限,返回值类型,方法名都必须如此,不能更改
  2. public String toString(){
  3.       return this.name;
  4. }
复制代码

作者: 王松松    时间: 2014-4-22 02:17
emparr是一个数组引用,存放在栈内存中开辟的内存空间,指向堆内存中开辟的内存空间,值为堆内存中空间地址值。
作者: 创造命运    时间: 2014-4-22 07:56
本帖最后由 创造命运 于 2014-4-22 08:20 编辑

我在代码里加了toString方法就可以了。同时将代码的顺序调了一下。要注意代码的可读性,构造方法一般都放在前面。
import java.util.*;
class Employee implements Comparator {
        private String name;
        private int Salary;

        public Employee() {
                super();
        }

        public Employee(String name, int salary) {
                super();
                this.name = name;
                this.Salary = salary;
        }

        public String getName() {
                return name;
        }

        public void setName(String name) {
                name = name;
        }

        public int getSalary() {
                return Salary;
        }

        public void setSalary(int salary) {
                Salary = salary;
        }

        public static Comparator<Employee> Comparesal = new Comparator<Employee>() {
                public int compare(Employee o1, Employee o2) {
                                return (int) (o1.getSalary() - o2.getSalary());
                }
        };

        public static Comparator<Employee> Comparename = new Comparator<Employee>() {
                public int compare(Employee o1, Employee o2) {
                                return (o1.getName().compareTo(o2.getName()));
                }
        };

        public int compare(Object o1, Object o2) {
                return 0;
        }
       //重写toString方法。
        public String toString()
        {
                return this.name;
        }        //toString方法重载,用来根据需要返回。
        public String toString(Object obj)        {
                if (obj instanceof String)
                {
                        return name;
                }
                else if (obj instanceof Integer)
                {
                        return Salary+"";
                }
                else if (obj instanceof Employee)
                {
                        return "["+name+":"+Salary+"]";
                }
                else
                        return null;
        }

        public static void main(String args[]) {
                Employee[] emparr = new Employee[3];

                emparr[0] = new Employee("Adam", 30000);
                emparr[1] = new Employee("John", 40000);
                emparr[2] = new Employee("Gates", 50000);
                //按照名字排序
                Arrays.sort(emparr, Employee.Comparename);
                //System.out.println(Arrays.toString(emparr));      //这里会调用Employee类下无参数的toString方法,不要下面的代码也能实现你的要求了
                //根据想要返回的内容调用带参数的toString方法。
                for (Employee emp : emparr)                {
                        //System.out.println(emp.toString(emp.Salary));
                        //System.out.println(emp.toString(emp.name));
                        System.out.println(emp.toString(em));
                }

        }
}


作者: 爱翚    时间: 2014-4-22 07:59
您的方法打印的是数组在堆内存中的三个空间的地址值,而不是三个空间中存放的数据信息
应使用以下方法打印输出

package cn.zjp;

import java.util.Arrays;
import java.util.Comparator;

public class Employee implements Comparator<Object> {

        private String Name;
        private int Salary;

        public String getName() {
                return Name;
        }

        public void setName(String name) {
                Name = name;
        }

        public int getSalary() {
                return Salary;
        }

        public void setSalary(int salary) {
                Salary = salary;
        }

        public Employee() {
                super();
        }
       
        public static Comparator<Employee> Comparesal = new Comparator<Employee>() {
                public int compare(Employee o1, Employee o2) {
                        return (int) (o1.getSalary() - o2.getSalary());
                }
        };

        public static Comparator<Employee> Comparename = new Comparator<Employee>() {
                public int compare(Employee o1, Employee o2) {
                        return (o1.getName().compareTo(o2.getName()));
                }

        };

        public int compare(Object o1, Object o2) {
                return 0;
        }

        public Employee(String name, int salary) {
                super();
                this.Name = name;
                this.Salary = salary;
        }

        public static void main(String args[]) {
               
                Employee[] emparr = new Employee[3];

                emparr[0] = new Employee("Adam", 30000);
                emparr[1] = new Employee("John", 40000);
                emparr[2] = new Employee("Gates", 50000);

                //按姓名排序
                Arrays.sort(emparr, Employee.Comparename);
                for(int i = 0;i < emparr.length;i++){
                        System.out.print(emparr[i].getName()+" ");
                        System.out.println(emparr[i].getSalary()+" ");
                }
                System.out.println();
               
                //按工资排序
                Arrays.sort(emparr, Employee.Comparesal);
                for(int i = 0;i < emparr.length;i++){
                        System.out.print(emparr[i].getName()+" ");
                        System.out.println(emparr[i].getSalary()+" ");
                }
//                System.out.println(Arrays.toString(emparr));
        }
}




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2