Fehlermeldung < Java < Programmiersprachen < Praxis < Informatik < Vorhilfe
|
Status: |
(Frage) beantwortet | Datum: | 10:25 Fr 18.11.2011 | Autor: | mikexx |
Aufgabe | Bekomme, wenn ich mein Programm ausführen will, folgende Fehlermeldung:
"Could not find the main class."
Was kann ich machen? |
Hallo, ich bin Neuling und habe leider keine Idee, was ich falsch gemacht habe.
|
|
|
|
Status: |
(Antwort) fertig | Datum: | 10:39 Fr 18.11.2011 | Autor: | Stoecki |
hallo,
wie der fehler sagt, fehlt eine main-methode. also sowas wie
public static void main(){...}
diese methode ist der start eines jeden programms. wenn du code probleme hast, solltest du in zukunft immer code-beispiele mit posten. andernfalls kann es schwer bis unmöglich sein zu sagen, was falsch ist.
gruß bernhard
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 10:40 Fr 18.11.2011 | Autor: | mikexx |
Also daran kann es nicht liegen!
Denn die main-Methode ist schon vorhanden...
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 10:43 Fr 18.11.2011 | Autor: | Stoecki |
poste bitte ein code-beispiel. sonst wird man dir wahrscheinlich nicht helfen können
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 10:45 Fr 18.11.2011 | Autor: | mikexx |
Also dies ist eine Klasse, die die Methoden einer anderen Klasse (Uebung2) testen soll und hier ist die main-methode eigentlich ja enthalten!
class Uebung2Test {
public static void tassert1(String aStr, boolean y, Uebung2 b0, Uebung2 b1){
if(y) {
System.out.println("PASS: " + aStr);
} else {
System.out.println("FAIL: " + aStr);
}
}
public static void main(String[] args){
Uebung2 b0=new Uebung2();
Uebung2 b1=new Uebung2();
tassert1("z.theDoWhileMethod(5)", b0.theDoWhileMethod(5)==b1.aForMethod(5), b0, b1);
tassert1("w.testWhile(3,7)", b0.testWhile(3,7)==b1.ifelseAnw(3,7),b0,b1);
tassert1("m.performActionSwitch(5)", b0.performActionSwitch('a')==b1.performActionBranch('a'),b0,b1);
tassert1("g.getWithWhile(5)", b0.getWithWhile(5)==b1.getWithDoWhile(5),b0,b1);
tassert1("h.crucialFunction001(-200,50)", b0.crucialFunction001(-200,50)==true,b0,b1);
}
}
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:05 Fr 18.11.2011 | Autor: | Stoecki |
nimm die main mal aus der class raus. ich meine in java muss die main klassenunabhängig sein, wobei mein java auch schon 5 jahre her ist:
class Uebung2Test {
public static void tassert1(String aStr, boolean y, Uebung2 b0, Uebung2 b1){
if(y) {
System.out.println("PASS: " + aStr);
} else {
System.out.println("FAIL: " + aStr);
}
}
}
public static void main(String[] args){
Uebung2 b0=new Uebung2();
Uebung2 b1=new Uebung2();
tassert1("z.theDoWhileMethod(5)", b0.theDoWhileMethod(5)==b1.aForMethod(5), b0, b1);
tassert1("w.testWhile(3,7)", b0.testWhile(3,7)==b1.ifelseAnw(3,7),b0,b1);
tassert1("m.performActionSwitch(5)", b0.performActionSwitch('a')==b1.performActionBranch('a'),b0,b1);
tassert1("g.getWithWhile(5)", b0.getWithWhile(5)==b1.getWithDoWhile(5),b0,b1);
tassert1("h.crucialFunction001(-200,50)", b0.crucialFunction001(-200,50)==true,b0,b1);
}
gruß bernhard
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 11:13 Fr 18.11.2011 | Autor: | mikexx |
Hm, das stimmt (glaube ich!) nicht, denn wir hatten beim ersten Übungsblatt Folgendes vorgegeben:
class Uebung1 {
public static void tassert(String aStr, boolean a, MyBitSet b0, MyBitSet b1) {
if ( a ) {
System.out.println("PASS: " + aStr);
}
else {
System.out.println("FAIL: " + aStr);
System.out.println("b0: " + b0.toString());
System.out.println("b1: " + b1.toString());
}
}
/**
* Methode zum Test der eigentlich zu entwickelnden Klasse
*/
public static void main(String[] args) {
MyBitSet b0 = new MyBitSet();
MyBitSet b1 = new MyBitSet();
tassert("b0.empty()",b0.empty(),b0,b1);
tassert("b0.card() == 0",b0.card() == 0,b0,b1);
b0.insert(31);
tassert("b0.elem(31)",b0.hasElem(31),b0,b1);
b1.insert(0);
b1.insert(10);
b1.insert(320);
b1.insert(31);
b1.insert(20);
b1.insert(17);
b1.insert(19);
b1.insert(3);
tassert("b1.card() == 7", b1.card() == 7, b0, b1);
b0.setMinus(b1);
tassert("b0.empty()",b0.empty(),b0,b1);
b0.insert(31);
b0.insert(17);
b0.insert(23);
b0.insert(1);
b0.setMinus(b1);
tassert("!b0.empty()",!b0.empty(),b0,b1);
tassert("b0.toString() equals { 1, 23 }",b0.toString().equals("{ 1, 23 }"),b0,b1);
}
}
Da steht die main-Methode ja auch IN der Klasse, oder?
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 11:35 Fr 18.11.2011 | Autor: | mikexx |
Ich habe mal eine Seite gefunden:
http://download.oracle.com/javase/tutorial/getStarted/problems/
Und da bei Runtime Errors wird glaube ich mein Problem geschildert.
Wer kann helfen, es bei mir zu verbessern (alleine trau ich mich nicht so richtig, hab Angst, alles zu verstellen )?
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:41 Fr 18.11.2011 | Autor: | Stoecki |
hab dazu eine reinstall anleitung gefunden. schau mal hier
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 11:45 Fr 18.11.2011 | Autor: | mikexx |
muss ich das echt alles neu installieren?
und wenn danach nix mehr geht??
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 11:57 Fr 18.11.2011 | Autor: | mikexx |
Die genaue Fehlermeldung lautet:
java.lang.NoClassDefFoundError: Uebung2$Uebung2Test
Caused by: java.lang.ClassNotFoundException: Uebung2$Uebung2Test
at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
Exception in thread "main"
|
|
|
|
|
Hallo mikexx,
> Die genaue Fehlermeldung lautet:
>
> java.lang.NoClassDefFoundError: Uebung2$Uebung2Test
> Caused by: java.lang.ClassNotFoundException:
> Uebung2$Uebung2Test
> at
> java.net.URLClassLoader$1.run(URLClassLoader.java:202)
> at java.security.AccessController.doPrivileged(Native
> Method)
> at
> java.net.URLClassLoader.findClass(URLClassLoader.java:190)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
> at
> sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
> at java.lang.ClassLoader.loadClass(ClassLoader.java:247)
> Exception in thread "main"
Ist das Programm "Uebung2.java" erfolgreich compiliert (übersetzt)
worden, dann stellt sich die Frage, wie das Programm aufgerufen
worden ist.
Eine Fehlerquelle ist , wenn das Programm so aufgerufen wird:
java Uebung2.class
Gruss
MathePower
|
|
|
|
|
Hallo mikexx,
> Ich habe mal eine Seite gefunden:
>
> http://download.oracle.com/javase/tutorial/getStarted/problems/
>
> Und da bei Runtime Errors wird glaube ich mein Problem
> geschildert.
>
> Wer kann helfen, es bei mir zu verbessern (alleine trau ich
> mich nicht so richtig, hab Angst, alles zu verstellen )?
Dann poste ob das Programm erfolgreich mit javac compiliert (übersetzt)
wurde und wie das Compilat dann ausgeführt wurde (java)
Compiliert wird die Datei mit der Endung java
Es entsteht eine Datei gleichen Namens mit der Endung class.
Diese wird dann mit "java Dateiname" ausgeführt.
Gruss
MathePower
|
|
|
|
|
Hallo mikexx,
> Hm, das stimmt (glaube ich!) nicht, denn wir hatten beim
> ersten Übungsblatt Folgendes vorgegeben:
>
>
> class Uebung1 {
>
> public static void tassert(String aStr, boolean a, MyBitSet
> b0, MyBitSet b1) {
>
> if ( a ) {
> System.out.println("PASS: " + aStr);
> }
> else {
> System.out.println("FAIL: " + aStr);
> System.out.println("b0: " + b0.toString());
> System.out.println("b1: " + b1.toString());
> }
>
> }
>
>
> /**
> * Methode zum Test der eigentlich zu entwickelnden
> Klasse
> */
> public static void main(String[] args) {
>
> MyBitSet b0 = new MyBitSet();
> MyBitSet b1 = new MyBitSet();
>
> tassert("b0.empty()",b0.empty(),b0,b1);
> tassert("b0.card() == 0",b0.card() == 0,b0,b1);
>
>
>
> b0.insert(31);
> tassert("b0.elem(31)",b0.hasElem(31),b0,b1);
>
> b1.insert(0);
> b1.insert(10);
> b1.insert(320);
> b1.insert(31);
> b1.insert(20);
> b1.insert(17);
> b1.insert(19);
> b1.insert(3);
>
> tassert("b1.card() == 7", b1.card() == 7, b0, b1);
>
>
> b0.setMinus(b1);
> tassert("b0.empty()",b0.empty(),b0,b1);
>
> b0.insert(31);
> b0.insert(17);
> b0.insert(23);
> b0.insert(1);
> b0.setMinus(b1);
> tassert("!b0.empty()",!b0.empty(),b0,b1);
> tassert("b0.toString() equals { 1, 23
> }",b0.toString().equals("{ 1, 23 }"),b0,b1);
>
>
>
> }
>
> }
>
>
> Da steht die main-Methode ja auch IN der Klasse, oder?
Ja, das ist schon richtig.
Gruss
MathePower
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 13:22 Fr 18.11.2011 | Autor: | mikexx |
Es hat sich soweit geklärt.
Aber ich habe noch eine andere Frage.
Und zwar wird überall PASS angezeigt, nur bei diesem hier nicht:
tassert1("b0.testWhile(3,7)", b0.testWhile(3,7)==b1.ifelseAnw(3,7),b0,b1);
Das he0t, daß
b0.testWhile(3,7)==b1.ifelseAnw(3,7)
nicht stimmen wird.
Die dazugehörigen Methoden sind (das ist ein von mir selbst ausgedachtes Beispiel:)
public int doIf(int a, int b){
a=a+b;
return a;
}
public int doElse(int a, int b){
a=a*b;
return a;
}
public int testWhile(int a, int b){
while(a>b){
a=doIf(a,b);
break;
}
while(a<=b){
a=doElse(a,b);
break;
}
return a;
}
public int ifelseAnw(int a, int b){
if (a>b){
doIf(a,b);
} else {
doElse(a,b);
}
return a;
}
Ich sehe nicht, wo der Fehler ist, sodaß UNGLEICH, also false herauskommt. Wenn ich beide Methoden mit der Eingabe 3 und 7 durchgehe, kommt für mich 21 heraus.
|
|
|
|
|
Hallo mikexx,
> Es hat sich soweit geklärt.
>
> Aber ich habe noch eine andere Frage.
>
>
> Und zwar wird überall PASS angezeigt, nur bei diesem hier
> nicht:
>
> tassert1("b0.testWhile(3,7)",
> b0.testWhile(3,7)==b1.ifelseAnw(3,7),b0,b1);
>
>
> Das he0t, daß
>
> b0.testWhile(3,7)==b1.ifelseAnw(3,7)
>
> nicht stimmen wird.
>
>
> Die dazugehörigen Methoden sind (das ist ein von mir
> selbst ausgedachtes Beispiel:)
>
> public int doIf(int a, int b){
> a=a+b;
> return a;
>
>
> }
>
> public int doElse(int a, int b){
> a=a*b;
> return a;
> }
>
> public int testWhile(int a, int b){
>
>
> while(a>b){
> a=doIf(a,b);
> break;
> }
> while(a<=b){
> a=doElse(a,b);
> break;
> }
>
> return a;
>
> }
>
> public int ifelseAnw(int a, int b){
> if (a>b){
> doIf(a,b);
Schreibe hier: "a=doIf(a,b);"
> } else {
> doElse(a,b);
Ebenso hier: "a=doElse(a.,b);"
> }
> return a;
> }
>
>
>
> Ich sehe nicht, wo der Fehler ist, sodaß UNGLEICH, also
> false herauskommt. Wenn ich beide Methoden mit der Eingabe
> 3 und 7 durchgehe, kommt für mich 21 heraus.
In der Methode ifelseAnw werden die Methoden doIf bzw. doElse
aufgerufen. Dies geben einen Wert zurück. Dies ist in der
aufrufenden Methode jedoch nicht berücksichtigt.
Gruss
MathePower
|
|
|
|
|
Status: |
(Mitteilung) Reaktion unnötig | Datum: | 13:56 Fr 18.11.2011 | Autor: | mikexx |
Danke und nochmal danke!
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 18:48 Fr 18.11.2011 | Autor: | mikexx |
Aufgabe | Mal eine ganz allgemeine Frage...
Wenn am Ende einer Methode return steht.. (zum Beispiel wird eine Integer-Zahl zurückgegeben): An was oder wen wird diese Zahl zurückgegeben? |
Als Beispiel würde mir einfallen:
Am Beginn der Klasse hat man zum Beispiel
int i;
deklariert.
Dann könnte man zum Beispiel
i=a setzen (wenn die Methode a zurückgibt).
Aber was ist, wenn eine Klasse nur aus Methoden besteht... an wen oder was wird da der return-Wert eigentlich zurückgegeben?
Wieso kann man zum Beispiel die obigen Methoden vergleichen? Okay bei beiden steht return a und man kann schauen, ob das return a identisch ist... aber wie funtioniert der Vergleich eigentlich:
Die eine Methode gibt zum Beispiel 5 zurück und die zweite Methode auch... wenn da return a im Methodenrumpf steht wird die Schleife doch verlassen.. und was wird da dann eigentlich verglichen??
|
|
|
|
|
Hallo mikexx,
> Mal eine ganz allgemeine Frage...
>
> Wenn am Ende einer Methode return steht.. (zum Beispiel
> wird eine Integer-Zahl zurückgegeben): An was oder wen
> wird diese Zahl zurückgegeben?
> Als Beispiel würde mir einfallen:
>
> Am Beginn der Klasse hat man zum Beispiel
>
> int i;
>
> deklariert.
>
> Dann könnte man zum Beispiel
>
> i=a setzen (wenn die Methode a zurückgibt).
>
>
>
> Aber was ist, wenn eine Klasse nur aus Methoden besteht...
> an wen oder was wird da der return-Wert eigentlich
> zurückgegeben?
>
Der return-Wert wird an die aufrufende Methode
zur Weiterverarbeitung zurückgegeben.
> Wieso kann man zum Beispiel die obigen Methoden
> vergleichen? Okay bei beiden steht return a und man kann
> schauen, ob das return a identisch ist... aber wie
> funtioniert der Vergleich eigentlich:
>
> Die eine Methode gibt zum Beispiel 5 zurück und die zweite
> Methode auch... wenn da return a im Methodenrumpf steht
> wird die Schleife doch verlassen.. und was wird da dann
> eigentlich verglichen??
Die Rückgabewerte der beiden Methoden können
miteinander verglichen werden, da diese Methoden
den selben Rückgabetyp (hier: int) haben.
Gruss
MathePower
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 19:08 Fr 18.11.2011 | Autor: | mikexx |
Das heißt:
Der Aufrufer wäre hier z.b.
b1.ifelseAnw(5,6), da kommt hier 30 heraus, das bedeutet, daß dann der Wert 30 an wen zurückgegeben wird?
|
|
|
|
|
Hallo mikexx,
> Das heißt:
>
> Der Aufrufer wäre hier z.b.
>
> b1.ifelseAnw(5,6), da kommt hier 30 heraus, das bedeutet,
> daß dann der Wert 30 an wen zurückgegeben wird?
Ja.
Gruss
MathePower
|
|
|
|
|
Status: |
(Frage) beantwortet | Datum: | 19:25 Fr 18.11.2011 | Autor: | mikexx |
Ja?
Ich hatte doch gefragt, an wen dann 30 zurückgegeben wird..:D
Da ist JA keine Antwort. :D
An ifelseAnw(5,6) also quasi wird der Wert zwischengeparkt dort? Und man KÖNNTE damit eine neue int-Variable initialisieren MUSS man aber nicht, dann parkt er da eben??
Oder an b1.ifelseAnw(5,6)?
(das mit dem Punkt bezeichnet nur, das die Methode an ein Objekt gebunden ist, oder? also Korrekt müsste man sagen:
Der Wert 30 wird an die Methode ifelseAnw(5,6) des Objekts b1 der Klasse Uebung2 zurückgegeben?
|
|
|
|
|
Hallo mikexx,
> Ja?
>
> Ich hatte doch gefragt, an wen dann 30 zurückgegeben
> wird..:D
>
> Da ist JA keine Antwort. :D
>
> An ifelseAnw(5,6) also quasi wird der Wert zwischengeparkt
> dort? Und man KÖNNTE damit eine neue int-Variable
> initialisieren MUSS man aber nicht, dann parkt er da
> eben??
>
So kannst Du das auch sehen.
>
> Oder an b1.ifelseAnw(5,6)?
>
> (das mit dem Punkt bezeichnet nur, das die Methode an ein
> Objekt gebunden ist, oder? also Korrekt müsste man sagen:
>
> Der Wert 30 wird an die Methode ifelseAnw(5,6) des Objekts
> b1 der Klasse Uebung2 zurückgegeben?
>
Nein.
Korrekt ist; die Methode b1.ifelseAnw(5,6) liefert einen Wert zurück,
der weiterverarbeitet werden kann, wie z.B. durch einen Vergleich.
Gruss
MathePower
|
|
|
|