PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : uni-java prob


Gast
2004-11-16, 13:55:25
hab mal wieder ne aufgabe für wuch die bei mir nur ???? im kopf hervor rufen villeicht kann mir jemand weiter helfen.

Wandeln Sie die folgende Schleife in eine while-Schleife ohne break-Anweisung um:
int a = 0;
for (;;) {
int n = In.readIn();
if (n<0) break;
a *= n;
}

thx

nix name
2004-11-16, 14:16:59
so vielleicht?

int a = 0;
int n = In.readIn();
while (n>=0){
a *= n;
n = In.readIn();
}

Gast
2004-11-16, 14:22:46
wozu hast du die eingabe in der schleife gemacht ?

nix name
2004-11-16, 14:41:38
weil die eingabe auch in der originalschleife ist, und dadurch mehrmals aufgerufen werden kann.

Mike
2004-11-17, 18:50:20
Gast, wieso besprichst du die Probleme nicht mit deiner Lerngruppe?

Aqualon
2004-11-17, 21:27:16
Gast, wieso besprichst du die Probleme nicht mit deiner Lerngruppe?
Und fragst am besten auch gleich mal, wer auf die tolle Idee gekommen ist, eine endlos for-Schleife zu verwenden, die per break; abgebrochen wird.

Meine Erfahrung nach einem guten Monat Informatikstudium an einer Uni ist, dass man wohl gezielt darauf vorbereitet wird, ein schlechter Programmierer zu werden. Solche Böcke, wie in einigen Übungsaufgaben geschossen werden, würden Anfängern von alleine nie einfallen. Getreu dem Motto, hauptsache effektiv, die Effizienz kommt später (oder auch nicht.)

Aqua

Gast
2004-11-18, 13:05:24
ich habe schon mit meiner lerngruppe drüber geredet nur da wusste auch keiner wirklich weiter und die aufgabe stammt von meiner prof.
thx für die antworten

clm[k1]
2004-11-18, 13:28:27
Das wundert mich alles nicht ...
ich habe schon gehört, das es an manchen unis profs gibt, die beispiel programme ausgeben welche beim kompilieren 60 fehler werfen.


just my 2 cent
clm[k1]

Mike
2004-12-01, 17:00:17
Und fragst am besten auch gleich mal, wer auf die tolle Idee gekommen ist, eine endlos for-Schleife zu verwenden, die per break; abgebrochen wird.

Hm, Endlosschleifen, die mit break abgebrochen werden, benutze ich zwar auch selten, aber in unserer neusten Java Übung habe ich spontan eine genommen, gefiel mir ganz gut:

while(true)
{
Out.print("Teppichmaße eingeben:\nLänge: ");
width = In.readInt();
if(!In.done()) { break; }
Out.print("Breite: ");
height = In.readInt();
if(!In.done()) { break; }
sum += getCarpetPrice(width, height);
Out.print("\n");
}

Unter anderem kann ich die Schleife an 2 Stellen verlassen..
Gibts daran was auszusetzen? :)

Aqualon
2004-12-01, 17:30:42
Gibts daran was auszusetzen? :)
Ok, in diesem Fall wäre eine Abbruchbedingung ein wenig komplizierter zu implementieren, auch wenn es genauso gehen würde.


boolean break=false;
while(break!=true)
{
Out.print("Teppichmaße eingeben:\nLänge: ");
width = In.readInt();
if(!In.done()) { break=true; }
if (break != true) {
Out.print("Breite: ");
height = In.readInt();
if(!In.done()) { break=true; }
sum += getCarpetPrice(width, height);
Out.print("\n");
}
}


Aqua

Mike
2004-12-01, 17:44:30
naja, fehlt sogar noch ein if in deinem Code, das um die letzten beiden Zeilen(Klammerzeilen ausgenommen) müsste.
Ansonsten habe ich daran auch gedacht, das so zu machen, mit ner Hilfsvariable, in deinem fall break genannt.
Allerdings habe ich das nach nen paar Sekunden Überlegen doch wieder verworfen, weil der Code mit den break Anweisungen imo doch kürzer und auch übersichtlicher ist.
Möglich ist vieles, das ist klar :)

Trap
2004-12-01, 19:17:39
while(inputtepich(width,heigth)) sum += getCarpetPrice(width, height);

Das ist besser :)

Mike
2004-12-01, 19:57:14
naja, geht in der Form schonmal nicht, es sei denn du nimmst globale Variablen für width/height, was aber nicht gerade schön ist.
Man könnte die Funktion Inputteppich nen array zurückgeben lassen, allerdings haben wir arrays in der Vorlesung generell noch nicht behandelt, also dachte ich mir, muss nicht sein :)

Trap
2004-12-01, 20:04:39
Kommt drauf an welche Programmiersprache es ist. In C++ kann man call-by-reference benutzen und es geht mit lokalen Variablen.

In Java müsste es mit Integer-Parametern funktionieren. Edit: Nein, geht es nicht. Man bräuchte in Java eine extra Klasse oder globale Variablen damit es geht.

HellHorse
2004-12-01, 20:29:28
boolean break=false;
while(break!=true)
{
Out.print("Teppichmaße eingeben:\nLänge: ");
width = In.readInt();
if(!In.done()) { break=true; }
if (break != true) {
Out.print("Breite: ");
height = In.readInt();
if(!In.done()) { break=true; }
sum += getCarpetPrice(width, height);
Out.print("\n");
}
}


Aqua
:|

boolean notDone = true;
while(notDone)
{
Out.print("Teppichmaße eingeben:\nLänge: ");
width = In.readInt();
notDone = ! In.done()
if (notDone) {
Out.print("Breite: ");
height = In.readInt();
notDone = ! In.done()
sum += getCarpetPrice(width, height);
Out.print("\n");
}
}

edit:
eigentlich sollte das direkt auch gehen

while(! In.done())
{
Out.print("Teppichmaße eingeben:\nLänge: ");
width = In.readInt();
if (! In.done()) {
Out.print("Breite: ");
height = In.readInt();
sum += getCarpetPrice(width, height);
Out.print("\n");
}
}

Aqualon
2004-12-02, 01:34:24
:|
hm... hab ich wohl übersehen, dass break ein Schlüsselwort ist?

Dann kann es natürlich nicht gehen, hatte es aber auch nicht getestet.

Aqua