Java Eclipse Schleifen

S

Shizou

Gast
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. :

Java:
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

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

Bzw.:

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 :D
 
S

Shizou

Gast
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:

Java:
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.
 
S

Shizou

Gast
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:
Java:
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? :)
 
S

SlaterB

Gast
> 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
Java:
for (int i ...
   for (int j ...  meist bis i oder so
         ..
   }
}
 

eRaaaa

Top Contributor
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 :D
 
Zuletzt bearbeitet:
S

Shizou

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

SlaterB

Gast
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,
 
S

Shizou

Gast
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.
Java:
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);
 
S

Shizou

Gast
Java:
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);
 
S

SlaterB

Gast
> 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?
 
S

Shizou

Gast
Java:
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

Top Contributor
Java:
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.

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?
 
S

Shizou

Gast
Eine kleine Starthilfe wäre nicht schlecht. ^^
Hab nur was kleines.
Java:
	wortlänge = Integer.valueOf(tf1.getText());
			String inputString = null;
			int laenge = inputString.length();
 

eRaaaa

Top Contributor
Naja, wenn du die Länge hast, wo ist das Problem? Eine Schleife die halt so oft mal iteriert:
Java:
	String s ="Hallo welt";
	for (int i = 0; i < s.length(); i++) {
	    System.out.println(s);
	}
 

eRaaaa

Top Contributor
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)
 

eRaaaa

Top Contributor
Ä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:
Java:
	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!
 

Neue Themen


Oben