Avatar billede fuke Nybegynder
01. marts 2007 - 20:16 Der er 29 kommentarer

Fejl i klasse..

Hej folkens..

Jeg har lige holdt en lille pause med Java, men fik hurtigt lyst til at komme tilbage igen. :)

Jeg læser 3. Udgave af Objektorienteret programmering i Java af Jacob Nordfalk.

Jeg er nået til kapitel 4, hvor man skal lave noget med en terning, og hvor jeg får en fejl i en klasse, når jeg vil kompilere programmet, og jeg kan ikke lige helt se, hvordan jeg kan rette fejlen.

Her er min kode:

public class BenytTerning {
    public static void main (String[] arg) {
        Terning t;
        t = new Terning();
       
        // Slå nu med terningen indtil vi får en sekser
        boolean sekser = false;
        int antalKast = 0;
       
        while(sekser==false) {
            t.kast();
            antalKast = antalKast + 1;
            System.out.println("kast "+antalKast+": "+t.værdi);
            if (t.værdi == 6) sekser = true;
        }
        System.out.println("Vi slog en 6'er efter "+antalKast+" slag.");
    }
}

Som sagt, så kan jeg ikke lige helt se, hvad det er jeg gør galt, men det håber jeg, at jeg kan få svar på :)

Mvh. FuKe
Avatar billede Slettet bruger
01. marts 2007 - 20:27 #1
Kan du ikke lige tilføje den fejl du får når du kompilere?
Avatar billede fuke Nybegynder
01. marts 2007 - 20:41 #2
Jo da. :)

E:\Java Projekter\BenytTerning\src\BenytTerning\BenytTerning.java:3: cannot find symbol
symbol  : class Terning
location: class BenytTerning
        Terning t;
E:\Java Projekter\BenytTerning\src\BenytTerning\BenytTerning.java:4: cannot find symbol
symbol  : class Terning
location: class BenytTerning
        t = new Terning();
Avatar billede Slettet bruger
01. marts 2007 - 21:03 #3
Du skal sørge for at klassen Terning.java ligger i din classpath.
Avatar billede mikkelbm Nybegynder
01. marts 2007 - 21:41 #4
Må vi prøve at se din Terning klasse?

Det kan enten være at den er placeret i en package som du ikke har importeret. Eller det kan, som jjust næsten har ret i, være at din klasse Terning.class :) ikke er placeret i din classpath.
Avatar billede kalp Novice
01. marts 2007 - 23:44 #5
du har fejl i disse 2

    System.out.println("kast "+antalKast+": "+t.værdi);
            if (t.værdi == 6) sekser = true;

t.værdi må være t.værdi()

medmindre der også findes properties i java nu.
Avatar billede mikkelbm Nybegynder
02. marts 2007 - 07:46 #6
t.værdi kan vel også bare være en public instans variabel... Men ja, det mest naturlige ville være at det laves som metode.
Avatar billede kalp Novice
02. marts 2007 - 08:15 #7
det selvfølgelig rigtig nok, men så kunne det være man skulle overveje at udskifte sin bog med en anden hvis det altså er sådan Jacob Nordfald lære fra sig:)

Det tvivler jeg dog på så vil skyde på det er fejl:)
Avatar billede mikkelbm Nybegynder
02. marts 2007 - 08:34 #8
Det får vi at se, hvis vi på et tidspunkt får lov til at se Terning-klassen.
Avatar billede Slettet bruger
02. marts 2007 - 08:43 #9
Jacob Nordfalks bog ligger åbenbart på nettet:

Her er Terning klassen: http://javabog.dk/OOP/kapitel4.jsp

/** En klasse der beskriver 6-sidede terninger */
public class Terning
{
  /** antallet af øjne på den side på terningen, der vender opad lige nu */
  public int værdi;

  /** konstruktør der opretter en terning */
  public Terning()
  {
    kast(); // kald kast() der sætter værdi til noget fornuftigt
  }

  /** kaster terningen, så den får en anden værdi */
  public void kast()
  {
    // find en tilfældig side
    double tilfældigtTal = Math.random();
    værdi = (int) (tilfældigtTal * 6 + 1);
  }

  /** giver en beskrivelse af terningen som en streng */
  public String toString()
  {
    String svar = ""+værdi;  // værdi som streng, f.eks. "4"
    return svar;
  }
}

Lader til at værdi er public :s

Accessor methods ??
Avatar billede mikkelbm Nybegynder
02. marts 2007 - 08:51 #10
Hvordan compiler du ovenstående?
Avatar billede fuke Nybegynder
02. marts 2007 - 17:23 #11
mikkelbm: Terning.java ligger i mit classpath, ja.
Og man skal vel bruge BenytTerning til at kompilere ovenstående med? :)
Avatar billede mikkelbm Nybegynder
02. marts 2007 - 19:59 #12
Terning.java har som sådan ikke noget at gøre i din classpath. Classpath er det sted JVM/JDK leder efter classes/resources der skal bruges når programmet køres og det samme når der compiles. Det din BenytTerning klasse skal bruge er Terning.class og ikke Terning.java.

Er de to klasser/filer placeret i samme mappe?

Og igen - hvordan compiler du din kode?
Avatar billede fuke Nybegynder
04. marts 2007 - 12:08 #13
mikkelbm: Nåå.. Jeg laver en .class ved at kompilere Terning.java, ikke sandt?

Og jeg bruger Netbeans 5.5 til at kompilere med, men hvis jeg vil kompilere Terning.java i Netbeans, så får jeg intet output, så jeg prøvede i kommando prompt:

Exception in thread "main" java.lang.NoClassDefFoundError: Terning <wrong name: Terning/Terning>
at java.lang.ClassLoader.defineClass1<Native Method>
at java.lang.ClassLoader.defineClass<Unknown Source>
at java.security.SecureClassLoader.defineClass<Unknown Source>
at java.net.URLClassLoader.defineClass<Unknown Source>
at java.net.URLClasserLoader.access$100<Unknown Source>
at java.net.URLClasserLoader$1.run<Unknown Source>
at java.security.AccessController.doPriviliged<Native Method>
at java.net.URLClassLoader.findClass<Unknown Source>
at java.lang.ClassLoader.loadClass<Unknown Source>
at java.
Avatar billede fuke Nybegynder
04. marts 2007 - 12:12 #14
Aah ha.. Så rammer jeg selvfølgelig Send knappen..
Nå.. Jeg skriver den bare igen:



Exception in thread "main" java.lang.NoClassDefFoundError: Terning <wrong name: Terning/Terning>
at java.lang.ClassLoader.defineClass1<Native Method>
at java.lang.ClassLoader.defineClass<Unknown Source>
at java.security.SecureClassLoader.defineClass<Unknown Source>
at java.net.URLClassLoader.defineClass<Unknown Source>
at java.net.URLClasserLoader.access$100<Unknown Source>
at java.net.URLClasserLoader$1.run<Unknown Source>
at java.security.AccessController.doPriviliged<Native Method>
at java.net.URLClassLoader.findClass<Unknown Source>
at java.lang.ClassLoader.loadClass<Unknown Source>
at sun.misc.Launcher$AppClassLoader.loadClass<Unknown Source>
at java.lang.ClassLoader.loadClass<Unknown Source>
at java.lang.ClassLoader.loadClassInternal<Unkown Soruce>


Hvad er det lige jeg gør galt her? :s
Avatar billede mikkelbm Nybegynder
04. marts 2007 - 17:00 #15
Må jeg prøve at se den kommando du compiler med?
Avatar billede fuke Nybegynder
05. marts 2007 - 17:51 #16
ja..
javac Terning.java
...
java Terning

Og så kommer der den dælens lange fejl meddelse der..
Avatar billede mikkelbm Nybegynder
05. marts 2007 - 18:21 #17
Prøv:

javac Terning.java
javac BenytTerning.java
...
java -cp . BenytTerning
Avatar billede fuke Nybegynder
06. marts 2007 - 18:00 #18
Jeg får stadig fejl..

Hvis jeg har mine .java filer til at ligge som NetBeans har lavet dem (Terning - E:\Java Projekter\Terning\src\Terning\Terning.java - BenytTerning - E:\Java Projekter\Terning\src\BenytTerning.java), så får jeg den samme fejl meddelse som før, ved kompileren af BenytTerning.java

Og hvis jeg har begge filer til at ligge i samme mappe, får jeg denne fejl meddelse:
BenytTerning.java:3: cannot access Terning
bad class file: .\Terning.class
class file contains wrong class: Terning.Terning
Please remove or make sure it appears in the correct subdirectory of the classpath.
Terning t;
^

Hvordan skal filerne være placeret i forehold til hinanden, for at det fungerer?
Avatar billede fuke Nybegynder
09. marts 2007 - 19:47 #19
Jeg har lige prøvet at kompilere BenytTerning i Netbeans, da jeg fandt ud af, at jeg har fået lavet en .class fil ved at kompilere i cmd.

Og når jeg kompilerer, får jeg denne fejl:
"bad class file: E:\Java Projekter\Terning\src\Terning.java
file does not contain class Terning
Please remove or make sure it appears in the correct subdirectory of the classpath.
        Terning t;"

Så det må jo betyde, at jeg ikke har klassen 'Terning' i Terning.java
Men hvad skal jeg så gøre, for at få det?

Kildekoden til Terning.java kan ses lidt længere oppe på siden. :)
Avatar billede fuke Nybegynder
09. marts 2007 - 19:48 #20
"Jeg har lige prøvet at kompilere BenytTerning i Netbeans, da jeg fandt ud af, at jeg har fået lavet en .class fil ved at kompilere i cmd."

Der skulle der have stået:
Jeg har lige prøvet at kompilere BenytTerning i Netbeans, da jeg fandt ud af, at jeg har fået lavet en .class fil til Terning.java ved at kompilere den i cmd.
Avatar billede fuke Nybegynder
13. marts 2007 - 14:09 #21
Er der ikke nogen der har en idé om, hvordan jeg kan rette op på min fejl?
Avatar billede jime_boy Nybegynder
19. marts 2007 - 12:41 #22
Jeg havde det samme problem for noget tid siden, og den eneste måde jeg fik løst dette problem på var ved at skrive hele stien til det bibliotek som min java fil lå i.
dvs.

javac -cp c:\"hele stien til mappen" klassensNavn.java

Håber det hjælper dig
Avatar billede fuke Nybegynder
20. marts 2007 - 19:03 #23
Der hjalp ikke rigtigt desværre..

Når jeg skriver det, får jeg denne meddelse: error: cannot read: Projekter\src\BenytTerning.java
1 error


Hvad sker der nu?
Avatar billede jime_boy Nybegynder
22. marts 2007 - 10:52 #24
skriver den ikke mere end det?
Avatar billede fuke Nybegynder
22. marts 2007 - 16:02 #25
Nej. det gør den ikke :)
Avatar billede jime_boy Nybegynder
23. marts 2007 - 16:38 #26
Så tror jeg det er fordi at der er en fejl i din kode... Hvilket udvikling værktøj bruger du?
Avatar billede fuke Nybegynder
23. marts 2007 - 21:49 #27
Jeg har tjekket min kode igennem en del gange nu, og der er ingen fejl i den.

Og jeg har Netbeans 5.5 som jeg for det meste bruger, men det er ikke altid at det vil kompilere korrekt, så når koden ikke fungerer som den skal i Netbeans, bruger jeg J2SE 5.0, og jeg har jo både problemer i Netbeans og i kommando prompt med den kode her?
Avatar billede Slettet bruger
24. marts 2007 - 10:28 #28
Du har selvfølgelig prøvet at lægge BenytTerning.java og Terning.java i samme folder og kompilere med javac *.java ??
Avatar billede fuke Nybegynder
24. marts 2007 - 11:00 #29
Ja, det har jeg prøvet, og BenytTerning.java og Terning.java har altid lagt i samme folder.
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