PDA

View Full Version : do-while schleife


girl
12-05-2002, 21:48
do bzw weil schleifen , werden doch immer solange ausgeführt bis
eine bedingung nicht mehr zutrifft,
dieses prog http://mips.piranho.com/ hat aber nach do keine bedingung zum überprüfen :confused: :confused:
wozu dann überhaupt do?

Dimitrij
12-05-2002, 22:09
da steht doch eh ein paar mal while(...)

also

do
{
...
}while(...);

girl
12-05-2002, 22:11
ja und? was hat das damit zu tun?

martin
12-05-2002, 22:12
nur weil das programm absolut häßlich formatiert ist heißt das nicht dass die while's nicht da sind :D

habs zwar nicht probiert, aber sonst tät sich das ganze ja auch nicht kompilieren lassen.

//inneres do
while (multimode & i < laenge);

//äußere do-while schleife
while (i < laenge);

Wings-of-Glory
12-05-2002, 22:13
sicher hats sie die!
es sind zwei do-while schleifen in einander verschachtelt. Wenn du nochmal schaust siehst du die end-bedingung der do-while schleifen!
import eprog.*;

public class Runlen extends EprogIO

{ public static void main (String[] args) throws EprogException

{ boolean eingabefehler = false, singlemode = true, multimode = false;
String eingabepuffer = "",hochk="'";
int i=0,j=0,laenge=0,count=2;
char zeichen=' ',nextzeichen=' ';
StringBuffer ausgabepuffer = new StringBuffer();

{
eingabepuffer = readWord(); // Einlesen des Wortes
laenge = eingabepuffer.length();

if (laenge <= 30); // Laenge der eingabe Pruefen (Eingabe<=30)
else eingabefehler = true;
}

do { /* erstes do */
try {
zeichen = eingabepuffer.charAt(i++);
nextzeichen = eingabepuffer.charAt(i);
}
catch (IndexOutOfBoundsException e)
{;}

if (i == laenge)
{ nextzeichen = ' '; }

if (zeichen == nextzeichen) // Feststellen welcher Modus verwendet werden muss
{ multimode = true;
singlemode = false; }
else { singlemode = true;
multimode = false; }

if (singlemode & !eingabefehler) // Beginn und "End" des Singlemode
{ ausgabepuffer.append(zeichen); }

if (multimode & !eingabefehler) // Beginn des Multimode
{ ausgabepuffer.append(hochk);
do { /*zweites do*/
if (multimode)

{ ausgabepuffer.append(zeichen);
do { /*drittes do*/
try {
nextzeichen = eingabepuffer.charAt(++i);
}
catch (IndexOutOfBoundsException e)
{;}
if (i == laenge)
{ nextzeichen = ' '; }

if (zeichen == nextzeichen) { // Zaehlen der gleichen aufeinanderfolgenden Zeichen
count++; }
else {
if (count > 9)
{ eingabefehler = true; }
else { ausgabepuffer.append(count);
count = 2; } }
}
while (zeichen == nextzeichen);/*ende 3. do

{ zeichen = nextzeichen; // Pruefen ob wieder eine gleiche Zeichenreihe folgt
try {
nextzeichen = eingabepuffer.charAt(++i);
}
catch (IndexOutOfBoundsException e)
{;}
if (i == laenge)
{ nextzeichen = ' '; }
if (zeichen == nextzeichen);
else multimode = false;
}
}
}
while (multimode & i < laenge); /*ende 2. do*/
if (i < laenge)
{ ausgabepuffer.append(hochk); }
if (i <= laenge)
if (nextzeichen == ' ')
{ ausgabepuffer.append(hochk); }
if (!multimode)
{ ausgabepuffer.append(zeichen); }
}

}
while (i < laenge); // Ende der 1. Do-While Schleife

if (eingabefehler)
{ println("FALSCHE EINGABE"); }
else println(ausgabepuffer);

}
}

girl
12-05-2002, 22:20
also ich kapier das noch immer nicht, ich dacht jede do und jedes while braucht eine bedingung ?
:confused:

martin
12-05-2002, 22:25
naja die bedingung kommt nach dem while, in klammern und muss ein bool'scher ausdruck sein. übrigens, dieses edit an meinem vorigen posting hats nicht mehr rechtzeitig geschafft, da adsl wieder mal spinnt:

hoffe das hilft ;)

nur so am rand: do-while wirklich nur dann verwenden wenn der block mindestens einmal ausgeführt werden muss. ich war letztes semester auch beim kropatsch und ich weiß das er das teilweise ander

girl
12-05-2002, 22:35
das eine bedingung in klammern steht etc weiss ich eh
aber unverständlich is f. mich ein do ohne bedingung
und dann ein while m bedingung, wo is der zusammenhang?
ich mein ein do ohne bedingung was macht das überhaupt?

martin
12-05-2002, 23:03
ok, frage kapiert ;)

die syntax geht so:


do {
/* mach irgendwas, mindestens einmal */
} while ( &lt;BEDINGUNG&gt; );



die bedingung steht halt zum schluss, das hat - wie erwähnt - den sinn dass die schleife einmal auf jeden fall ausgeführt wird. du kannst dir das auch so vorstellen: while-schleifen überprüfen die bedingung bevor der code ausgeführt wird, do-while schleifen danach. um das deutlich zu machen sthet dann bei while die bedingung auch vorne, bei do-while hinten

nix_is
12-05-2002, 23:12
"do" gibts ohne "while" nicht

girl
12-05-2002, 23:18
aber while ohne do schon, oder??

martin
12-05-2002, 23:20
ja! :cool:

girl
12-05-2002, 23:24
ok danke sehr kenn mich jetzt aus :D