Avatar billede iceyblue Nybegynder
19. august 2002 - 10:33 Der er 13 kommentarer og
1 løsning

Simpel aftalebog i JAVA!!

Hej,
kan nogen finde ud af hvorfor jeg får denne fejl: ArrayOptions@7182c1, når jeg køre dette lille program??
Det består af 3 java-filer: AftaleMain.java, ArrayOptions.java og Aftale.java


public class AftaleMain
{
  public static void main (String[] args)
  {
      ArrayOptions aftale = new ArrayOptions ();

      aftale.nyAftale (34, 24,"bla bla..sdfgdsfgdf");
      System.out.println (aftale);

  }
}

---------------------------------------------------

public class ArrayOptions
{
  private Aftale[] liste;
  private int count;
 
  public ArrayOptions ()
  {
      liste = new Aftale[10];
      count = 0;
  }

  public void nyAftale (int dato, int tid, String tekst)
  {
  }
}

---------------------------------------------------

public class Aftale
{
  private int dato;
  private int tid;
  private String tekst;
 
  public Aftale (int d, int ti, String t)
  {
      dato = d;
      tid = ti;
      tekst = t;
  }
   
    public int getdato()
    {
        return dato;
    }
       
    public int gettid()
    {
        return tid;
    }
   
    public String gettekst()
    {
        return tekst;
    }
       
    public String toString ()
    {
        return (dato + "\t" + tid + "\t" + tekst);
    }
}
Avatar billede warberg22 Nybegynder
19. august 2002 - 10:57 #1
Jamen, du beder den om at printe en klasse, og det kan System.out.print ikke...
Avatar billede Slettet bruger
19. august 2002 - 10:57 #2
Det er ingen fejl. Den skriver dit ArrayOptions objekt ud.
Prøv at lave en toString() på ArrayOptions også
Avatar billede disky Nybegynder
19. august 2002 - 11:11 #3
Det er skam ingen fejl det er 100% korrekt opførsel fra java's side.

Alle klasser arver oprindeligt fra Object klassen som har en default .toString() metode.

Denne metode returnerer typen og memory adresse, derfor den lidt sjove værdi du får.

I din aftale klasse laver du en:

public String toString()
{
StringBuffer text=new StringBuffer();
text.append(dato);
text.append("\n");
text.append(tid);
text.append("\n");
text.append(tekst);
text.append("\n");
return text.toString();
}

Så skulle det virke, tilpas toString() til dine ønsker.
Avatar billede carstenknudsen Nybegynder
19. august 2002 - 11:46 #4
Lille kommentar: Det er ikke adressen der kommer ud, det
er hashkoden vist med hexadecimale cifre.
Avatar billede disky Nybegynder
19. august 2002 - 12:44 #5
Det har du jo helt ret i.

Men hvad pokker man kan ikke forlange vi skal kunne huske alt før middag :))
Avatar billede iceyblue Nybegynder
19. august 2002 - 13:59 #6
Ok!!
Jeg har nu ændret filen aftale.java til:

public class Aftale
{
  private int dato;
  private int tid;
  private String tekst;
 
  public Aftale (int d, int ti, String t)
  {
      dato = d;
      tid = ti;
      tekst = t;
  }
   
    public int getdato()
    {
        return dato;
    }
       
    public int gettid()
    {
        return tid;
    }
   
    public String gettekst()
    {
        return tekst;
    }
       

    public String toString()
    {
        StringBuffer text = new StringBuffer();
        text.append(dato);
        text.append("\n");
        text.append(tid);
        text.append("\n");
        text.append(tekst);
        text.append("\n");
        return text.toString();
      }
}

------------------------------------------------------------

Jeg få nøjagtig samme fejl :(

Bør man overhøvedet lave en toString, hvis man bare skal teste om det kommer ud på skærmen?? Hvorfor skal jeg lave en toString i ArrayOptions, og hvordan skulle den evt. se ud??

Kan nogen gennemskue fejlen?? Ellers tak for hurtigt svar :)
Avatar billede Slettet bruger
19. august 2002 - 14:01 #7
Du skal lave en toString på ArrayOptions! Det er jo den, du skriver ud!
Avatar billede disky Nybegynder
19. august 2002 - 14:04 #8
korrekt

flyt den toString() over i den anden klasse.

Jeg overså lige du havde lavet et upraktisk valg af objekt navn,
Du har en klasse der hedder Aftale, og et objekt af en helt anden type der hedder 'aftale'.
Avatar billede iceyblue Nybegynder
19. august 2002 - 15:34 #9
Ok! Er desværre ikke så rap til JAVA!! ;)
Hvordan får jeg så lige fortalt, at dato osv. ligger i Aftale.java??

Jeg får følgende fejl:

ArrayOptions.java:19: cannot resolve symbol
symbol  : variable dato 
location: class ArrayOptions
    text.append(dato);
                    ^
ArrayOptions.java:21: cannot resolve symbol
symbol  : variable tid 
location: class ArrayOptions
    text.append(tid);
                    ^
ArrayOptions.java:23: cannot resolve symbol
symbol  : variable tekst 
location: class ArrayOptions
    text.append(tekst);
                    ^
3 errors
---------------------------------------------------------------

Her er min nuværende ArrayOptions.java:

public class ArrayOptions
{
  private Aftale[] liste;
  private int count;
 
  public ArrayOptions ()
  {
      liste = new Aftale[10];
      count = 0;
  }

  public void nyAftale (int dato, int tid, String tekst)
  {
  }
 
  public String toString()
  {
    StringBuffer text=new StringBuffer();
    text.append(dato);
    text.append("\n");
    text.append(tid);
    text.append("\n");
    text.append(tekst);
    text.append("\n");
    return text.toString();
  }
}
Avatar billede disky Nybegynder
19. august 2002 - 15:44 #10
jeg ville omskrive det hele og lave følgende klasser:

1 en main klasse som starter dit program
En klasse med get/set metoder til at hente f.eks. dato,tid og tekst.
En klasse der håntere dine aftaler som så er gemt som objekter i en ArrayList, der er dynamisk i modsætning til dit array.

Når du så vil lave en ny aftale kalder du din håndteringsklasse f.eks. via
aftaler.nyAftale("22/09/2002","17:35","Lav lektier");

Den opretter så et nyt objekt som bliver gemt i listen af aftaler.

Når du så vil hente en aftale ud gør du det f.eks. via:

aftaler.hentAftale("27/09/2002")

Den returnerer så f.eks. alle aftaler den 27 september 2002, så finder du den rigtige aftale og den returnerer så et objekt af den type hvor data er inden i, på det objekt kalder du så .toString()

Håber det er forståeligt :)
Avatar billede Slettet bruger
19. august 2002 - 15:44 #11
public class ArrayOptions {
....
public String toStrin() {
StringBuffer text = new StringBuffer();
for (int i=0; i<liste.length; i++) {
  text.append(liste[i]);
  text.append('\n');
}
return text.toString();
}
...
}
Avatar billede emileej Nybegynder
22. august 2002 - 10:13 #12
Hvorfor bruge StringBuffer?

public String toStrin() {
  String theString="";
  for(int i=0; i<liste.length; i++) {
    if(i>0)theString+='\n';
    theString+=liste[i];
  }
  return theString;
}

E-)mil
http://mfp.eej.dk
Avatar billede emileej Nybegynder
22. august 2002 - 10:13 #13
Upz! Der skulle selvfølgeligt have stået: toString(){ ...
Avatar billede iceyblue Nybegynder
18. januar 2003 - 19:09 #14
Ups... sorry jeg glemte vist lige at vende tilbage på denne her!
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