Avatar billede skurggman Nybegynder
17. september 2003 - 19:25 Der er 17 kommentarer og
1 løsning

toString() metoden?

Hej

Jeg har et lille problem, jeg har en klasse Room og en klasse visitor...

Jeg skal gerne have en toString der kan hente min String name fra Room...

Fra klassen Visitor:
    public Room location()
    {
        return location;
    }

Fra klassen Room:
    public String toString()
    {
        return this.name;
    }

Hvorfor skriver den stadig Object Reference når jeg henter min location?
Avatar billede arne_v Ekspert
17. september 2003 - 19:43 #1
Må vi se lidt mere kode ?
Avatar billede skurggman Nybegynder
17. september 2003 - 19:51 #2
Visitor klassen:
import java.util.*;

public class Visitor {
    private String name;
    private static Room location;
    private ArrayList items = new ArrayList();

   
    public Visitor (String name, Room r)
    {
        name = name;
        location = r;
    }

    public Room location()
    {
        return location;
    }


    public void move(int dir)
    {
    if(Room.leadsTo(dir) != null) {
            location = Room.leadsTo(dir);
        }
           
    }


    public void pickUp(Item i)
    {
        if(location.hasItem(i) == true)
        {
        location.items.remove(i);
        items.add(i);
        }
    else
        System.out.println("The item i not in here...");
    }
   
    public void throwItem(Item i)
    {
        if(items.contains(i) == true)
        {
        items.remove(i);
        location.items.add(i);
        }
        else
        System.out.println("You don't have the item...");
    }
   
    public String toString()
    {
        return this.name;
    }
}


Room klassen:

import java.util.*;

public class Room
{
    private static List rooms;
    public static ArrayList items;
    private String name;
 
    private Random randomGenerator = new Random();

    public Room(String name)
    {
        rooms = new ArrayList(4);
        for (int i = 0; i<4; i++) {
            rooms.add(i, null);
        }
        items = new ArrayList();
        this.name = name;
    }

    public void connectTo(int dir, Room r) {
        rooms.set(dir, r);
    }

    public boolean roomExists(int dir) {
        return rooms.get(dir) != null;
    }

    public static Room leadsTo(int dir)
    {
        return (Room) rooms.get(dir);
    }

    public void addItem(Item i)
    {
      items.add(i); 
    }


    public boolean itemExists()
    {
        return items != null;
    }

    public Item chooseItem()
    {
    int itemsSize = items.size();   
    int index = randomGenerator.nextInt(itemsSize);
    return (Item) items.get(index);
    }

    public void removeItem(Item i)
    {
        items.remove(i);
    }
   
    public String getName()
    {
        return name;
    }
   
    public boolean hasItem(Item i)
    {
        return items.contains(i);
    }
   
    public String toString()
    {
        return this.name;
    }
}
Avatar billede arne_v Ekspert
17. september 2003 - 19:56 #3
public Visitor (String name, Room r)
    {
        name = name;
        location = r;
    }

skal nok være:

public Visitor (String name, Room r)
    {
        this.name = name;
        location = r;
    }
Avatar billede arne_v Ekspert
17. september 2003 - 19:58 #4
public Room location()
    {
        return location;
    }

burde være:

public Room getLocation()
    {
        return location;
    }
Avatar billede arne_v Ekspert
17. september 2003 - 19:58 #5
Men ellers burde det virke at have et Visitor objekt hente location og
kalde toString på den.

Hvordan kalder du ?
Avatar billede skurggman Nybegynder
17. september 2003 - 20:05 #6
Som jeg skriver i koden...???
Hvad mener du?
Avatar billede skurggman Nybegynder
17. september 2003 - 20:08 #7
Jeg kalder den gennem min Room location()
Avatar billede arne_v Ekspert
17. september 2003 - 20:09 #8
Selve udskrivningen.

Visitor x;
...
System.out.println(x.getLocation());

eller ?
Avatar billede skurggman Nybegynder
17. september 2003 - 20:23 #9
nej...

Return location...
Avatar billede skurggman Nybegynder
17. september 2003 - 20:24 #10
Virker toString metoderne kun gennem system.out.println?
For så er der noget jeg har misforstået... :-)
Avatar billede arne_v Ekspert
17. september 2003 - 20:24 #11
return location returnerer et Room objekt !?!?
Avatar billede arne_v Ekspert
17. september 2003 - 20:28 #12
toString er en metode der bliver kaldt, når et objekt skal vises
som tekst.

System.out.println(z);

vil kalde z.toString(). Det vil:

String s = "z=" + z;

også.
Avatar billede skurggman Nybegynder
17. september 2003 - 20:52 #13
Okay, så jeg skal kun bruge toString til at udskrive elementer med gennem System.out.println("object");

Og man kan ikke retunere en toString???

Eller hvad?
Avatar billede arne_v Ekspert
17. september 2003 - 20:57 #14
Ikke kun.

Men typisk.

Du kan godt lave:

public String getXasString() {
  return x.toString();
}
Avatar billede skurggman Nybegynder
17. september 2003 - 21:08 #15
Hvis jeg skriver:

    public Room location()
    {
        return location.toString();
    }

siger den incompatible typers osv...
Avatar billede arne_v Ekspert
17. september 2003 - 21:15 #16
Ja fordi du har erklæret den til at returnere Room.

Mit lille x eksempel returnerede String !
Avatar billede skurggman Nybegynder
17. september 2003 - 21:24 #17
Danke, læg lige et svar!!! :)
Avatar billede arne_v Ekspert
17. september 2003 - 21:26 #18
svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester