Und außerdem && benutzen
Und außerdem && benutzen
@Nahoimi: Herzlichen Dank! Jetzt kapier sogar ich es
@Kaiserin Uschi: Ja, hat Peregrin ja auch schon kritisiert. Wenn mein Gedankengang richtig gewesen wäre und alle drei Voraussetzungen gegeben sein müssten, dann bräuchte man aber die komplette Auswertung, oder?
Das ist alles, was wir tun können: immer wieder von neuem anfangen, immer und immer wieder. (Thornton Wilder)
Faustregel: Man nimmt immer && und ||.
Ausnahmen davon sind so Fälle, in denen man tatsächlich ein x++ oder so ausgeführt haben möchte und daher erzwingen will, dass der zweite Ausdruck auch dann ausgewertet wird, wenn der erste das eigentlich unnötig machen würde. Das ist aber mMn schlechter Stil.
Meine Stories:Zitat von Leonard Bernstein
Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
Der Erste Kaiser wieder aufgenommen
Nein (bzw. ja), dein Gedankengang ist zwar... irgendwo richtig, du hast aber && bzw. || nicht verstanden.
Die beiden brechen nur ab, wenn nach Auswertung des ersten Arguments schon klar ist, was das Endresultat ist, d.h. wenn bei "x && y" x falsch ist, bzw. bei "x || y" x wahr (Einfach, weil danach das Ergebnis, unabhängig von den restlichen Operanden, schon feststeht).
Das Endresultat kann dabei nicht "falsch" werden, sofern du keine Klammern weggelassen hast, die notwendig wären um es korrekt auszuwerten (da Klammern > &&/|| in der Operatorenreihenfolge). (Insb. bei deinem Beispiel, wenn die erste Bedingung, also (jahr % 4 == 0) nicht zutrifft, dann ist der Rest eh "egal", weil das Jahr kein Schaltjahr sein kann - es ist also einfach nur unsinnig, den Rest auch auszuwerten. Im Gegenzug, wenn (jahr % 4 == 0) wahr ist, dann wird der Rest ausgewertet.)
Dein Missverständnis ist, dass du denkst, dass && abbrechen kann/abbricht, nachdem das erste Argument auf true ausgewertet wurde - was aber nicht so ist.
Und irgendwie hab' ich den Eindruck, dass ich das furchtbar verwirrt-kompliziert formuliert habe.
Hoppla, da hat jemand das Licht angemacht! Ok, er steigt also nicht bei erfüllter Bedingung aus, sondern erspart sich nur die Auswertung, wenn die Bedingung nicht mehr erfüllt werden kann. Schlau! Aber meine Güte, komplizierte Sache, das. Dennoch: Der revolutionäre Schaltjahr-Berechner funktioniert mittlerweile! Die Menschheit ist gerettet! Und ich hab sogar auf && bzw. || statt & und | umgeschrieben, will mir ja keinen schlechten Stil angewöhnen. Danke mal wieder!
Das ist alles, was wir tun können: immer wieder von neuem anfangen, immer und immer wieder. (Thornton Wilder)
He is back - der weltschlechteste Java-Programmierer hat ein neues Problem Und genau da kommt IHR ins Spiel!
Ok, ich hab bereits Schleifen und so Zeugs gelernt. Dann stellte das hinterlistige Buch die Aufgabe, dass die Konsole folgendes Zahlendreieck auswerfen soll. Leider liefert es keine Lösungen mit
0
01
012
0123
01234 etc.
Mit meinem momentanen Kenntnisstand konnte ich die Aufgabe so lösen:
Aber das ist natürlich unschön und vor allem aufwendig und man muss wissen, wie oft das Zeug runterläuft. Für a = n Fälle spielt's das nicht mehr. Oder für a = 1232432234 Fälle, da wird man ja alt.PHP-Code:
/* Zahlendreieck */
public class z2 {
public static void main(String[] args) {
int a = 0;
while (a <= 10) {
switch (a) {
case 0:
System.out.println(a);
break;
case 1:
System.out.println("0" + a);
break;
case 2:
System.out.println("01" + a);
break;
case 3:
System.out.println("012" + a);
break;
case 4:
System.out.println("0123" + a);
break;
case 5:
System.out.println("01234" + a);
break;
case 6:
System.out.println("012345" + a);
break;
case 7:
System.out.println("0123456" + a);
break;
case 8:
System.out.println("01234567" + a);
break;
case 9:
System.out.println("012345678" + a);
break;
case 10:
System.out.println("0123456789" + a);
break;
}
a++;
}
}
}
Wie müsste man das denn nun richtig lösen? Oder ist das bereits Stoff für Fortgeschrittene? Danke und schönen Feiertag!
Das ist alles, was wir tun können: immer wieder von neuem anfangen, immer und immer wieder. (Thornton Wilder)
Benutz einfach eine Variable, die die jeweils letzte Ausgabe speichert.
int hat die Wrapperklasse Integer. Diese Klasse stellt unter anderem eine toString() Methode bereit, womit sich Integer in Strings konvertieren lassen. Jetzt musst du dir nur noch überlegen, wie du damit für jede Zeile den passenden String baust.
Allgemeine Anmerkungen:
Jeder primitive Datentyp (int, long, double, float, char, ...) hat in Java eine feste Wrapperklasse (Integer, Long, Double, Float, Char, ...).
Jede Klasse (wirklich jede, auch selbst erstellte) hat eine Funktion toString(), die eine Stringrepräsentation des Objekts zurückgibt. Das muss allerdings nicht immer eine sinnvolle sein. Standardmäßig ist das einfach die Objektreferenz aka ein Hashwert aus dem Speicher.
Papoy!
So zum Beispiel:
Edith:PHP-Code:
public static void main(String[] args) {
String s = "";
for (int i = 0; i < 10; i++) {
s = s + i;
System.out.println(s);
}
}
Ich finde es schrecklich, wenn die ganzen Java-Bücher damit anfangen, seitenlang Aufgaben mit System.out.println zu stellen, und dann am besten noch alles direkt in die main-Methode schreiben lassen. Oder noch schlimmer: Gleich auf GUI übergehen.
Auch wenn es furchtbar langweilig klingt, aber so ein kleines Bank-Account Beispiel, das du dir selber überlegst, bringt glaube ich mehr...
Geändert von Wild Haggis (01. Mai 2013 um 11:16 Uhr)
Ich finde ja implizite Typumwandlungen immer nicht so prickelnd.
Papoy!
Danke schön Bei mir happerts ja noch massiv bei den Grundlagen, da find ich so einen Schritt für Schritt Zugang ganz gut. zB weiß ich nicht mal, was eine Wrapperklasse ist und Hash weckt immer den Gedanken an etwas Rauchiges Den for Befehl kenn ich sogar schon, war aber eine Aufgabe, die dezitiert mit while zu lösen war Abgesehen davon ist die for-Lösung um Längen schöner Na gut, danke jedenfalls!
Jedenfalls kommt die Lösung wahrscheinlich erst in einem späteren Kapitel (also Variablen, die sich den Vor-Wert merken und damit arbeiten können).
Geändert von GarfieldMcSnoopy (01. Mai 2013 um 13:01 Uhr)
Das ist alles, was wir tun können: immer wieder von neuem anfangen, immer und immer wieder. (Thornton Wilder)
Ich glaube diese Beispielaufgabe sollte dich nur auf den Umstand hinweisen, dass man Schleifen auch verschachteln kann
Die weiter oben genannte Lösung ist nat. aus vielen Gründen eleganter.
Code:/* Durchlaufen eines "dreieckigen Gebietes". Daten liegen häufig in dieser Form vor... */ int N = 4; for( int i=0; i<N; i++){ for( int k=0; k<i; k++){ System.out.print(k); // Ohne Zeilenumbruch. } System.out.println(""); // Zeilenumbruch einfügen. }
Geändert von Ramkhamhaeng (01. Mai 2013 um 15:16 Uhr)
Mit Naturgesetzen kann man nicht verhandeln. --Harald Lesch
Ein Atomkrieg würde die Menschheit auslöschen. Hätte aber auch Nachteile.
Sicher? eigentlich müsste es bei N<0 genauso funktionieren.
Meine Stories:Zitat von Leonard Bernstein
Civ VI aus der Sicht von Civ IV BTS, englischer Weltraumsieg auf König
Der Erste Kaiser wieder aufgenommen