2013-10-23 56 views
0

我正在研究java中的一個特殊尋路系統,它需要在一個點上打印它的路徑。這遠遠沒有完成,但我遇到了一個問題。當我運行我的代碼時,它將打印一個指向字符串的指針,而不是字符串本身。下面是代碼:java打印字符串給出指針編號

public class node { 
    int optionnum; 
    node[] options; 
    String[] dirrections; 
    String[] route; 
    boolean[] visited; 

    public node(){ 
     options= new node[4]; 
     dirrections= new String[4]; 
     route= new String[50]; 
     for (int i=0;i<50;i++){ 
      route[i]=""; 
     } 
     visited= new boolean[50]; 
    } 
    public void revmdp(int num){ 

     visited[num]=true; 
     for(int i=0;i<optionnum;i++){ 
      System.out.println(options[i].route[0]); //how can this be a pointer? 
      options[i].revmdp(dirrections[i],num); 
    } 
public void revmdp(String nroute, int num){ 
    //System.out.println(route[0]+dirrections[0]); 
    if (!visited[num]||nroute.length()<route[num].length()){ 
     route[num]=nroute; 
     visited[num]=true; 
     for(int i=0;i<optionnum;i++){ 
      options[i].revmdp(route+dirrections[i],num); 
     } 
    } 
} 
    } 

輸出看起來像這樣

[Ljava.lang.String;@2d66a22b3; 

正如你可以在路徑的構造,我已經設置的路徑朝字符串「」(空字符串)看到。由於字符串還沒有被改變,所以這個代碼被調用了,我希望它返回「」,但是它會給出這些奇怪的字符串指針。任何人都知道發生了什麼事?

注意我已經嘗試調用route [0] [0],但java不會允許這樣做。

+3

如何聲明'route'? –

+1

請按照命名約定。 – Cruncher

+0

@TedHopp好點。這可能是一個Object []' – Cruncher

回答

6

更新3:我找到了。

options[i].revmdp(route+dirrections[i],num); 

在這裏你正在做一個數組和字符串的字符串連接。這會導致將遞歸級別設置爲route[num]以達到此連接結果。

+0

''趕上!'' – Cruncher

+0

有趣的是,如果你看一個編輯回來,那麼這個答案就不對了。查看revmdp()的標題後面一個編輯。 –

+0

@MohammadS。這就是爲什麼他現在發現了這個問題,而不是編輯回來:)。直到這個編輯 – Cruncher

0

來自類Object的每個Java類都可以實現默認的toString()方法。在default toString()方法的源代碼如下所示:

public String toString() { 

     return getClass().getName() + "@" + Integer.toHexString(hashCode()); 

    } 

如果不重寫默認的toString()方法,該方法上面被調用。

+1

但是,如果實際的對象是'String',那麼'toString()'已經被覆蓋。 –