2013-04-07 147 views
1

我一直在使用一個可比較的類來正確運行和比較,但是當我嘗試打印這些值時,它給了我內存地址。我知道這可以通過toString方法解決,但我不確定如何去做。這裏是我的代碼:用toString返回一個字符串java

import java.io.*; 
import java.util.*; 
import java.lang.Object; 

public class StreetAddress implements Comparable<StreetAddress> 
{ 
    protected int num; 
    protected String stName; 

    public StreetAddress(int n, String s){ 
    num = n; 
    stName = s; 
    } 

    public int getNum(){ 
     // returns the street number 
     return num; 
    } 

    public String getName(){ 
     // returns the street name 
     return stName; 
    } 

    public int compareTo(StreetAddress street) throws ClassCastException{ 
     // exception prevents crash if an address is not compared to 
     // another address 
     int compareName = this.stName.compareTo(street.stName); 
     int compareNum = this.num - street.num; 
     if (compareName < 0){ 
      // first address comes after compared address 
      return compareName; 
     } 

     else if (compareName == 0){ // same address name 
      if (compareNum < 0){ 
       System.out.println(this.num + "" + this.stName + ", " + street.num + "" + street.stName); 
       return compareName; 
      } 
      else{ 
       System.out.println(""); 
       return compareName; 
      } 
     } 

     else{ 
      // first address comes before compared address 
      return compareName; 
     } 

     } 

    public static void main(String args[]) 
    { 
    StreetAddress add1 = new StreetAddress(7864, "cartesian road"); 
    StreetAddress add2 = new StreetAddress(5141, "cartesian road"); 
    StreetAddress add3 = new StreetAddress(1664, "n kings street"); 
    StreetAddress add4 = new StreetAddress(9753, "pioneer parkway"); 
    StreetAddress add5 = new StreetAddress(3643, "starry avenue"); 
    add1.compareTo(add2); 
    add4.compareTo(add1); 
    add3.compareTo(add3); 
    add2.compareTo(add5); 
    } 
} 
+0

'''''/ /異常可以防止崩潰'沒有它沒有。 – EJP 2013-04-11 01:21:47

回答

5

簡單:

@Override 
public String toString() { 
    return String.format("%d %s", num, stName); 
} 

@Override註釋是沒有必要的,但它肯定是很好的做法。請注意,String.format("%d %s", num, stName)會生成"[num] [street]"的字符串。如果您想在將來進行更改,我發現String.format比字符串連接提供了更大的靈活性。

+0

這不應該包括街道號碼,而不僅僅是街道名稱? – templatetypedef 2013-04-07 23:13:51

+0

@templatetypedef是 - 我添加了它 – arshajii 2013-04-07 23:15:48

+0

@ A.R.S。那麼「%d%s」究竟意味着什麼?我以前沒見過。 – 2013-04-07 23:37:08

2
@Override 
public String toString() { 
    return "StreetAddress: num= " + num + ", stName=" + stName ; 
}