Avatar billede tebsil Nybegynder
26. september 2004 - 22:54 Der er 23 kommentarer

Hjælp med en opgave.

Her er den klasse jeg ikke kan få til at virke:
import java.util.*;
/**
* Room laver et rum, med forbindelse til andre rum
* - kan indeholde genstande og besøgende.
*/
public class Room
{

//Fields
    private List rooms;
    private ArrayList items;
    private String name;
    private Random randomGenerator=new Random();
   
//Constructor.
    /**
    * rooms is a list of length 4 where
    *  rooms.get(0) refers to the room in direction EAST
    *  rooms.get(1) refers to the room in direction NORTH
    *  rooms.get(2) refers to the room in direction WEST
    *  rooms.get(3) refers to the room in direction SOUTH
    */

    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;
        }
//Method
    public void connectTo(int dir, Room r)
        {rooms.set(dir, r);}
//Method
    public boolean roomExists(int dir) {
        return rooms.get(dir) != null;
    }
//Method
    public Room leadTo(int dir)
        {return (Room)rooms.get(dir);}
//Method
    public void addItem(Item i)
        {items.add(i);}
//Method
    public boolean itemExists()
      {
        if (items.size()>0) {
            return true;
            }
            else {
                return false;
                }
    }
//Method
    public Item chooseItem()
        {int itemsSize = items.size(); 
        int p = randomGenerator.nextInt();
          return (Item) items.get(itemsSize);
        }
//Method
    public void removeItem(Item i)
      {System.out.println(items.remove(i) + " has been removed");}

//Den Nye Metode
    public void roomContains(Item i);
    {if(location.roomContains()== true){
        System.out.println("The Item is in the Room.");
    }}
   
//Method 
    public String toString()
        {return this.name;}
     
}

Den er så i sammenhæng med en Item-klasse og en Visitorklasse.
Avatar billede arne_v Ekspert
26. september 2004 - 22:56 #1
Og fejlen er ?
Avatar billede tebsil Nybegynder
26. september 2004 - 23:14 #2
missing method body or declare abstract.
Ved dette her:

//Den Nye Metode
    public void roomContains(Item i);
    {if(location.roomContains()== true){
        System.out.println("The Item is in the Room.");
    }}
Avatar billede arne_v Ekspert
26. september 2004 - 23:16 #3
Jeg tror ikke at det semikolon skal være der !
Avatar billede tebsil Nybegynder
26. september 2004 - 23:16 #4
Jeg ved godt der ikke er meget metode over den der, men jeg ved faktisk ikke hvordan jeg skal lave en metode, som kan finde ud af om Item er i Room. det må være en Boolean jeg skal lave?
Avatar billede arne_v Ekspert
26. september 2004 - 23:17 #5
public void roomContains(Item i); // <--- det der
Avatar billede tebsil Nybegynder
26. september 2004 - 23:23 #6
ok, det er også der jeg tænkte den fejl lå. Men jeg kan ikke ændre det, da jeg ikke ved til hvad?

Til public boolean roomContains(Item i);?, der laver den også samme fejl...
Avatar billede arne_v Ekspert
26. september 2004 - 23:25 #7
Du skal bare fjerne det semikolon !
Avatar billede tebsil Nybegynder
26. september 2004 - 23:27 #8
Nu kan den så ikke "cannot resolve symbol - variable location"
Avatar billede arne_v Ekspert
26. september 2004 - 23:30 #9
Og det har den jo ret i !

Hvor er location erklæret henne ?
Avatar billede tebsil Nybegynder
26. september 2004 - 23:34 #10
nu skriver den: roomContains(Item) in Room cannot be applied to ()?
Avatar billede arne_v Ekspert
26. september 2004 - 23:36 #11
Hvordan ser koden ud nu ?
Avatar billede tebsil Nybegynder
26. september 2004 - 23:38 #12
import java.util.*;
/**
* Room laver et rum, med forbindelse til andre rum
* - kan indeholde genstande og besøgende.
*/
public class Room
{

//Fields
    private List rooms;
    private ArrayList items;
    private String name;
    private Random randomGenerator=new Random();
    private Room location;

//Constructor.
    /**
    * rooms is a list of length 4 where
    *  rooms.get(0) refers to the room in direction EAST
    *  rooms.get(1) refers to the room in direction NORTH
    *  rooms.get(2) refers to the room in direction WEST
    *  rooms.get(3) refers to the room in direction SOUTH
    */

    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;
    }

//Method
    public void connectTo(int dir, Room r)
        {rooms.set(dir, r);}
//Method
    public boolean roomExists(int dir) {
        return rooms.get(dir) != null;
    }
//Method
    public Room leadTo(int dir)
        {return (Room)rooms.get(dir);}
//Method
    public void addItem(Item i)
        {items.add(i);}
//Method
    public boolean itemExists()
      {
        if (items.size()>0) {
            return true;
            }
            else {
                return false;
                }
    }
//Method
    public Item chooseItem()
        {int itemsSize = items.size(); 
        int p = randomGenerator.nextInt();
          return (Item) items.get(itemsSize);
        }
//Method
    public void removeItem(Item i)
      {System.out.println(items.remove(i) + " has been removed");}

//Den Nye Metode
    public boolean roomContains(Item i)
    {if(location.roomContains()== true){
        System.out.println("The Item is in the Room.");
    }}
//Method 
    public String toString()
        {return this.name;}
     
}
Avatar billede arne_v Ekspert
26. september 2004 - 23:41 #13
location er nu en instand af Room og linien

if(location.roomContains()== true){

kalder roomContains metoden uden argumenter.

En sådan eksisterer ikke.
Avatar billede tebsil Nybegynder
26. september 2004 - 23:47 #14
Nu siger den "Missing return statement"
Avatar billede arne_v Ekspert
26. september 2004 - 23:49 #15
public boolean roomContains(Item i)

siger at metoden vil returnere en boolean.

Derfor skal der være en return statement som returnerer en sådan.
Avatar billede tebsil Nybegynder
26. september 2004 - 23:54 #16
Hvad er galt med det her?
public boolean roomContains(Item i)
    {if(location.roomContains(i)== true)
        return true;}
       
    else (return false;)
}
Avatar billede arne_v Ekspert
26. september 2004 - 23:56 #17
Du mener nok:

public boolean roomContains(Item i) {
    if(location.roomContains(i)== true) {
        return true;
    } else {
        return false;
    }
}
Avatar billede arne_v Ekspert
26. september 2004 - 23:57 #18
Er det iøvrigt ikke en uendelig rekursion ?
Avatar billede tebsil Nybegynder
27. september 2004 - 00:04 #19
Hvad skal jeg gøre ved det?
Avatar billede arne_v Ekspert
27. september 2004 - 00:06 #20
Overveje hvad den metode egentligt skal gøre
Avatar billede tebsil Nybegynder
27. september 2004 - 00:09 #21
Den hænger sammen med den he ri Visitor-klassen.
//Method

  public void pickUp(Item i)
  {
  if (location.roomContains() == true)
      {
      location.removeItem(i);
        {items.add(i);
}
  else
{
  System.out.println("The Item is not in the Room.");
   
  }
}
}
Jeg kan faktisk ikke gennemskue hvad metoden skal gøre..Det er nok også derfor det er så svært.
Avatar billede jakoba Nybegynder
27. september 2004 - 01:51 #22
Du har en metode  'itemExists'  ser kikker sig om i værelset og ser om der er et eller andet.

metoden 'roomContains'  er mere specifik. det vil have et specifikt Item som parameter (fx en hammer) og skal så lede i din liste items og se om der er en hammer der.

Så jeg vil tro det skal være:

public boolean roomContains(Item i) {
    int teller;
    if(location.itemExists()== true) {
        // ok det kan betale sig at kikke listen iigennem
        for ( teller=0; teller<items.size; teller++ ) {
            if ( items.get(teller) = i ) {
                return true;  // fundet i listen
            }
        }
        return false;      // ikke fundet i listen
    }
    else {
        return false;      // listen er tom
    }
}

PS: dine indrykninger er eet rod. prøv at tænke lidt over hvorfor jeg og arne og din lærer og allmulige andre synes de er så vigtige og hvad de skal være der for :-)

mvh JakobA
Avatar billede jakoba Nybegynder
27. september 2004 - 01:54 #23
Ups, jeg brugte enkelt = istedet for dobbelt for at sammenligne
            if ( items.get(teller) == i ) {
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