Avatar billede skurggman Nybegynder
18. september 2003 - 21:03 Der er 30 kommentarer og
1 løsning

System.out.println metoden?

Hej

Jeg har et lille problem med en system.out.println...

Når jeg kører den, skriver den item værdien for den sidste jeg har indsat og hvis jeg prøver at indsætte min (Item i) siger den en grum fejl...

    public void removeItem(Item i)
    {
        System.out.println(Item.value() + " has been  removed from " + (String) getName());
        items.remove(i);
    }

Det jeg gerne ville var at hente mit navn for mit Item, men hvis jeg gør sådan her:

    public void removeItem(Item i)
    {
        System.out.println(Item.value(i) + " has been removed from " + (String) getName());
        items.remove(i);
    }

Kan den ikke compiles... :(

/Kim
Avatar billede medions Nybegynder
18. september 2003 - 21:05 #1
Prøv sådan her:

  public void removeItem(Item i)
    {
        System.out.println(Item.value(i) + " has been removed from " + getName().toString());
        items.remove(i);
    }

//>Rune
Avatar billede skurggman Nybegynder
18. september 2003 - 21:05 #2
Jeg bør måske sige at mit Item kommer fra en ArrayList, så hvis jeg kan hente navnet på itemmet derigennem, er det fint.... men items.get(i) virker ikke :(
Avatar billede skurggman Nybegynder
18. september 2003 - 21:09 #3
Det er ikke getName funktionen der er et problem... det er Item.value(i)
Resten virker fint...

Jeg forstår bare ikke, for nu fik jeg endelig min (i) ind og stadig retunere den, den sidst indsatte...
Avatar billede skurggman Nybegynder
18. september 2003 - 21:09 #4
Her er Item klassen:

public class Item {

    private static String value;

    public Item(String value) {
        this.value = value;
    }

    public static String value(Item i) {
        return value;
    }
   
    public String toString()
    {
        return value;
    }
}
Avatar billede arne_v Ekspert
18. september 2003 - 21:12 #5
Prøv med:

public void removeItem(Item i)
    {
        System.out.println(items.remove(i) + " has been removed from " + getName());
    }
Avatar billede arne_v Ekspert
18. september 2003 - 21:13 #6
Eller:

public void removeItem(Item i)
    {
        items.remove(i);
        System.out.println(i + " has been removed from " + getName());
    }
Avatar billede erikjacobsen Ekspert
18. september 2003 - 21:14 #7
ystem.out.println(i + " has been removed from " + getName());
Avatar billede erikjacobsen Ekspert
18. september 2003 - 21:19 #8
Jeg forstår nu heller ikke helt din klasse. Mener du ikke:

public class Item {

    private String value;

    public Item(String value) {
        this.value = value;
    }

    public String value(Item i) {
        return value;
    }
 
    public String toString()
    {
        return value;
    }
}
Avatar billede erikjacobsen Ekspert
18. september 2003 - 21:20 #9
og
    public String value(Item i) {
skal jo bare være
    public String value() {
Avatar billede skurggman Nybegynder
18. september 2003 - 21:24 #10
Fejlen ligger faktisk i når jeg opretter et nyt Item, så får alle mine items den sidst indtastede værdi... og det fatter jeg slet ikke en pind af...

Det vil sige fejlen ligger her et sted:

public class Item {

    private static String value;
   
    public Item(String value) {
        this.value = value;
    }

    public static String value(Item i) {
        return value;
    }
   
    public String toString()
    {
        return value;
    }
}
Avatar billede skurggman Nybegynder
18. september 2003 - 21:26 #11
Ja, Erik men så kan jeg vel ikke tilføje en parameter når jeg kalder metoden fra en anden klasse... Desuden ser det ikke ud som om det gør nogen forskel i Item klassen...

Jeg har jo behov for at kunne retunere et bestemt object fra Item...
Avatar billede erikjacobsen Ekspert
18. september 2003 - 21:28 #12
Jeg synes du skal prøve at forstå mit forslag :)
Avatar billede arne_v Ekspert
18. september 2003 - 21:28 #13
Din Item klasse indeholder kun 1 af hvad det nu er.
Avatar billede arne_v Ekspert
18. september 2003 - 21:30 #14
Prøv og ændre:

private static String value;

til:

private String value;

som Erik foreslår.
Avatar billede skurggman Nybegynder
18. september 2003 - 21:30 #15
Erik --> Det er lidt lige meget for alle mine Items objecter får samme navn(String)... Så lige meget hvordan jeg retunere dem skriver den jo selvfølgelig det samme...

Og jeg har prøvet at ændre på public String value()... det ændrer ikke ved at alle items får samme navn... underligt nok.
Avatar billede skurggman Nybegynder
18. september 2003 - 21:33 #16
Tak Arne V! Fantastisk svar... og det var løsningen...
Jeg kunne fandme ikke se skoven for bare træer, jeg har fået en dårlig vane med at lave mine metoder static...det skal jeg satme lade være med.
Avatar billede arne_v Ekspert
18. september 2003 - 21:37 #17
Nu var det faktisk eriks forslag - jeg var bare lidt mere eksplicit
med hensyn til hvad forskellen var.
Avatar billede arne_v Ekspert
18. september 2003 - 21:38 #18
Det er ret bigtigt om du bruger static eller ej der.

static = en værdi som er fælles for alle objekter af typen
ikke static = en værdi for hver objekt af typen
Avatar billede erikjacobsen Ekspert
18. september 2003 - 21:40 #19
Det er ikke nogen kritik af dig Arne, men jeg kan bare så godt lide at
prøve at få spørgeren til selv at "se lyset". Det sker en gang imellem, at
man kan "se" resultatet af de små grå cellers arbejde i den anden ende.

Men nu er jeg også miljøskadet som handelsskolelærer ;))
Avatar billede skurggman Nybegynder
18. september 2003 - 22:04 #20
Smider du et svar Arne? :-)
Avatar billede arne_v Ekspert
18. september 2003 - 22:08 #21
Det kan jeg godt, men er det ikke snarere Erik der burde have point ?
Avatar billede skurggman Nybegynder
18. september 2003 - 22:08 #22
BTW:

Hvorfor kan jeg ikke gøre sådan her fra en anden klasse:


pub.addItem(beer);

Hvor pub er et tilfældigt rum...
Den siger at metoden er non-static, men hvis jeg gør addItem til static tilføjer den jo alle mine items i alle mine rum... hmm
Avatar billede erikjacobsen Ekspert
18. september 2003 - 22:11 #23
Hvad er "pub" - vi kan ikke se det her
Avatar billede skurggman Nybegynder
18. september 2003 - 22:11 #24
import java.util.*;

public class TestDriver
{
    public static void test()
    { 
        Room pub = new Room("pub");
        Room disco = new Room("disco");
       
        pub.connectTo(Direction.SOUTH, disco);
        disco.connectTo(Direction.NORTH, pub);
       
        Item beer = new Item("beer");
        Item softdrink = new Item("softdrink");
        Item wallet = new Item("wallet");
        Item girl = new Item("girl");
        Item budweiser = new Item("budweiser");
       
        pub.addItem(beer);
       
       
        Visitor kim, line;
        kim = new Visitor("Kim", pub);

        kim.move(Direction.NORTH);
        kim.pickUp(kim.location().chooseItem());
    }
}
Avatar billede arne_v Ekspert
18. september 2003 - 22:12 #25
Hvis pub er et objekt så burde det være helt OK at addItem er
non static.

Hvad er fejlen præcis og hvordan ser metoden ud ?
Avatar billede skurggman Nybegynder
18. september 2003 - 22:13 #26
og Room klassen er lige oven over...

Problemet er som sagt at jeg ikke må bruge static her, fordi ikke alle mine items skal under alle Room... hvis i forstår...
Avatar billede skurggman Nybegynder
18. september 2003 - 22:13 #27
public void addItem(Item i)
    {
      items.add(i);
      System.out.println(i + " has been added to " + (String) getName());
    }
Avatar billede arne_v Ekspert
18. september 2003 - 22:16 #28
Hvis addItem og items begge er static så deler alle Room's items.

Hvis addItem og items begge er ikke-static så har hver Room sine items.
Avatar billede erikjacobsen Ekspert
18. september 2003 - 22:17 #29
Du er sikker på det er addItem der giver problemer??
Avatar billede skurggman Nybegynder
18. september 2003 - 22:17 #30
Sjovt nok, så virker det nu... jeg har stadig skrevet:
        pub.addItem(beer);

ingenting er ændret så vidt jeg kan se...
Avatar billede robotten Praktikant
22. september 2003 - 11:07 #31
Godt, at du fik dette problem løst ;)

Kigger du også lige her?:
http://www.eksperten.dk/bruger.phtml?sort=%40&order=asc&catid=0&q=&navn=skurggman&option=22
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