Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
Hallo an alle,
zu allererst muss ich erwähnen, dass ich absoluter Anfänger bei der Java-Programmierung bin! Also falls meine Frage/n als dumm erscheint/en bitte nicht aufregen und ich bitte vielmals um Verzeihung. Gleiches gilt, falls ich hier im falschen Forum poste!
Ich arbeite mich gerade durch die Java-Welt mit Hilfe eines Einsteigerbuches (Grundkurs Programmieren in Java Band 1) hinsichtlich meines bevorstehenden Studiums und bin in Kapitel 5 angelangt, wo es um Problemanalyse etc geht und mit folgendem Beispiel begonnen wird:
[HIGHLIGHT="Java"]
import static Prog1Tools.IOTools.*;
public class Teilbarkeit_zum_Ersten {
public static void main(String[] args){
/** Dieses Programm spaltet eine dreistellige Zahl in ihre Ziffern auf
und testet, ob die Zahl durch ihre einzelnen Ziffern teilbar ist.
*/
int i = 123; // Konstante festlegen
i = readInteger(); // Eingabe per Tastatur
int einer = i % 10; // Bestimme die Einer --> 123 durch 10 = 12 Rest 3 ==> einer = 3
int zehner = (i / 10) % 10; // Bestimme die Zehner --> (120 durch 10) durch 10 = 12 durch 10 = 1 Rest 2 ==> zehner = 2
int hunderter = (i / 100); // Bestimme die Hunderter --> 100 durch 100 = 1 ==> hunderter = 1
if (einer != 0 && // Ist Division möglich?
i % einer == 0){ // Ist der Rest = 0 ?
System.out.println("Die Zahl " + i + "ist durch " + einer + "teilbar!");
if (hunderter != 0 &&
i % hunderter ==0){
System.out.println("Die Zahl " + i + " ist durch " + hunderter + "teilbar!");
}
}
}
}
[/HIGHLIGHT]
Ist ja alles schön und gut, aber ich bekomme in meinem Eclipse keine Ausgabe in der Konsole angezeigt... kann es damit zusammenhängen, dass mein Eclipse bereits zu viele Themen umfasst? Es hängt manchmal auch ein wenig...
Sicherlich erscheint die Frage für ziemlich alle als einfach oder vllt auch dumm, aber ich bin eben noch ganz am Anfang ;-)
Trotzdem würde ich mich über Hilfe freuen...
Viele Dank im voraus!
ok..also die 123 ist durch 3 teilbar und somit würde die erste Bedingung true sein -> Ausgabe.
ABER: gibts du zu dem readInteger() auch was ein?
Natürlich ist die Konsole leer, weil er auf eine Eingabe wartet (das deute ich mal aus dem Funktionsnamen). Erst wenn du was reintipperst läufts weiter. Kommentier doch einfach mal die readInteger() Zeile aus.
Dir ist aufgefallen, dass eclipse eine eigene konsole hat? (nicht dass du da auf dieses schwarze dings starrst und auf ergebnisse wartest^^ )
Was gibst du denn für eine zahl ein? bei 123 sollten imho eigentlich zwei ausgaben kommen...
Ob da überhaupt was kommt, kannst du ja schnell testen, indem du vor den ganzen abfragen irgendeine zeile augibst. Dass eclipse mit irgendwas überfordert wäre glaube ich weniger. Bisschen Speicher fressen tut es, aber "hängen"? Eher nicht...
[edit: ich sollte beim schreiben der Beiträge zwischendurch nicht so lange kiffen...:autsch:]
So Männer... ich habe mein Programm überarbeitet, leicht geordnet etc etc... jetzt habe ich nur ein Problem... ich hab jetzt rumgebastelt und so Zeugs...
hier das neue Teil:
[HIGHLIGHT="Java"]
import static Prog1Tools.IOTools.*;
public class Teilbarkeit_zum_Ersten {
public static void main(String[] args){
/** Dieses Programm spaltet eine dreistellige Zahl in ihre Ziffern auf
und testet, ob die Zahl durch ihre einzelnen Ziffern teilbar ist.
*/
int i = 100; // Konstante festlegen
i = readInteger("i = "); // Eingabe per Tastatur
int einer = i % 10; // Bestimme die Einer --> 123 durch 10 = 12 Rest 3 ==> einer = 3
int zehner = (i / 10) % 10; // Bestimme die Zehner --> (120 durch 10) durch 10 = 12 durch 10 = 1 Rest 2 ==> zehner = 2
int hunderter = (i / 100); // Bestimme die Hunderter --> 100 durch 100 = 1 ==> hunderter = 1
while (i < 100 & i > 1000){
System.out.println("Das geht nicht du Sack! Versuche es nochmal! Nur nicht den Mut verlieren!");
i = readInteger("i = ");
}
if (einer != 0 && i % einer == 0){ // Ist Division möglich? // Ist der Rest = 0 ?
System.out.println("Die Zahl " + i + " ist durch " + einer + " teilbar!");
}
if (hunderter != 0 && i % hunderter ==0){
System.out.println("Die Zahl " + i + " ist durch " + hunderter + " teilbar!");
}
else {
System.out.println("Die Zahl " + i + " ist weder durch " + einer + " noch durch " + zehner + " noch durch " + hunderter + " teilbar!");
}
}
}
[/HIGHLIGHT]
Jetzt meine Frage: wenn ich das ausgebe und für "i =" beispielsweise 1001 eingebe in der Konsole soll kommen: "Das geht nicht du Sack! Versuche es nochmal! Nur nicht den Mut verlieren!" - tuts aber nicht!
Wie mache ich dem Compiler klar, dass er sich nur die einer, zehner und hunderter von 3-ziffrigen Zahlen checken soll?! also 0-100 nicht und ab 1000 aufwärts ebeneso nicht, da soll diese "Das geht nicht du Sack..." - Ausgabe kommen ^^
wie gesgat, ihr müsst entschuldigen, ich bin noch die absolute Niete!
Wenn ich jetzt aber ne riesige Zahl eingebe kommt der Fehler:
i = 5455545454
Eingabefehler java.lang.NumberFormatException: For input string: "5455545454"
Bitte Eingabe wiederholen...
i =
wieso kommt dann nich mein "Das geht nicht du Sack..." etc? ^^
Mein Problem is, dass der Compiler verstehn muss, dass er bei einer, zehner und hunderter nur Ziffern beachten muss und keine ganzen Zahlen, die aus mehreren Ziffern bestehen... -.-
... und zudem sich entweder für die if, oder die else Anweisung entscheiden soll, nicht für beides... wie hier:
i = 985
Die Zahl 985 ist durch 5 teilbar!
Die Zahl 985 ist weder durch 5 noch durch 8 noch durch 9 teilbar!
was muss ich da ändern? irgendwie schachteln oder so? oder andere Art von Schleife?
der Compiler muss verstehen ... ja wenn er das bei mir ab und zu auch mal von selbst machen würde.
Die else Anweisung in Zeile 26 bezieht sich nur auf das if in Zeile 23. Else bezieht sich immer auf das if des Blocks if(...) { ... } davor. Was innerhalb des Blocks ist interessiert nicht. Du willst ja, wenn ich das richtig verstanden habe, hinschreiben, welche Stellen teilbar sind, bzw. ob keine teilbar sind.
Definiere doch einfach vor der ersten if Anweisung eine boolean nixTeilbar = true;. Dann prüfst du mit drei if Anweisungen die drei Stellen. Ist eine Stelle teilbar, gibst du die Meldung auf die Konsole aus, und setzt nixTeilbar auf false. Am Ende kannst du dann ganz einfach feststellen, ob keine der Stellen teilbar war. if(nixTeilbar) System.out.println("Nix mit teilen");
Hm ich versteh so deinen Gedankengang, aber mein Anfänger-Wissen hat leichte Probleme und ich bin schon gut am verzweifeln
Also vor der ersten if-Anweisung... wie soll dann diese boolean nixTeilbar = true aussehen? ich hab echt Probleme mir das vorzustellen sorry :-/
[HIGHLIGHT="Java"]
import static Prog1Tools.IOTools.*;
public class Teilbarkeit_zum_Ersten {
public static void main(String[] args){
/** Dieses Programm spaltet eine dreistellige Zahl in ihre Ziffern auf
und testet, ob die Zahl durch ihre einzelnen Ziffern teilbar ist.
*/
int i = 123; // Konstante festlegen
i = readInteger("i = "); // Eingabe per Tastatur
int einer = i % 10; // Bestimme die Einer --> 123 durch 10 = 12 Rest 3 ==> einer = 3
int zehner = (i / 10) % 10; // Bestimme die Zehner --> (120 durch 10) durch 10 = 12 durch 10 = 1 Rest 2 ==> zehner = 2
int hunderter = (i / 100); // Bestimme die Hunderter --> 100 durch 100 = 1 ==> hunderter = 1
while (i < 100 || i > 1000){
System.out.println("Das geht nicht du Sack! Versuche es nochmal! Nur nicht den Mut verlieren!");
i = readInteger("i = ");
}
if (einer != 0 && i % einer == 0 || hunderter != 0 && i % hunderter ==0){
System.out.println("Die Zahl " + i + " ist durch " + einer + " teilbar!");
}
else {
System.out.println("Die Zahl " + i + " ist weder durch " + einer + ", noch durch " + zehner + ", noch durch " + hunderter + " teilbar!");
}
}
}
[/HIGHLIGHT]
Ich hab die zwei if's zu einer if durch ein logisches Oder zusammengeknüpft...
geht das jetzt?
Bin mir unsicher...
Also den Anfang haben wir da ja schonmal. Achte mal auf sinnvolle Klammerungen deiner Ausdrücke / Bedingungen.
Zur Zeit macht Java (da ja UND stärker bindet als ODER):
(einer != 0 && i % einer == 0) || (hunderter != 0 && i % hunderter ==0)
nun sprichst du ja vom else-Zweig. (Hab dein Edit bei meinem post nicht gesehen)
Dort muss ja dann auch ein else if - Konstukt hin, weil der fängt ja gerade alles ab.