# while.. verwirrt



## Sir_Sihou (27. Nov 2010)

hallo

also aufgabe ist:


wir kaufen einen gegenstand an einem bestimmten tag --> Startpreis
während der folgenden Tage steigt oder sinkt der Wert.

bei dem Programm, soll der User zuerst den Startpreis abfragen, dann die veränderten werte der folgenden Tage.

Sinkt der wert auf die hälfte des startpreises, bzw steigt er auf das doppelte, bricht das Programm ab. und sagt, dass wir es wieder verkaufen sollen.

je nach wert am letzten tag gibt das programm die höhe des gewinns oder verlusts aus. 


ich hab bis jetzt folgendes...jedoch fehlt etwas ganz bestimmtes.. und ich komm einfach nicht drauf :/



```
double Kaufpreis, Kurschange, Verlust, Gewinn;      
		
		
		Out.println("Please enter your purchase price ");  
		Kaufpreis = In.readInt();
		
		
	  do{
		
		Out.println("How did your share price change next day? "); 
		Kurschange = In.readInt();
		
		          
	   if(Kurschange <= (Kaufpreis/2.0)){Out.println("You should sell the stock now!"); 
	   Verlust = ((Kaufpreis - Kurschange));
	   Out.println("You've a loss of " + Verlust);

	   break;}
	   
	   else 
		   if (Kurschange >= (Kaufpreis*2.0)) {Out.println("You should sell the stock now!"); 
		   Gewinn = (Kaufpreis - Kurschange);
		   Out.println("You've a profit of " + Gewinn);
		   break;
		   }
			   
			   
		  
	  	  } while (Kurschange != (Kaufpreis*2.0) && Kurschange != (Kaufpreis/2.0));
	  	Out.println("You've spent your whole money, there's  nothing left!");

}
}
```


----------



## Runtime (27. Nov 2010)

Zeig mal die ganze Klasse.


----------



## XHelp (27. Nov 2010)

Was genau fehlt denn deiner Meinung nach? Was läuft nicht so wie du es erwartest?
Auf den ersten Blick ist die Bedingung der Schleife falsch. Du musst die Schleife solange laufen lassen, bis die sich in diesem Bereich befindet. Was du machst, ist einfach nur Grenzwerte abfragen, da müsste also schon irgendwas mit >=, <= auftauchen.

P.S. English sieht zwar immer unheimlich cool aus, aber dann sollte man auch alles in Englisch machen, inkl Variablennamen.


----------



## Sir_Sihou (27. Nov 2010)

ja es funktioniert einfach gar nicht.. 


er berechnet es nicht richtig, weder dass wenn der kurs auf die hälfte fällt, oder aufs doppelte steigt.

und der wert am letzten tag, funktioniert sowieso nicht.. 

fehlerdiagnose aaaaaaaaaaaaaah


----------



## XHelp (27. Nov 2010)

Der Wert am letzten Tag?
Im Grunde läuft das ganze auf folgendes hinaus:

```
int wert1=20;
int wert2=wert1;
do {
  wert2++;
  System.out.println("Neuer Wert: "+wert2);
} while (wert2<wert1*2);
System.out.println("Endgültiger Wert:" +wert2);
```
Du musst eben ein Bereich prüfen und nicht nur Grenzwerte


----------



## Sir_Sihou (27. Nov 2010)

ich glaub heut ist nicht mein tag..
^^

warum? ja ich weiß dass mir da noch etwas fehlt, doch nur wohin.. und das was du jetzt geschrieben hast, sind meine werte die für die folgenden tage eingelesen worden sind? 

oder wie?


----------



## XHelp (27. Nov 2010)

Ja, wert1 ist deine ursprüngliche Eingabe. wert2 ist dann jeweils der Wert an folgenden Tagen.
Bei dir funktioniert ja alles, sofern der Wert an irgendeinem Tag GENAU das Doppelte (oder die Hälfte) ist. Du musst aber abfragen, wenn der Wert an einem Tag größer als das Doppelte ist.


----------



## ARadauer (27. Nov 2010)

ich würd mir auch nochmal eine saubere Einrückung angewöhnen...


```
break;}
       
       else
```
was? Das ist sehr schwer zu lesen...


----------



## Sir_Sihou (27. Nov 2010)

jetzt bin ich komplett verwirrt.. 
also wie jetzt



```
public static void main(String[] arg) {
	
		
		Out.println("Welcome to a stock exchange quotation program.");   // title of the program
		
		double startprice, coursechange, profit, loss;     
		Out.println("Please enter your purchase price ");  
		startprice = In.readInt();
		int day = 0;
			
		do{	day = day +1;
			Out.println("How did your share price change next day? "); 
			coursechange = In.readInt();          
		if(coursechange <= (startprice/2.0)){Out.println("You should sell the stock now!"); 
		   loss = ((startprice - coursechange));break;
		   Out.println("You've a loss of " + loss); }
		else if (coursechange > (startprice*2.0)) {Out.println("You should sell the stock now!"); 
			profit = (startprice - coursechange);
			Out.println("You've a profit of " + profit);break;}
	  } while (?);
		  	

	}
	}
```


was gehört dann bei while? mannoo


----------



## XHelp (27. Nov 2010)

So wie es bei dir aussieht: 
	
	
	
	





```
while (true)
```
Ich dachte aber eher an sowas:

```
do{
  Out.println("How did your share price change next day? "); 
  coursechange = In.readInt();          
} while (coursechange > (startprice/2.0) && coursechange < (startprice*2.0));
double difference = startprice - coursechange;
if (difference<0) {
  Out.println("You should sell the stock now!"); 
  Out.println("You've a profit of " + (-difference));
} else {
  Out.println("You should sell the stock now!"); 
  Out.println("You've a loss of " + difference);
}
```


----------



## Sir_Sihou (27. Nov 2010)

funktioniert aber immer noch nicht.. richtig, wie in der angabe.. 

ist schon nervig... ich weiß.. aber ich wills ja wirklich lernen. nur funktionierts halt nicht so ganz :/


----------



## XHelp (28. Nov 2010)

Was *GENAU* funktioniert denn nicht?


----------



## dehlen (5. Dez 2010)

es kann doch auch nicht funktionieren... du prüfst nur ob der wert genau das doppelte oder die hälfte ist du musst aber den kompletten bereich abdecken also nicht wann ist es genau die hälfte sondern wann ist es kleiner als die hälfte

und bitte mal nähere beschreibungen


----------

