Java-Newbie braucht Hilfe...
Philipp Grashoff
- java
0 Markus Möller0 Philipp Grashoff0 Markus Möller0 Markus Möller0 Slyh0 Philipp Grashoff0 Slyh
0 Slyh0 Slyh
Hi all,
ich sitze vor einer popligen Aufgabe, die ich in PhP schon längst gelöst haette... es muss halt aber in Java sein, Informatiklehrer sind streng ;)
Also: Ich muss einfach n Array mit 20 Zufallszahlen kreieren und die groeßte rausfinden, also so ziemlich das einfachste, was man sich vorstellen kann... ich blicks trotzdem nicht, ich bekomme immer 2 Fehlermeldungen, bei deren Interpretation ich versage:
Hier der Code:
import java.applet.*;
public class Move extends Applet
{
public void init()
{
setBackground(Color.black);
}
Label inhalt = new Label();
int l = 0;
int args[] = {};
for (int i=0;i<20;i++) {
args[i] = math.random();
if(i>0) {
if(args[i-1] < args[i]) {
l = i;
}
}
}
inhalt.setText("Das Feld" + l + "hat den größten Wert, nämlich" + args[l]);
}
und dazu die beiden Fehlermeldungen:
D:\Programme\jdk\informatik\Move.java:17: illegal start of type
for (int i=0;i<20;i++) {
^
D:\Programme\jdk\informatik\Move.java:26: <identifier> expected
inhalt.setText("Das Feld" + l + "hat den größten Wert, nämlich" + args[l]);
^
Kann mir vielleicht kurz jemand sagen, was der Compiler von mir willß
Thx im Voraus
MFG
Philipp
Hallo!
Falsch:
int args[] = {};
Richtig:
int args[] = new int[0];
oder
int args[] = new int[] {};
Dadurch kommt der Fehler in der for-Anweisung.
Versuch's nochmal. Vielleicht verschwindet der zweite Fehler dann von alleine.
Hi Markus,
vielen Dank fuer die Antwort, leider lags aber nicht daran... ich hab die Array-Deklaration auch mal komplett rausgeschmissen, kamen die gleichen Fehlermeldungen...
MFG
Philipp
Hallo!
Ja, jetzt weiß ich warum:
Die Anweisungen müssen in einer Methode stehen. Bei dir hängen sie ein wenig in der Luft. Einfach so in die Klasse geht nicht.
Also ein
public void run()
drum und nochmal probieren:
import java.applet.*;
public class Move extends Applet
{
public void init()
{
setBackground(Color.black);
}
public void run() {
Label inhalt = new Label();
int l = 0;
int args[] = new int[]{};
for (int i=0;i<20;i++) {
args[i] = math.random();
if(i>0) {
if(args[i-1] < args[i]) {
l = i;
}
}
}
inhalt.setText("Das Feld" + l + "hat den größten Wert, nämlich" + args[l]);
}
}
Und weiter geht's:
math.random gibt's nicht.
Math.random wäre korrekt.
Label kann der Compiler nicht finden, weil du vergessen hast, das Packet java.awt.* zu importieren. Wenn ich das bei mir ändere, wird zumindest anstandslos kompiliert.
Hallo,
Falsch:
int args[] = new int[]{};
Korrekt:
int args[] = new int[20];
Sonst gibt es eine ArrayIndexOutOfBoundsException während der Ausführung.
(Läßt sich das obenstehende überhaupt kompilieren?)
Gruß
Slyh
Hi Slyh,
genau das Problem habe ich immernoch, obwohl ich den Array jetzt so deklariert habe... und zwar net beim Kompilieren, sondern beim Anzeigen im Browser...
So siehts mittlerweile aus, kann den Logikfehler einfach net finden..
import java.awt.*;
import java.math.*;
import java.applet.*;
public class Move extends Applet
{
public void init()
{
setBackground(Color.black);
Label inhalt = new Label ("", Label.CENTER);
int l = 0;
long args[] = new long[21];
double x = 0;
for (int i=0;i<20;i++) {
x = Math.random() * 100000;
args[i] = Math.round(x);
if(i>0) {
if(args[i-1] < args[i]) {
l = i;
}
}
}
inhalt.setText("Das Feld" + l + "hat den größten Wert, nämlich" + args[l]);
}
}
Hallo,
genau das Problem habe ich immernoch, obwohl ich den Array jetzt so deklariert habe... und zwar net beim Kompilieren, sondern beim Anzeigen im Browser...
Ja, einfach noch das Label zum Applet adden, dann zeigt er es auch
an. :-)
Dann solltest du noch entweder die Hintergrundfarbe der Applet-
Zeichenfläche oder die Vordergrundfarbe des Labels auf weiß setzen.
Schwarz auf Schwarz liest sich meist nämlich recht schlecht. :-)
Beispiel:
public void init()
{
setBackground(Color.black);
Label inhalt = new Label ("", Label.CENTER);
inhalt.setForeground(Color.WHITE);
this.add(inhalt);
int l = 0;
long args[] = new long[21];
___________________________^^
Hier reicht wirklich 20, da du ja nur bis 19 zählst.
Und dann müßte es schon gehen. (Tut es zumindest in meiner Lokalversion
hier jetzt.)
Gruß
Slyh
Hallo,
ich bin mal so frei und nehme den Code ein wenig auseinander.
Hier der Code:
import java.applet.*;
public class Move extends Applet
{
public void init()
{
setBackground(Color.black);
}
Soweit wohl richtig.
Label inhalt = new Label();
Hier erzeugst du dir ein Label. Label ist ein Klasse im Package
java.awt. Du solltest also entweder die Klasse "Label" vollständig
qualifiziert ansprechen (java.awt.Label) oder oben noch ein
entsprechendes import hinzufügen (import java.awt.*; oder import.java.awt.Label).
Dir ist schon klar, daß das Label nie mehr irgendwo angezeigt wird?
Übrigens solltest du schon alleine wegen der Lesbarkeit alle Variablen-
deklarationen usw. ganz zuoberst in die Klasse einfügen, also nach
dem "public class XXX {".
Vermutlich wolltest du hier aber sowieso lokale Variablen deklarieren.
Dazu gleich mehr.
int l = 0;
int args[] = {};
int args[] = new args[20];
Schließlich willst du ein Array mit 20 Elementen. Die Werte werden
übrigens alle automatisch auf 0 initialisiert. (Was in deinem Fall
nicht relevant ist. Ich wollt's nur am Rande erwähnen.)
for (int i=0;i<20;i++) {
args[i] = math.random();
if(i>0) {
if(args[i-1] < args[i]) {
l = i;
}
}
}
Diese ganze Block steht jetzt ziemlich verloren mitten in der Klasse.
Das darf in Java nicht sein. Der Code muß sich generell in
einer Methode befinden. Vermutlich wolltest du den Code in die
Methode "run()" schreiben. Die wird - sofern ich mich recht erinnere -
beim Aufruf des Applets ausgeführt. Guck aber am besten nochmal in
der Java-Doku nach.
Die Variablen-Deklarationen von weiter oben würdest du dann vermutlich
auch am besten in dieser run()-Methode unterbringen.
inhalt.setText("Das Feld" + l + "hat den größten Wert, nämlich" + args[l]);
}
Hier setzt du den Wert von dem vorhin erzeugten Label. Nur wird dieses
Label nirgends angezeigt.
Du müßtest das Label z.B. mit der add()-Methode von Applet noch zum Applet-Darstellungsbereich hinzufügen.
Ich hoffe nichts vergessen zu haben. Ansonsten: Einfach schreien! :-)
Gruß
Slyh
Hallo nochmal,
Diese ganze Block steht jetzt ziemlich verloren mitten in der Klasse.
Das darf in Java nicht sein. Der Code muß sich generell in
einer Methode befinden. Vermutlich wolltest du den Code in die
Methode "run()" schreiben. Die wird - sofern ich mich recht erinnere -
beim Aufruf des Applets ausgeführt. Guck aber am besten nochmal in
der Java-Doku nach.
Die Methode heißt nicht "run()", sondern "start()" und wird immer dann
aufgerufen, wenn das Applet "neu" angezeigt wird: Direkt nachdem
"init()" aufgerufen wurde und jedesmal wenn die Seite mit dem Applet erneut
angezeigt wird. (Zum Beispiel wenn der Benutzer zwischenzeitlich weiter-
gesurft und dann über den Back-Button wiedergekommen ist.)
Die Methode "stop()" wird entsprechend aufgerufen, wenn die Seite mit
dem Applet verlassen wird. Die Applet-Klasse wird dabei noch nicht
(unbedingt) entfernt. Wenn das Applet wirklich entfernt wird, wird die
"destroy()"-Methode aufgerufen.
Du solltest den Programmlauf als in der Methode "start()" anstoßen, in
der Methode "stop()" anhalten und die Aufräumarbeiten (sofern notwendig) in der Methode "destroy()" vornhemen.
Steht aber auch alles in der Java-Doku.
(http://java.sun.com/j2se/1.4/docs/api/java/applet/Applet.html#init())
Sorry für den Spam!
Gruß
Slyh