# Eingabe mit For schleife



## Der-Faule (18. Nov 2007)

Hallo und guten Tag Leute 

Da ich nicht mal wirklich wusste wie ich dieses Thema formulieren sollte, hatte ich auch nich wirklich ne Ahnung, wonach ich suchen soll, also bin ich ehrlich: Ich habe die Suche NICHT benutzt, den Grund hab ich ja schon gesagt^^ (und nein das liegt auch nicht an meinem Namen xD ) 

So, mein Problem:

Ich möchte, dass ich eine Zahl eingebe, und dann das Programm eine Eingabe macht, so oft wie ich halt da oben eingegeben hab. Ich kriege das zwar bislang so hin, dass ich einfach nur die Zahlen eingeben kann, ohne dass da irgendwas vor steht, allerdings möchte ich das so geregelt haben:

"Geben sie eine Zahl ein:" wird ausgegeben, man gibt die Zahl ein, drückt auf enter und es folgt die nächste Zeile, wo wieder "Geben sie eine Zahl ein:" ausgegeben wird und man die Zahl eingibt usw. Und dass ganze dann halt so oft, wie ich weiter oben eingegeben habe. Habe das bislang mit einer For-Schleife geregelt, und wenn ich jetzt hinschreibe "System.out.println("Geben sie eine Zahl ein"); dann gibt der (jetzt am beispiel wenn man oben 5 eingegeben hat) "Geben sie eine Zahl ein Geben sie eine Zahl ein Geben sie eine Zahl ein Geben sie eine Zahl ein Geben sie eine Zahl ein" aus, und danach kann ich dann was eingeben.

Hat wer ne Lösung?

(ich hoffe ihr könnt mir folgen^^) 

MfG Der-Faule


----------



## Gast (18. Nov 2007)

Hallo Fauler, 

es ist nicht ganz ersichtlich, was das Ziel ist. 

Daher wäre es recht gut, wenn Du den Code, den Du bereits hast einfach einmal postest. Dann kann man vielleicht erkennen, was das Ziel sein soll und wo das Problem liegt. 

ein fauler Helfer


----------



## Der-Faule (18. Nov 2007)

No Problemo  


```
import java.io.*;

class eingabe
{
	public static void main (String args[]) throws IOException
	{
	
	String Zeichenkette;
	int i;
	float price;
	int b;
	
	BufferedReader mull = new BufferedReader(new InputStreamReader(System.in));
System.out.print("Wieviele Gegenstände kaufen sie? "); //hier ist die Abfrage nach dem "Wie oft"
b = Integer.parseInt(mull.readLine());
System.out.println(b + " Gegenstände wollen sie also kaufen."); //das is nur ne bestätigung ohne weitere Bedeutung
System.out.println("_________________________________"); //Trennstrich damits übersichtlich bleibt xD
	
	for(i=0;i<=b-1;i++)
	System.out.println("Geben sie eine Zahl ein:");
         price = Float.parseFloat(mull.readLine());
        System.out.println("Es wurde " +  price + " eingegeben\n");
	
	}
	
}
```

So wie es jetzt wäre, würde der nach dem Trennstrich "Geben sie eine Zahl ein Geben sie eine Zahl ein Geben sie eine Zahl ein" ausgeben, würde ich das weglassen dann könnt ich ne Zahl eingeben, enter drücken, zahl eingeben, enter drücken und das solange wie ich bei Wie oft angegeben habe...


und ehm... nich über'n code lachen oder so, machs noch nit solange^^


----------



## Guest (18. Nov 2007)

ganz einfach:

um for-Scleifen, if Abfragen usw. immer ne {} machen!


----------



## Guest (18. Nov 2007)

ganz einfach:

um for-Scleifen, if Abfragen usw. immer ein {} machen!


----------



## Der-Faule (18. Nov 2007)

Hey das klappt  

Vielen dank


----------



## Der-Faule (18. Nov 2007)

neues Problem, verbunden damit... ich hoffe der Doppelpost geht in Ordnung...

kann ich es irgenwie hinkriegen, dass er dann für jeden einzelnen wert immer ne neue Variable anlegt?


----------



## Jango (18. Nov 2007)

Der-Faule hat gesagt.:
			
		

> kann ich es irgenwie hinkriegen, dass er dann für jeden einzelnen wert immer ne neue Variable anlegt?


Ja, mit einem Array.


----------



## Der-Faule (18. Nov 2007)

Der-Faule hat gesagt.:
			
		

> [...] machs noch nit solange^^



*hüstel* 

xD


----------



## Jango (18. Nov 2007)

http://www.galileocomputing.de/openbook/javainsel6/javainsel_03_009.htm#Xxx999776

*hüstel*


----------



## Der-Faule (18. Nov 2007)

Schonmal herzlichen Dank   


```
System.out.print(i + ": Geben sie den Preis vom "+i+". Artikel  ein: ");
         //price = Float.parseFloat(mull.readLine());
         prices[i] = Float.parseFloat(mull.readLine());
        System.out.println("   Artikel "+i+" kostet " +  prices[i] + " Euro.");
```

sooo funktioniert das noch nicht, habe im Deklarationsteil float[] prices; deklariert und jetz sagt er mir "variable prices might not have been initialized"

was hab ich übersehen/vergessen OO


----------



## Jango (18. Nov 2007)

Du hast das Array nicht initialisiert.
Sieht das bei dir so aus?

```
float[] prices = new float[10];
```
Sollte das nicht so sein, lies weiter - in 5 Minuten kann mans nicht begreifen...


----------



## Der-Faule (18. Nov 2007)

~.~ hatte es übersehen irgendwie, war wohl zu schnell beim lesen ^^ 

Jetzt tut's es so wie es sein soll, vielen dank


----------



## Der-Faule (18. Nov 2007)

Haha yay ich schon wieder  :autsch: 
Ich will ungern n neuen Thread deswegen erstellen, da es noch hiermit zusammenhängt, und es so übersichtlicher bleibt...

schlagt mich wenn ihr wollt   :lol:   :toll: 

Jetzt meine sehr einfallsreich formulierte Frage: Kann ich Variablen, die ich zwingend IN EINER For-Schleife deklariert habe, auch außerhalb, mit dem letzten Wert den sie hatte benutzen? 
Es stellt sich mir nämlich folgendes Problem:


```
i=0;
		
		for (i=0;i<=b;i++) 
	    {
	    	fullprize = prices[i]+prices[i+1];
		System.out.println(fullprize); 
		int k;
		k=0;
		 if (fullprize == 10) k++;
		 System.out.println("So oft hat es 10 ergeben: " + k);
	}
```

So sieht es nämlich wiefolgt aus:

[img=http://img3.imagebanana.com/img/qu68b71q/thumb/programm.png]

Ich spreche auf das "So oft hat es 10 ergeben" an. So wie der code jetzt steht, schreibt er es nach jedem addiertem Ergebnis.

schreibe ich es aber so:


```
i=0;
		
		for (i=0;i<=b;i++) 
	    {
	    	fullprize = prices[i]+prices[i+1];
		System.out.println(fullprize); 
		int k;
		k=0;
		 if (fullprize == 10) k++;
		 
	}
System.out.println("So oft hat es 10 ergeben: " + k);
```
Sagt der mir, dass k möglicherweise noch nicht initialisiert ist halt. Is auch klar, da es ja bislang nur in der For-schleife iist. Deklariere ich k allerdings vor der geschweiften Klammer von der For-Schleife, zeigt der mir diverse Fehlermeldungen von wegen class expected usw... darum die Frage, ob ich außerhalb dieser For-Schleife an den letzten Wert von k drankomme. 

Und noch etwas... wie auf dem Bild zu erkennen ist ist ganz am ende dieses java.lang.ArrayIndex.outofbounds blabla dings. Ich denke das hängt mit dem i+1 in der For-Schleife zusammen, da dort ja irgendwann das Feld zusammen ist und er deswegen sucht und blubb und dann halt Fehlermeldung^^ nur fällt mir bei weiß gott nich ein wie ich das umgehen soll >.<

Ach und, bevor jemand ankommt: "Ja passt ja zu deinem Namen, such selbst" oder sowas in der art^^ Wäre ich wirklich faul hätt ich das nicht so...relativ ausschweifend... eh... erklärt... ich glaub ihr wisst was ich meine^^


----------



## Jango (18. Nov 2007)

Der-Faule hat gesagt.:
			
		

> Kann ich Variablen, die ich zwingend IN EINER For-Schleife deklariert habe, auch außerhalb, mit dem letzten Wert den sie hatte benutzen?


Nein.


----------



## Der-Faule (18. Nov 2007)

Verdammt.

Andere Ideen?


----------



## Jango (18. Nov 2007)

Der-Faule hat gesagt.:
			
		

> Verdammt.
> 
> Andere Ideen?


Die Variable 'außerhalb' der Schleife deklarieren?


----------



## Der-Faule (18. Nov 2007)

Der-Faule hat gesagt.:
			
		

> Deklariere ich k allerdings vor der geschweiften Klammer von der For-Schleife, zeigt der mir diverse Fehlermeldungen  wie class expected usw...




```
class expected
```
 und 
	
	
	
	





```
not a statement
```
 meint er in der zeile wo ichs deklariert hab...


----------



## Shadeo (18. Nov 2007)

```
int k = 0;       // <--
      
      for (i = 0; i <= b; i++)
      {
          fullprize = prices[i] + prices[i+1];
          System.out.println(fullprize);
          
          if (fullprize == 10) k++;
      
      }

System.out.println("So oft hat es 10 ergeben: " + k);
```

Du musst k ganz ausserhalb der Schleife deklarieren, also vor dem "for(..)", nicht zwischen for(..) und {
(wenn ich dich recht verstanden hab)


----------



## Shadeo (18. Nov 2007)

sry wegen doppelpost, kann nicht mehr editieren. Hab mich nun angemeldet

noch was zum thema wegen der Exception:

Ich nehm an du willst in der Schleife die Preise aller Produkte zusammenzählen und in fullprice speichern?


```
for (i = 0; i < b; i++)       // <-- b = Anzahl der Artikel, d.h. du musst von 0 bis (Anzahl Artikel - 1) zählen
      {
          fullprize += prices[i];   // den aktuellen Preis zu fullprice addieren
          System.out.println(fullprize);
         
          if (fullprize == 10) k++;
     
      }
```


----------



## Der-Faule (21. Nov 2007)

So ich mach meinem Namen jetzt einfach mal alle Ehre und log mich einfach nich ein  :autsch: 

Zum ersten: Da sagt er mir dann wieder, dass k nicht initialisiert ist... ich denke, weil der Betrag ja in der For-Schleife festgelegt wird.

Zum zweiten: Er schreibt zwar nicht mehr diese Exception, aber er schreibt auch nur noch den jeweiligen Betrag hin 

Aber trotzdem vielen dank 

€: oh, ich bin ja ganich ausgeloggt XD


----------



## Shadeo (21. Nov 2007)

Der-Faule hat gesagt.:
			
		

> Zum ersten: Da sagt er mir dann wieder, dass k nicht initialisiert ist... ich denke, weil der Betrag ja in der For-Schleife festgelegt wird.



"nicht initialisiert" bedeutet, dass die Variable existiert, sie aber noch keinen Wert hat. Dadurch funktioniert k++ nicht (k kann nicht um 1 erhöht werden, weil k halt keinen Wert hat)


```
int k = 0;
```

so kannst du die Variable gleich bei der Deklaration initialisieren (Variable wird erzeugt und erhält gleich den Wert 0)


```
int i;

int k = 0; //<--

for(i = 0; i < 10; i++){

   k++; //<--
}

System.out.println(k);
```

So muss es funktionieren, sonst gibt es irgendwo anders in deinem Code ein Problem. Kannst den ja sonst mal posten



			
				Der-Faule hat gesagt.:
			
		

> Zum zweiten: Er schreibt zwar nicht mehr diese Exception, aber er schreibt auch nur noch den jeweiligen Betrag hin



Was bedeutet "den jeweiligen Betrag"? Was willst du genau ausgeben?

 bei meinem Code werden alle Preise zusammengezählt und dann ausgegeben. D.h. am Ende der Schleife hast du die Summe aller Preise. Bei den vorherigen Schleifendurchgängen hast du die Summe von price[0] bis price_.

Also zum Beispiel beim 3. Schleifendurchgang (i = 2): fullprize = price[0] + price[1] + price[2]
und diese Summe wird danach gleich ausgegeben_


----------

