# Java Eclipse Schleifen



## Shizou (14. Jan 2010)

Hallo.
Ich habe für übermorgen in Informatik Hausaufgaben auf.
Ich poste euch jetzt mal beide Aufgaben.

1.Schreibe ein Programm, das Sterne in Keilform ausgibt. Der Anwender gibt die Anfangszahl für die Sterne ein
und das Programm gibt Zeilen von Sternen aus, wobei jede Zeile einen Stern weniger hat als die
vorhergehende. Die Ausgabe erfolgt auf die Konsole.

2.Schreibe ein Programm, das einen Baum aus Sternen auf den Bildschirm ausgibt. Die Ausgabe erfolgt auf die
Konsole.

3.Schreibe ein Programm, das ein Wort einliest. Das Wort wird dann so oft ausgegeben, wie es Buchstaben hat.

4.Schreibe ein Programm, das zwei Worte einliest. Das Programm gibt dann beide Worte auf einer Zeile aus.
Dabei werden die Worte durch Punkte getrennt. Die Gesamtlänge der ausgegebenen Zeichen soll 30 betragen.

Ich habe mir bisher nur über die Aufgabe 1. und Aufgabe 3. Gedanken gemacht, aber ich krieg beide nicht so richtig hin.

Mein Ansatz zu Aufgabe 1. :


```
import java.awt.*;

import javax.swing.*;
import java.awt.event.*;


public class Schleife extends Frame implements ActionListener, TextListener
{
	TextField tf1 = null; 
	TextField tf2 = null; 
	
	int startwert;
	int endwert;
	
	public static void main(String[] args) {
	    Schleife schleife = new Schleife();

		}

	
	private void myLayout(Panel panel)
	  {
		  panel.setLayout(new FlowLayout(FlowLayout.CENTER));
		  
		  Panel operatorPanel = new Panel();
		 
		  Panel labelPanel = new Panel();
		  labelPanel.setSize(30, 30);
		  labelPanel.setLayout(new GridLayout(3,1));
		  
		  Panel editPanel = new Panel();
		  editPanel.setLayout(new GridLayout(3,1));
		  
		  Button     btWerte = new Button("Wert");
		  operatorPanel.add(btWerte);
		  btWerte.addActionListener(this); 
		  
		  Button     btSterne = new Button("Stern");
		  operatorPanel.add(btSterne);
		  btSterne.addActionListener(this);
		  
		  tf1 = new TextField("",40);
		  tf2 = new TextField("",40);
		  
		  tf1.setSize(50, 50);
		  editPanel.add(tf1);
		  
		  tf2.setSize(50, 50);
		  editPanel.add(tf2);
		  
		  panel.add(operatorPanel); //Dem Basispanel â€žpanelâ€œ wird der darÃ¼ber liegende Panel â€žoperatorPanelâ€œ hinzugefÃ¼gt.
		  panel.add(labelPanel);   //Dem Basispanel â€žpanelâ€œ wird der darÃ¼ber liegende Panel â€žlabelPanelâ€œ hinzugefÃ¼gt.
		  panel.add(editPanel);    //Dem Basispanel â€žpanelâ€œ wird der darÃ¼ber liegende Panel â€žeditPanelâ€œ hinzugefÃ¼gt.
		 
	  }


public Schleife() {

	// Eine Instanz von EinfacheZeichnung erstellen
	Frame wnd = new Frame("Einfaches Fenster");

	FlowLayout flLayout = new FlowLayout();
	Button btSterne = new Button("Sterne");
	btSterne.addActionListener(this);
	
	this.addWindowListener(new WindowClosingAdapter(true));
	this.setLayout(flLayout);
	Panel panel = new Panel();
	  myLayout(panel);
	  add(panel, BorderLayout.CENTER);
	  /**labelPanel.add(new Label("Zahl 1",Label.LEFT));
	  labelPanel.add(new Label("Zahl 2",Label.LEFT));*/
	  
	  Panel editPanel = new Panel();
	  editPanel.setLayout(new GridLayout(3,1));
          this.add(btSterne);

	this.setBackground(Color.WHITE);
	this.setSize(500, 500);
	this.setVisible(true);
}



	 public void actionPerformed( ActionEvent e )	//Fehler
	  {
		 if( e.getActionCommand().equals( "Wert" ))
	      {
		startwert = Integer.valueOf(tf1.getText());
		endwert = Integer.valueOf(tf2.getText());
		  
		  int i = startwert;
		  do
		  {
			  System.out.println("Ich zähle "+ i );
			  i = i + 1;
		  }while(i!=endwert+1);

	 }
		 
		 if( e.getActionCommand().equals( "Stern" ))
	      {
		startwert = Integer.valueOf(tf1.getText());
	
		  int i = startwert;
		  
		  
		  do
		  {
			
			  System.out.print(" * ");			  
			  
			  i = i + 0;
		  }while(i<=startwert);
		  
		  do
		  {
			
			  System.out.println(" * ");			  
			  
			  i = i - 1;
		  }while(i<=startwert);

	 }
		 
	  }

	public void textValueChanged(TextEvent e) {
		// TODO Auto-generated method stub
		
	}
	 }
```

Da ist noch was drin was uninteressant für die Aufgaben ist (Start-/Endwert).
Danke für eure Hilfe.


----------



## eRaaaa (14. Jan 2010)

Und was genau ist jetzt deine Frage?
Und kannst du vllt nur den wichtigen Teil posten?

Bzw.:



Shizou hat gesagt.:


> Da ist noch was drin was uninteressant für die Aufgaben ist (Start-/Endwert).



Sollt ihr überhaupt ein GUI bauen? 

Aufgabe 1:
Schreibe dir eine Methode die eine beliebige Anzahl an Sternen ausgibt.
[c]printStars(int stars){...}[/c]
 Dann erstellst du einfach eine Schleife, die von anzahlSterne bis >= 1 läuft und rufst jedesmal deine Methode mit i auf (gefolgt von einem Zeilenumbruch), das wars


----------



## Shizou (14. Jan 2010)

Das Problem ist, wenn ich es änder mit i>=startwert wird wie vorher in der Konsole werden unendlich Sterne
angezeigt und ich muss es stoppen damit ich was machen kann.

Das wichtige von der Schleife:


```
import java.awt.*;

import javax.swing.*;
import java.awt.event.*;


public class Schleife extends Frame implements ActionListener, TextListener
{
	TextField tf1 = null; 
	TextField tf2 = null; 
	
	int startwert;
	int endwert;
	
	public static void main(String[] args) {
	    Schleife schleife = new Schleife();

		}

	
	private void myLayout(Panel panel)
	  {
		  
		  Button     btSterne = new Button("Stern");
		  operatorPanel.add(btSterne);
		  btSterne.addActionListener(this);
		  
		  tf1 = new TextField("",40);
		  tf2 = new TextField("",40);
		  
		  tf1.setSize(50, 50);
		  editPanel.add(tf1);
		  
		  tf2.setSize(50, 50);
		  editPanel.add(tf2);


 
		 
		 if( e.getActionCommand().equals( "Stern" ))
	      {
		startwert = Integer.valueOf(tf1.getText());
	
		  int i = startwert;
		  
		  
		  do
		  {
			
			  System.out.print(" * ");			  
			  
			  i = i + 0;
		  }while(i>=startwert);
```

Der Quelltext ist jetzt zwar fehlerhaft aber das ist das wichtigste meiner Meinung nach.


----------



## eRaaaa (14. Jan 2010)

Probiers mal mit einer(oder zwei) for-Schleife(n) anstatt einer do-while


----------



## Shizou (14. Jan 2010)

Dasselbe hat mein Lehrer auch gesagt. xD
Er meint 2 For Schleifen.
Eine für die Sterne untereinander und die andere für die Menge.
Nur ich weiß nicht wir ich das machen soll ..

neuer Ansatz:

```
if( e.getActionCommand().equals( "Stern" ))
	      {
		  startwert = Integer.valueOf(tf1.getText());
			 	  
		  for (int i = 0+startwert; i >=startwert-1; i++)
		  {
		  System.out.println( "*" );
		  }
		  for (int i = 0; i <=startwert-1; i++)
		  {
		  System.out.print( "*" );
```

Was mach ich falsch?


----------



## SlaterB (14. Jan 2010)

> for (int i = 0+startwert; i >=startwert-1; i++)

diese Schleife macht für sich keinen Sinn, bei i++ kann die Bedingung doch nicht >= sein, eine solche Bedingung wäre entweder nie oder immer erfüllt (bis zum Überlauf des Zahlenbereiches)

1. Hinweis: nur sinnvollen Code ausprobieren, jede Codezeile muss wenigstens für sich selber ein bisschen Sinn ergeben
2. Hinweis: mit 2 Schleifen sind 2 Schleifen ineinander gemeint

```
for (int i ...
   for (int j ...  meist bis i oder so
         ..
   }
}
```


----------



## eRaaaa (14. Jan 2010)

Shizou hat gesagt.:


> Was mach ich falsch?



Probiers doch erstmal Stück für Stück ( so wie ich schon geschrieben habe)

Schreibe dir eine Methode mit einem Paramter der die Anzahl der Sterne repräsentiert.
Diese Methode druckt dann erstmal nur diese Anzahl in EINER Zeile. (dafür brauchst du eine for-Schleife)
Wenn du das hast, kannst du diese Methode ja einfach jedesmal immer wieder aufrufen (in einer neuen Schleife) mit einem anderem Paramter.

/edit: naja, oder meinetwegen auch gleich (ohne Methodenaufruf) verschachtelt


----------



## Shizou (14. Jan 2010)

Muss man die Schleifen ineinander machen oder geht das auch so wie ich es gemacht habe?


----------



## SlaterB (14. Jan 2010)

ach und 'erst alle Sterne der ersten Spalte untereinander, dann die der zweiten Spalte, ..' gibts nicht,
  System.out.println arbeitet zeilenbasiert, eine Zeile nach der anderen


> Muss man die Schleifen ineinander machen oder geht das auch so wie ich es gemacht habe? 

theoretisch kann man jeden Code auch auf andere Arten darstellen, 
es reicht gar nur eine Schleife wenn man nur geschickt genug mit den Indexen rechnet,
im Allgemeinen sind 2 ineinander aber verständlicher,


----------



## Shizou (14. Jan 2010)

Ich bin ein bisschen verwirrt. :S


----------



## Shizou (14. Jan 2010)

Also die Aufgabe 1 habe ich nun endlich geschafft, aber an Aufgabe 2 häng ich noch.
Die Konsole zeigt mir ne menge Fehler an wenn ich den Button drücke um den Baum anzuzeigen.

```
if( e.getActionCommand().equals( "Baum" ))
			 			 
				 startwert = Integer.valueOf(tf1.getText());
					endwert = Integer.valueOf(tf2.getText());
					  
					  int i = startwert;
					  do
					  {
						 System.out.println("          ****        ");
						 System.out.println("      ********      ");
						 System.out.println("     **********     ");
						 System.out.println("   ************    ");
						 System.out.println("     **********     ");
						 System.out.println("      ********      ");
						 System.out.println("         ****        ");
						 System.out.println("         ****        ");
						 System.out.println("         ****        ");
						 System.out.println("         ****        ");
					         System.out.println("         ****        ");
						 System.out.println("       ******       ");
						  i = i + 1;
					  }while(i!=endwert+1);
```


----------



## Shizou (14. Jan 2010)

```
if( e.getActionCommand().equals( "Baum" ))
			 			 
				 startwert = Integer.valueOf(tf1.getText());
					endwert = Integer.valueOf(tf2.getText());
					  
					  int i = startwert;
					  do
					  {
						 System.out.println("       ****        ");
						 System.out.println("     ********      ");
						 System.out.println("    **********     ");
						 System.out.println("   ************    ");
						 System.out.println("    **********     ");
						 System.out.println("     ********      ");
						 System.out.println("       ****        ");
						 System.out.println("       ****        ");
						 System.out.println("       ****        ");
						 System.out.println("       ****        ");
					     System.out.println("       ****        ");
						 System.out.println("      ******       ");
						  i = i + 1;
					  }while(i!=endwert+1);
```


----------



## SlaterB (14. Jan 2010)

> Die Konsole zeigt mir ne menge Fehler an wenn ich den Button drücke um den Baum anzuzeigen.

nenne doch ein paar davon,
wieso eigentlich startwert und endwert einlesen? in der Aufgabe lese ich das nicht,
und darf man sich die Form des Baums ausdenken?


----------



## Shizou (14. Jan 2010)

```
Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
	at java.lang.NumberFormatException.forInputString(Unknown Source)
	at java.lang.Integer.parseInt(Unknown Source)
	at java.lang.Integer.valueOf(Unknown Source)
	at Schleife.actionPerformed(Schleife.java:126)
	at java.awt.Button.processActionEvent(Unknown Source)
	at java.awt.Button.processEvent(Unknown Source)
	at java.awt.Component.dispatchEventImpl(Unknown Source)
	at java.awt.Component.dispatchEvent(Unknown Source)
	at java.awt.EventQueue.dispatchEvent(Unknown Source)
	at java.awt.EventDispatchThread.pumpOneEventForFilters(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForFilter(Unknown Source)
	at java.awt.EventDispatchThread.pumpEventsForHierarchy(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.pumpEvents(Unknown Source)
	at java.awt.EventDispatchThread.run(Unknown Source)
```

Das sind die Fehler die angezeigt werden.
Wenn ich Start-/Endwert lösche kommen ebenfalls Fehler.
Es kann aber sein wenn ich die jetzigen Fehler irgendwie behebe, dass die anderen auch nicht mehr existieren.


----------



## eRaaaa (14. Jan 2010)

Shizou hat gesagt.:


> ```
> Exception in thread "AWT-EventQueue-0" java.lang.NumberFormatException: For input string: ""
> at java.lang.NumberFormatException.forInputString(Unknown Source)
> at java.lang.Integer.parseInt(Unknown Source)
> ...



Tja, da wird wohl eines der beiden Textfelder leer sein wenn du dne Button drückst. Aber ich frage lieber noch einmal: Bist du dir sicher, dass du das ganze nicht eher als Konsolenprogramm (ohne GUI) programmieren sollst? Die Aufgaben scheinen ja eher zu den Anfangsaufgaben zu gehören und da schon mit GUI-Programmierung zu beginnen (wo man noch nicht mal Schleifen kann) ist doch schon recht unwahrscheinlich?


----------



## Shizou (14. Jan 2010)

Ich denke doch


----------



## Shizou (14. Jan 2010)

Aufgabe 2. beendet .


----------



## eRaaaa (14. Jan 2010)

Na und 3 und 4 sollten dann ja jetzt wohl auch keine Probleme bereiten?!


----------



## Shizou (14. Jan 2010)

Eine kleine Starthilfe wäre nicht schlecht. ^^
Hab nur was kleines.

```
wortlänge = Integer.valueOf(tf1.getText());
			String inputString = null;
			int laenge = inputString.length();
```


----------



## eRaaaa (14. Jan 2010)

Naja, wenn du die Länge hast, wo ist das Problem? Eine Schleife die halt so oft mal iteriert:

```
String s ="Hallo welt";
	for (int i = 0; i < s.length(); i++) {
	    System.out.println(s);
	}
```


----------



## Shizou (14. Jan 2010)

Also Aufgabe 3 hab ich nun auch geschafft, aber Aufgabe 4 lässt mich verzweifeln !!


----------



## eRaaaa (14. Jan 2010)

Och Mensch.
Du weißt doch nun wie man die Stringlänge ermittelt und wie man Schleifen schreibt.
Die Gesamtlänge soll 30 sein, also 

30-(string1+string2): so viele Punkte musst du nun zwischen diese beiden Strings ausgeben. Ist doch quasi dann genau so wie die Aufgabe davor, nur dass du halkt nicht die Länge des Strings nimmst, sondern eben das Ergebnis von oben und davor + dahinter noch die Strings ausgibt ?! (mittels Systemout.print(...))

(zum Einlesen der Worte eignet sich die Klasse Scanner)


----------



## Shizou (14. Jan 2010)

Uff. Nie mit Scanner gearbeitet.
Mit String ist es aber auch möglich oder?


----------



## eRaaaa (14. Jan 2010)

Ähh





> 4.Schreibe ein Programm, das zwei Worte einliest



Du sollst ja anscheinend die Strings erstmal einlesen ! (BufferedReader, Scanner etc.) und diese Strings dann so wie ich schon gesagt habe ausgeben(+ Punkte).

Da man eh tausend Beispiele zum Scanner findet (du wahrscheinlich nur zu fual bist selbst zu suchen *g*) kann ich dir auch ein Beispiel hier posten:

```
Scanner sc = new Scanner(System.in);
	System.out.println("Bitte zwei Strings eingeben");
	String s1 = sc.nextLine();
	String s2 = sc.nextLine();
```

Somit hast du zwei Strings eingelesen , den Rest solltest du nun aber wirklich allein schaffen, steht ja alles hier beschrieben!


----------

