Строка печати 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 этого не допустит.

2 ответа

Решение

Обновление 3: я нашел это.

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

Здесь вы делаете конкатенацию строк в массиве и строке. Это приводит к установке route[num] на уровне рекурсии к этому конкретному результату.

Каждый Java-класс наследует от класса Object, который реализует по умолчанию toString() метод. Исходный код метода toString() по умолчанию выглядит следующим образом:

public String toString() {

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

    }

Если вы не переопределяете метод toString() по умолчанию, вызывается метод, описанный выше.

Другие вопросы по тегам