我正在研究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不允许这样做。
答案 0 :(得分:6)
更新3:我找到了。
options[i].revmdp(route+dirrections[i],num);
在这里,您正在对数组和String进行字符串连接。这会导致将route[num]
设置为此concat结果的递归级别。
答案 1 :(得分:0)
每个Java类都来自类Object
,它实现了默认的toString()
方法。 default toString()方法的源代码如下:
public String toString() {
return getClass().getName() + "@" + Integer.toHexString(hashCode());
}
如果不覆盖默认的toString()方法,则调用上面的方法。