Archiv verlassen und diese Seite im Standarddesign anzeigen : Java: 2 Fragen
drunken monkey
21.11.2005, 19:20
Ich muss für die Uni ein Programm in Java programmieren und bräuchte Rat zu 2 Fragen:
1) Ich benutze einen Stack. Ich verwende die Stack.pop () - Methode in einem try-Block, dahinter steht:
catch (EmptyStackException e) {
//...
}
Beim Kompilieren erhalte ich jedoch immer den Fehler
"cannot find symbol
symbol : class EmptyStackException"
Weiß jemand, was daran falsch sein soll?
2) Muss ich (zumindest wie ich das Programm geplant habe) einen String einlesen und dann je nachdem, ob bestimmte Werte darin auftauchen, ihn in eine Integer umwandeln.
Aber obwohl ich explizit caste, sagt er immer "inconvertible types". Weiß einer, ob und wie man Strings in Integers umwandeln kann, oder muss ich mir da was anderes überlegen?
Schon mal vielen Dank im Voraus!
Zu 1:
Laut API-Doku (wenn du die nicht hast: unbedingt ziehen, das Teil ist genial) liegt die EmptyStackException in java.util. hast du die entsprechend importiert? Wenn nein, ersetz mal EmptyStackException mit java.util.EmptyStackException.
Zu 2:
kA, mit Typenumwandlung in Java hab ich mich nie befasst...
Zu 2) Integer.parseInt(String)
drunken monkey
21.11.2005, 21:33
Erstmal danke für die schnelle Antwort! http://www.multimediaxis.de/images/smilies/old/sm_12.gif
Importieren von java.util.* hat's gebracht, dachte eigentlich wenn ich java.util.Stack importier, sind die dazugehörigen Exceptions schon dabei, aber ich bin da auch eher neu.
@ DFYX: Ebenfalls danke, allerdings klappt das nicht so richtig. Er findet die Methode nicht.
Also: 1. Muss man die importieren?
2. Wenn ich den String a (der nur aus ziffern besteht, also quasi schon eine Integer-Variable ist) auf die integer x übertragen will, wie schreibe ich das? "x = x.parsInt (a)"? Klingt komisch. Auch mit "x.parsInt (a)" alleine, oder "x = parsInt (a)" geht's nicht.
Ein weiteres Danke im Voraus!
int deinInt = Integer.parseInt(deinString);
drunken monkey
21.11.2005, 22:30
x = Integer.parsInt(a);
Genau das habe ich stehen (initialisiert habe ich x schon vorher), klappt aber nicht. Muss man das jetzt importieren, oder nicht?
So sieht das aus:
http://stud3.tuwien.ac.at/~e0525225/drunkenmonkey/fehler1.png
Auf jeden Fall danke.:D
Edit: OMFJCIMP! Bin ich blöd! >_<
OK, danke an alle! Hab's zwar noch nicht ausprobiert (bin nicht zuhause) aber das wird's wohl gewesen sein.
PS: OK, klappt echt, wusste ich's doch, dass es das war! :rolleyes:
Das Ding kompiliert jetzt endlich, hat zwar falsche Ergebnisse, aber das ist wohl mein Problem...:D
Les mal genau, was da steht: parseInt, nicht parsInt
Ich würd dir zusätzlich raten, beim parseInt auf Exceptions zu achten, damit dein Programm nicht abstürzt, wenn du keinen Integer eingibst. Ist grundsätzlich ganz praktisch:
int i;
try {
i = parseInt(s);
} catch (Exception e) {
System.out.println("Not a number");
}
drunken monkey
22.11.2005, 17:20
Oh, danke für den Tipp, aber
a) hab ich das Programm schon abgegeben und
b) hab ich's schon so gelöst:
lang = a.length ();
for (i=0;i<lang;i++) {
buchstabe = a.charAt (i);
if ((zahlen.indexOf (buchstabe))==(-1)) {
fehler=true;
break;
}
Muss also eine Integer sein, aber danke.
Warum einfach, wenns auch kompliziert geht ;). Aber halt das für die Zukunft im Hinterkopf, nicht nur, dass du überprüfst, ob der String richtige Zeichen hat, du überprüfst auch, ob die Zahl überhaupt in den Integer Wertebereich passt. Auch mit negativen Zahlen hast du kein Problem.
Darüber hinaus ists schöner Code :)
drunken monkey
26.11.2005, 15:19
NEGATIVE ZAHLEN! Verdammt, ich wusste ich hab was vergessen. Danke für den Tipp, das wird wohl auch der Grund sein, warum ich nur 16/20 Punkten bekommen habe. MIST! >_<
Danke schön!
Naja, habe jetzt wieder ein kleineres Problem und eine eher unwichtige Frage, die mich aber trotzdem interessiert:
1) Beim Kompilieren meines Programms kommt folgende Meldung:
http://img474.imageshack.us/img474/2066/fehler0so.png
Was heißt das und wie kann ich es verhindern?
2) Ich muss für die nächste Aufgabe (ja, wir kriegen JEDE Woche eine...:rolleyes:) es unbedingt schaffen, ein Object )(also java.lang.Object)in eine Double-Variable zu verwandeln. Wollte ja eigentlich wieder den Tipp mit Double.parseDouble anwenden, aber das geht nur mit Strings, nicht mit einem Object. Daher habe ich das Object eben zuerst in einen String umgewandelt und dann in eine Double. Wollte fragen, ob es da nicht eine elegantere Lösung gäbe, die vielleicht auch weniger fehleranfällig o.ä. ist.
Danke im Voraus!
Nun mich muss zugeben, dass ich mich mit dem Typensystem von Java nicht sonderlich auskenne, jedoch könntest du versuchen dich ein wenig mit Reflection vertraut zu machen und herausfinden ob sich da etwas brauchbares finden lässt. Alternativ einfach wild drauf los casten und schauen obs klappt.
Double.parseDouble ist schon gut so, du darfst allerdings nicht vergessen, dass _jedes_ Object in einen String verwandelt werden kann, indem du die richtige Methode aufrufst:
Double.parseDouble(o.toString());
Verhindert auch, dass du ClassCastExceptions bekommst. Ist allerdings immer noch etwas unschön, vielleicht hilfts, wenn du mehr von der Angabe posten würdest, dann gibts vll. einen Trick, der dir da weiterhilft.
Zwecks Punkt 1: Verwendest du JDK1.5? Wenn ja, dann ignorier das. Das ist nur eine Warnung, die dir angibt, dass du bei Stacks, etc. Generics verwenden sollst. Kompilier dein Programm einfach einmal auf dem JDK1.4 Compliance Level (mit -target 1.4, wenn ich mich nicht irre).
drunken monkey
27.11.2005, 21:57
ad ad 2: Wusste ich eh, genauso habe ich' ja auch gemacht. In einen String verwandeln und dann Double.parseDouble. Wenn's nicht schöner geht, kann man eben nichts machen.
ad ad 1: Vielen Dank! Ich probier' es morgen mal aus und editier dann rein ob's geklappt hat.
Edit: Passt! :A
Powered by vBulletin® Version 4.2.3 Copyright ©2025 Adduco Digital e.K. und vBulletin Solutions, Inc. Alle Rechte vorbehalten.