Java: in eine if-Anweisung eine while-Schleife einbauen?

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.

ZaoDaDong  27.02.2018, 13:21

Mann kann alles in der While anweisung einbauen, auch mehrere Bedingungen mit &&, || z.b.

0
sero583  27.02.2018, 13:31

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.

0
(...)  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:

  1. Setze keine Leerzeichen zwischen Operatoren. (Bsp.: < =)
  2. Benötigst du die Variable b überhaupt?
  3. 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.
  4. 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.

denizimmm 
Fragesteller
 27.02.2018, 14:35

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.

0

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;

sero583  27.02.2018, 13:39

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.

1
Xenortus  27.02.2018, 13:41

Zwischen == und <= keine Leerzeichen.

1
sero583  27.02.2018, 13:41

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.

1
sero583  27.02.2018, 13:42

@Xenotrus Der Compiler würde sowieso einen Error raushauen deswegen höchstwahrscheinlich eben einfach typische gutefrage.net Textformatierung wahrscheinlich sind die im source richtig.

1
denizimmm 
Fragesteller
 27.02.2018, 13:59

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 :)

0
R4c1ngCube  27.02.2018, 14:12

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:

  1. Macht die Methode denn, so wie ich es beschrieben habe, das was du möchtest?
  2. Worin besteht denn der Fehler? Bekommst du einen Error oder passiert einfach nicht das, was passieren sollte?

Weil so seheich jetzt erstmal keinen Fehler darin (außer halt, dass jetzt im Moment natürlich unten noch was fehlt)

0
R4c1ngCube  27.02.2018, 14:18
@R4c1ngCube

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? :)

1
denizimmm 
Fragesteller
 27.02.2018, 14:30
@R4c1ngCube

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.

0
R4c1ngCube  27.02.2018, 14:37
@R4c1ngCube

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.

1
denizimmm 
Fragesteller
 27.02.2018, 14:40
@R4c1ngCube

DANKEEEEEE du bist der Beste! :D

Hast absolut recht, die increment Methode war fehlerhaft!

0
R4c1ngCube  27.02.2018, 14:40
@R4c1ngCube

Und das würde auch zu deinem Ergebnis bei 3+5 passen -> y = 5; y+1 = 6, 6 ist auch das Ergebnis

1

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;
denizimmm 
Fragesteller
 27.02.2018, 14:37

eigentlich schon, aber es sollen Methoden verwendet werden (in diesem fall increment(...)), die in den Teilaufgaben zuvor geschrieben wurden.

0

Nein natürlich nicht. Warum es nicht funktioniert können wir dir aber ohne Code nicht sagen.