Java: in eine if-Anweisung eine while-Schleife einbauen?
Hallo! :)
Ich bin derzeit dabei, das Programmieren mit Java zu lernen und beschäftige mich gerade mit if-/else-Anweisungen und Schleifen.
Ich habe eine Aufgabe bearbeitet und dabei eine while-Schleife in eine if-Anweisung gesetzt, also, falls die Bedingung für die if-Abfrage wahr ist, soll unter anderem die while-Schleife ausgeführt werden, jedoch funktioniert das Programm so nicht.
Jetzt frage ich mich, ob es blöd ist, eine while-Schleife in eine if-Anweisung einzubauen? :D
Danke!
7 Antworten
Nein alles gut, aber die while-Schleife läuft ja nur wenn der rückgabewert true ist d.h zB while(1==1) {} würde laufen sowie while("str".equals("str")==true) auch, aber nicht laufen würde while(1==2) {} würde nicht laufen sowie while("str".equals("str1")==true). Deswegen wozu noch if? Musst dir while wie eine extended Version vom if Vorstellen. Zurück zu deiner Frage, schau mal ob dein code ohne irgendwelche Bedingung auch läuft und ebenso dann schauen ob deine Bedingung auch funktioniert d.h auch true ist.
Ja aber im endeffekt geben diese alle nur einen boolean ab unswar true oder false. Man kann genauso diese Strukturen in einem simplen boolean einbauen.
Mann kann alles in der While anweisung einbauen, auch mehrere Bedingungen mit &&, || z.b.
(...) falls die Bedingung für die if-Abfrage wahr ist, soll unter anderem die while-Schleife ausgeführt werden (...)
So schreibst du es in deinem Code aber nicht. Die while-Schleife befindet sich bei dir im else.
Was du bei deinem Code zuerst einmal beachten solltest:
- Setze keine Leerzeichen zwischen Operatoren. (Bsp.: < =)
- Benötigst du die Variable b überhaupt?
- Ein Rat: Setze (vor allem als Anfänger) immer die geschweiften Klammern um Code-Blöcke. Die Methode, die du gepostet hast, ist im Übrigen unvollständig. Es fehlt der Rückgabewert und 2 schließende Klammern.
- Beachte, dass die Variable sum womöglich noch keinen Wert hat, falls du außerhalb des ersten if noch mit ihr arbeiten möchtest.
Jetzt frage ich mich, ob es blöd ist, eine while-Schleife in eine if-Anweisung einzubauen? :D
Nein, außer es ergibt keinen Sinn. Aber den Sinn deiner Anwendung musst du selbst kennen.
Ich habe nur einen Teil des Codes gepostet, alles wäre einfach zu lang gewesen, da die Aufgabe aus mehreren Teilaufgaben besteht.
Die Schleife wird bei mir nur einmal durchlaufen.
Hier ein Teil meines Codes:
static int add(int x, int y) {
int a = y;
int b = x;
int sum;
int i = 0;
if (x < = y) {
if (i = = x) return a;
else
if (a = = Integer.MAX_VALUE) return a;
else
while (i < x) {
a = increment(y);
i = increment(i);
}
sum = a;
@Xenotrus Der Compiler würde sowieso einen Error raushauen deswegen höchstwahrscheinlich eben einfach typische gutefrage.net Textformatierung wahrscheinlich sind die im source richtig.
Punkt 2 wäre, platziere in jedem Ort also z.B. in if while usw. eine Nachricht d.h System.out.println("works 1"); System.out.println("works 2"); usw. um zu sehen wo dein Code aufhört weiterzumachen oder ob der überhaupt was macht.
Ganz ehrlich verstehe ich nicht was du damit bewirken willst, vielleicht kann man das deutlich vereinfachen wenn du uns sagst was du machen möchtest bzw. was deine Absicht dahinter ist.
Nein, jetzt habe ich verstanden was das bewirken soll :) Du möchtest, dass wenn x 0 ist, nicht, dass gerechnet werden muss und deswegen gibst du direkt y zurück und wenn y bereits den maximalen Wert hat, möchtest du nichts drauf rechnen, da sonst ein viel kleinerer Wert dabei rauskommt und ansonsten wird x + y gerechnet und lass mich raten, darunter kommt dann das ganze umgekehrt, falls y kleiner als x ist? :)
ja, genau! :D
ich erhalte keinen Error, die Schleife wird sogar durchlaufen, aber nur einmal...
Wenn ich z.B. x = 3 und y = 5 setze, erhalte ich einfach nur 6, dabei muss noch zweimal inkrementiert werden, sodass ich 8 erhalte.
Wenn da ein Fehler drin ist, dann liegt der, denke ich in der increment-methode.
Angenommen increment sieht so aus:
int increment(int value) {
return value + 1;
}
dann funktioniert in deinem code in der Schleife nur das untere richtig, i wird in jedem Schritt um eins erhöht. A hingegen würde dauerhaft den Wert von y + 1 erhalten, da y unverändert bleibt hat auch Summe am Ende den Wert von y + 1 und nicht y + x.
Sieht Increment so aus:
int increment(int &value) { //-> Ich weiß nicht ob das in Java auch so aussieht
value = value +1;
return value;
}
Das Und vor value steht (so macht man es jedenfalls in c++) dafür, dass nicht der Wer von der Variable, sondern die Variable selbst unter dem temporären neuen, zusätzlichen Namen value übergeben wird, wodurch auch die Variable selbst abgeändert werden kann. Hierbei würde also tatsächlich y dauerhaft um 1 erhöht werden und a = y gesetzt werden und am ende hättest du in Summ den Wert von x + y.
Die Frage ist halt, was von Beidem Increment macht.
DANKEEEEEE du bist der Beste! :D
Hast absolut recht, die increment Methode war fehlerhaft!
Und das würde auch zu deinem Ergebnis bei 3+5 passen -> y = 5; y+1 = 6, 6 ist auch das Ergebnis
Danke für eure Antworten ich schätze, ich habe alle unnötig kompliziert gemacht.
Wie gesagt, bin Anfänger und muss mich noch mehr damit beschäftigen :)
Etwasdasduausmeinersichtlernensolltestistdasrichtigeformatierenvoncodesonnstistesgenausoschwerwasrauszulesenalswürdemansätzeohneleerzeichenundbeistricheschreiben
Also
int a = y;
int b = x;
int sum;
int i = 0
if (x <= y)
{
if (i == x)
{
return a;
}
else
{
if (a == Integer.MAX_VALUE)
{
return a;
}
else
{
while(i < x)
{
a = increment(y);
i = increment(i);
}
}
}
sum = a;
}
return sum;//??
So wenn du jetzt sagst was der sinn deiner Funktion sein sollte dann kann man dem fehler auf den Grund gehen.
Wenn ich das so ansehe würde ein Code wie der reichen
return x+y;
eigentlich schon, aber es sollen Methoden verwendet werden (in diesem fall increment(...)), die in den Teilaufgaben zuvor geschrieben wurden.
Nein natürlich nicht. Warum es nicht funktioniert können wir dir aber ohne Code nicht sagen.
Ich weiß nicht, ob das das ist, was du erreichen wolltest:
Wenn x 0 ist, solange y nicht im negativen Bereich liegt, gibt die Funktion den Wert von y zurück.
Wenn y dem maximalen Wert eines Integers entspricht und x nicht 0 ist, wird der Wert von y zurückgegenben
Wenn nichts von beidem der Fall ist, läuft die Schleife solange, bis i den Wert von x entspricht, mit dem Ausgang, dass i=x ist und a = x+y und y = x+y. (Jedenfalls, wenn die increment-methode das macht, was ich glaube, ich kenne mich in Java nicht aus)
Unabhängig davon, ob die Schleife ausgeführt wird, oder nicht, wird am Ende auch noch die Summe = a bzw y gesetzt, also dem ursprünglichen x+y.
Ich sehe darin ehrlich gesagt keinen wirklichen Sinn, wenn du die Methode nur schreibst, um den Umgang damit zu lernen, solltest du vielleicht etwas wählen, wo es leichter ist, zurückzuverfolgen, was eigentlich mit den Werten passiert bzw passieren sollte, die man der Methode übergibt.
Also jetzt mal die 2 Fragen:
Weil so seheich jetzt erstmal keinen Fehler darin (außer halt, dass jetzt im Moment natürlich unten noch was fehlt)