# Quadrat mit Diagonalen ausgeben



## Gast (17. Jan 2008)

Moin Leute, ich hab folgende(s) Aufgabe(Problem):

Erstelle ein Programm, das auf dem Bildschirm ein Quadrat mit Diagonalen mit Zeichen ausgibt. Die Seitenlänge soll dabei im Vorfeld eingegeben werden (auf sinnvolle Bereiche einschränken).

Bisheriger Quelltext: 




```
public static void main(String[] args)
	{
		try
		{
			int sideA = readSideA();
			String bla = square(sideA);
		}//end try
		catch(IOException ex)
		{
			System.out.println("Fehler beim Einlesen");
		}//end catch
		catch(NumberFormatException nfe)
		{
			System.out.println("Das ist keine Zahl");
		}//end catch
	}//end main
	
	public static int readSideA()
					throws IOException
	{
		BufferedReader userIn =
			new BufferedReader(  
	 		new InputStreamReader( System.in ));
	 		
	 	String readA = "";
		int sideA = 0; 	
	 	System.out.print("Bitte geben sie die Länge für seite a ein: ");
	 	readA = userIn.readLine();
	 	sideA = Integer.parseInt( readA );
 	
	 	return sideA;
	}//end readSideA

	public static String square(int sideA)
	{
		String bla = "";
		
		for ( int i = 1; i <= sideA; i++ ) 
		{ 
			for ( int j = 1; j <= sideA; j++ ) 
			{
				System.out.print( "*" );
			}
		
		
			for ( int k = 1; k <= (sideA - (sideA - 1)); k++ ) 
			{
				System.out.println( "*" );
			} 
						
			System.out.println(); 
		}
		
		return bla;
	}//end square
```


Meine Frage ist jetzt: Wie kann ich, möglichst einfach realisieren das für die eingegeben Seitenlänge die diagonalen gezeichnet werden, bzw weise wie kann ich es machen, das der Stern(*) bis zur mitte, pro zeile immer um eine Position verschoben wird und dann wieder zurück.

Ich erwarte keine Lösung sondern nur den ein oder anderen Denkanstoß.

Danke schonmal im vorraus


----------



## SlaterB (17. Jan 2008)

du hast x Zeilen, die du einer nach der anderen zeichnen musst,
erst malst du dir auf Papier auf, wie sie aussehen soll, dann ein Programm dazu

Zeile 1: ***************
Zeile 2: **---------------------
Zeile 3: *-*--------------------
Zeile 4: *--*-------------------
Zeile 5: *---*------------------
Zeile 6: *----*-----------------

Zeile 1 ist eh ein Sonderfall, bei Zeile 2-6 siehst so aus:
Zeile 2: String, kein Leerzeichen, Stern
Zeile 3: String, 1 Leerzeichen, Stern
Zeile 4: String, 2 Leerzeichen, Stern
Zeile 5: String, 3 Leerzeichen, Stern
Zeile 6: String, 4 Leerzeichen, Stern

du hast doch die Zeilennummer,
dann programmierst du einfach
Stern, (Zeilennummer-2) Leerzeichen, Stern
und dein Programm arbeitet für alle Zeilen korrekt,

das ist nur ein vereinfachtes Beispiel ohne zweite Diagonale und Ende,
die Zeilennummern können anders sein, der Leerzeichenabstand größer,
aber das Prinzip sollte klar sein:
überlege dir, wie jede Zeile aussehen muss und leite dann von
bekannten Zahlen (wie Zeilen-/ Spaltennummer) ab, was zu zeichnen ist


----------



## Gast (17. Jan 2008)

thx für die antwort, das ist dochmal ne professionelle hilfe


----------



## SlaterB (17. Jan 2008)

noch eine Arbeitserleichterung: 
wenn du noch 30x testen willst, was dein Programm ausgibt, 
dann willst du doch nicht jedesmal 'eine Länge für seite a eingeben'

setze im Programm in der Testphase
int sideA = 10;
und gut ist


----------



## gast (18. Jan 2008)

hier nun die lösung des problems:


```
public class DrawSquare
{
	public static void main(String[] args)
	{
		try
		{
			int size = readSize();
			String line = getLine(size);
			System.out.println(line);
			square(size);
			System.out.println(line);
		}//end try
		catch(IOException ex)
		{
			System.out.println("Fehler beim Einlesen");
		}//end catch
		catch(NumberFormatException nfe)
		{
			System.out.println("Das ist keine natürlich Zahl");
		}//end catch
	}//end main
	
	public static int readSize()
					throws IOException
	{
		BufferedReader userIn =
			new BufferedReader(  
	 		new InputStreamReader( System.in ));
	 		
	 	String read = "";
		int size = 0; 	
	 	System.out.print("Bitte geben sie die Länge für seite a ein (max. 80): ");
	 	read = userIn.readLine();
	 	size = Integer.parseInt( read );
	 	if(size > 80)
	 	{
	 		System.out.println("Zahl zu gross");
	 		System.exit(0);
	 	}
 	
	 	return size;
	}//end readSideA

	public static void square(int size)
	{	
		String line;
		int diaPos1 = 0;
		int diaPos2 = 0;
		
		for ( int i = 1; i < size - 1; i++ ) 
		{ 

			diaPos1 = i;
			diaPos2 = size - i - 1;
			line = getInnerLine(size, diaPos1, diaPos2);
//			line[diaPos1] = '*';
//			line[diaPos2] = '*';
			System.out.println(line); 
//			System.out.println(diaPos1 + " - " + diaPos2);

		}

	}//end square
	
	public static String getLine(int size)
	{
		String line = "";
		for(int i = 0; i < size; i++)
		{
			line += "*";
		}//end for
		
		return line;
	}//end getLine
	
	public static String getInnerLine(int size, int diaPos1, int diaPos2)
	{
		String innerLine = "";
		
		for(int i = 0; i < size; i++)
		{
			if((i == 0) || (i == size - 1) || (i == diaPos1) || (i == diaPos2))
			{
				innerLine += "*";
			}//end if
			else
			{
				innerLine += " ";
			}//end else	
		}//end for
		
		return innerLine;	
	}//end getInnerLine
}//end class
```


----------

