首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > J2SE开发 >

这个程序的System.out.println()有有关问题吧

2012-02-21 
这个程序的System.out.println()有问题吧?Java codepublic class Person {String firstname,lastnameBool

这个程序的System.out.println()有问题吧?

Java code
public class Person {String firstname,lastname;Boolean sex;Integer age;public Person(String firstname,String lastname,Boolean sex,Integer age) {    this.firstname = firstname;    this.lastname = lastname;    this.sex = sex;    this.age = age;}public String getFirstName() {     return firstname;   }   public String getLastName() {     return lastname;   }   public Boolean getSex() {      return sex;    }    public Integer getAge() {      return age;    }//为了输入方便,重写了toString()public String toString()    {      return firstname +" "+lastname+" "+(sex.booleanValue()?"男":"女")+" "+age;    }}//end person下面是要实现比较器public class Comparators {public static java.util.Comparator getComparator() {    return new java.util.Comparator() {      public int compare(Object o1, Object o2) {        if (o1 instanceof String) {          return compare( (String) o1, (String) o2);        }       else if (o1 instanceof Integer) {          return compare( (Integer) o1, (Integer) o2);        }       else if (o1 instanceof Person) {      return compare( (Person) o1, (Person) o2);    }        else {          System.err.println("未找到合适的比较器");          return 1;        }      }      public int compare(String o1, String o2) {        String s1 = (String) o1;        String s2 = (String) o2;        int len1 = s1.length();        int len2 = s2.length();        int n = Math.min(len1, len2);        char v1[] = s1.toCharArray();        char v2[] = s2.toCharArray();        int pos = 0;        while (n-- != 0) {          char c1 = v1[pos];          char c2 = v2[pos];          if (c1 != c2) {            return c1 - c2;          }          pos++;        }        return len1 - len2;      }      public int compare(Integer o1, Integer o2) {        int val1 = o1.intValue();        int val2 = o2.intValue();        return (val1 < val2 ? -1 : (val1 == val2 ? 0 : 1));      }      public int compare(Boolean o1, Boolean o2) {         return (o1.equals(o2)? 0 : (o1.booleanValue()==true?1:-1));       }      public int compare(Person o1, Person o2) {        String firstname1 = o1.getFirstName();        String firstname2 = o2.getFirstName();        String lastname1 = o1.getLastName();        String lastname2 = o2.getLastName();        Boolean sex1 = o1.getSex();        Boolean sex2 = o2.getSex();        Integer age1 = o1.getAge();        Integer age2 = o2.getAge();        return (compare(firstname1, firstname2) == 0 ?                (compare(lastname1, lastname2) == 0 ? (compare(sex1, sex2) == 0 ? (compare(age1, age2) == 0 ? 0 :                 compare(age1, age2)) :                 compare(sex1, sex2)) :                 compare(lastname1, lastname2)) :                compare(firstname1, firstname2));      }    };}}以上代码有可能因为浏览器的布局自动换行。compare(Person o1, Person o2)的返回值看起来比较别扭。最简单的是    public int compare(Boolean o1, Boolean o2) {         return (o1.equals(o2)? 0 : (o1.booleanValue()==true?1:-1));       }o1和o2相等返回0,否则o1如果是true 就表示o1大于o2。再尝试输出结果看看public class Main {public Main() {}public static void main(String[] args) {    Person[] person = new Person[] {         new Person("ouyang", "feng", Boolean.TRUE, new Integer(27)),         new Person("zhuang", "gw", Boolean.TRUE, new Integer(27)),         new Person("zhuang", "gw", Boolean.FALSE, new Integer(27)),         new text.Person("zhuang", "gw", Boolean.FALSE, new Integer(2)),     };     for (int i = 0; i < person.length; i++) {      [color=#FF0000] System.out.println("before sort=" + person[i]);[/color]     }     java.util.Arrays.sort(person, Comparators.getComparator());for (int i = 0; i < person.length; i++) {    System.out.println("after sort=" + person[i]);}}}输出结果:[color=#FF0000]before sort=ouyang feng 男 27[/color]before sort=zhuang gw 男 27before sort=zhuang gw 女 27before sort=zhuang gw 女 2after sort=ouyang feng 男 27after sort=zhuang gw 女 2after sort=zhuang gw 女 27after sort=zhuang gw 男 27 



请问打印person[i]为什么会出现before sort=ouyang feng 男 27呢,person[i]不是个对象么,怎么把属性都打出来了?

[解决办法]
因为你重写了public String toString()方法,所以当执行 System.out.println("before sort=" + person[i]); 的时候person[i].toString()被调用,所以。。。你看看吧
[解决办法]
你重写了toString()方法 所以在打印的时候把调用的是你重写后的toString方法,而不是java默认的方法,这样就把person[i]的属性都打印出来了

[解决办法]
因为你在toString方法里把所有属性都打出来了。。赫赫
[解决办法]
你重写了toString()了。

热点排行