Avatar billede romina Nybegynder
18. maj 2005 - 17:53 Der er 5 kommentarer

Metode til at samle et bestemt objekt op med?

Hejsa
Jeg sidder med følgende klasser:
import java.util.*;

/**
* Visitor modellerer en besøgende, der kan
* gå rundt i rum og samle genstande op
*/
public class Visitor
{
    private String name;
    private Room location;
    private List items;

    /**
    * Konstruktør for Visitor-objekter
    * @param name Navnet på den besøgende
    * @param r Rummet, som den besøgende starter i
    */
    public Visitor(String name, Room r)
    {
        this.name = name;
        this.location = r;
        items = new ArrayList();
    }

    /**
    * Returnerer rummet, hvor den besøgende befinder sig
    * @return Rummet, hvor den besøgende befinder sig
    */
    public Room getLocation()
    {
        return location;       
    }

    /**
    * Flytter den besøgende i retning dir
    * @param dir Retningen, som den besøgende går i
    */
    public void move(int dir)
    {
        if (getLocation().roomExists(dir) == false)
        {
        }
        else location = getLocation().leadTo(dir);
        System.out.println( name + " has moved to " + getLocation());
    }

    /**
    * Den besøgende samler Item i op, som bliver
    * fjernet fra det rum, som den besøgende befinder sig i
    * @param i Genstanden, som den besøgende samler op
    */
    public void pickUp(Item i)
    {
        if (getLocation().itemExists() == true)
        {
            getLocation().chooseItem();
            Item thisi = getLocation().chooseItem();           
            items.add(thisi);
            System.out.println( name + " just picked up a " + thisi + " from " + getLocation() );
            getLocation().removeItem(i);
        }
           
    }
   
    /**
    * gets Item i in Visitors items ArrayList in this case
    * @ param Item i
    */
    public Item getItem()
    {
        Random rnd = new Random();
        int rndInt = rnd.nextInt(items.size());
        return (Item) items.get(rndInt);
    }
   
    /**
    * Vistitor leaves Item i in the room he is currently in
    * removes Item i from visitors List items
    * Adds Item i to the room
    * @param i Item the visitor leaves
    */
    public void dropItem(Item i)
    {
        items.remove(i);       
        System.out.println( name + " has just dropped a " + i + " in " + getLocation());       
        location.addItem(i);     
    }
   
    /**
    * returns string with information on Visitor
    * name, location and items
    */
    public String toString()
    {
        return ("Name: " + name + "  Location: " + getLocation() + "  Items: " + items.toString());
    }
}

og

/**
* Item modellerer genstande, der kan
* ligge i rum og samles op af besøgende.
  */
public class Item
{
    private String name;

    /**
    * Kontruktør for et Item
    * @param name Navnet på genstanden
    */
    public Item(String name)
    {
        this.name = name;
    }

    /**
    * Returnerer navnet på genstanden
    * @return Navnet på genstanden
    */
    public String getName()
    {
        return name;
    }
   
    /**
    * returns toString
    */
    public String toString()
    {
        return name;
    }
}


Mit spørgsmål er, hvordan laver jeg en metode i Visitor klassen, som tillader en visitor til at samle et bestemt objekt op (i stedet for et tilfældigt objekt).
For det andet vil jeg lave en metode til at finde ud af, om et objekt overhovedet befinder sig i Arraylisten
Tak på forhånden
Romina
Avatar billede arne_v Ekspert
18. maj 2005 - 18:47 #1
det sidste er nemt: ArrayList har en contains metode !
Avatar billede arne_v Ekspert
18. maj 2005 - 18:48 #2
det første er svært at svare på: fordi det er jo et spørgsmål om logikken i dit
program
Avatar billede snoop_one Nybegynder
18. maj 2005 - 23:07 #3
"Mit spørgsmål er, hvordan laver jeg en metode i Visitor klassen, som tillader en visitor til at samle et bestemt objekt op (i stedet for et tilfældigt objekt)."

Vil give arne_v ret i, at det kommer an på dit program logik. Det kommer meget an på hvilke karakteristika dine items har - hvordan identificeres objektet? Hvad afgøre om to Item objekter er ens? Er det navnet på dem?

Item lommelygte1 = new Item("Lommelygte");
Item lommelygte2 = new Item("Lommelygte");

Vil det så sige at, lommelygte1 og lommelygte2 er det samme item?
Hvis ja, så samler du jo dem op der hedder Lommelygte.
Hvis nej, så skal du have en reference til objektet - som du så checker for "equality".


"For det andet vil jeg lave en metode til at finde ud af, om et objekt overhovedet befinder sig i Arraylisten"

Det gør sig igen gældende her! Hvornår er to objekter ens i din applikation?
Avatar billede romina Nybegynder
19. maj 2005 - 17:23 #4
Tak til jer begge to, men kan I ikke fortælle mig, hvordan man implementerer det.
I virkeligheden skal jeg komme med et forlag til udvidelse af overnævnte klasser, og selv finde på nogle metoder og implementere dem. Jeg fandt på metoden med at kunne samle på bestemt objekt op med, og metoden til at finde ud af, om et objekt overhovedet befinder sig i Arraylisten.
Men jeg kunne ikke finde ud af at implementerer dem, derfor oprettede jeg et spørgsmål i Eksperten. Men de ser ud til at svær at implementere. Har I et bedre forslag til en metode, som ikke er så svær at implementere. I skal også vide,at jeg ikke er go til at programmere.
Tak på forhånden
Romina
Avatar billede arne_v Ekspert
19. maj 2005 - 21:09 #5
det er som sagt meget nemt at teste om et objekt befinder sig i ArrayList'en
(jeg forudsætter at de objekter der er deri har en fornuftigt equals metode)

men generelt er det svært bare at lave noget kode uden at vide præcis hvad den skal
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