# Einmaleins in 2D Array



## Cerberus81 (16. Nov 2009)

Hallo zusammen. 

Ich sitze hier gerade an einer Übungsaufgabe, bei der das Einmaleins bis n (ich habe mich hier für 100 entschieden) in ein rechteckiges, zweidimensionales Array ausgegeben werden soll.
Nun hatten wir 2D Arrays in der letzten Vorlesung angesprochen, aber ich steh hier gerade total auf dem Schlauch. 
Eigentlich kann man das Einmaleins ja in eine for Schleife packen, aber wie mache ich das hier? Ich habe jetzt erst einmal das Array initialisiert, also so:

class main {

public static void main(String args[]) {


	int einmaleins [] [] = new int [10] [10];

Und nun weiß ich schon nicht weiter. Das Array muss doch auch ein Static void bekommen, oder? Mache ich das vor dem public main? Also, ich vermute, dass ich hier einen Block schreiben muss, der eine Schleife enthält. Aber in der Form haben wir das bislang null besprochen.

Ich erwarte hier nicht, dass jemand anderes meine Aufgaben für mich löst, aber für jede Art von Tipp und Denkanstößen wäre ich super dankbar.


----------



## eRaaaa (16. Nov 2009)

Cerberus81 hat gesagt.:


> Hallo zusammen.
> 
> Ich sitze hier gerade an einer Übungsaufgabe, bei der das Einmaleins bis n (ich habe mich hier für 100 entschieden) in ein rechteckiges, zweidimensionales Array ausgegeben werden soll.
> Nun hatten wir 2D Arrays in der letzten Vorlesung angesprochen, aber ich steh hier gerade total auf dem Schlauch.


an sich sollte das dann in etwa so aussehen: Einmaleins ? Wikipedia
_tabellarische darstellung_


> Und nun weiß ich schon nicht weiter. Das Array muss doch auch ein Static void bekommen, oder?


nein, static void würde höchstens zu einer methode gehören, nämlich dann zu einer statischen methode ohne rückgabewert. da du das array abe rlokal(also innerhalb einer methode, hier: main-methode) initialisierst, ist das schon richtig so wie du das hast (auch keine modifier wie private, so ist schon ok)




> Also, ich vermute, dass ich hier einen Block schreiben muss, der eine Schleife enthält. Aber in der Form haben wir das bislang null besprochen.



jepp, du brauchst hier eine schleife und nochmal eine innerhalb der schleife. 
les dir dazu vllt folgendes durch:
Galileo Computing :: Java ist auch eine Insel (8. Auflage) – 3.10 Arrays

und schaue dir die darstellung im o.g. link an, und versuche nun dazu das ganze abzubilden!

bei konkreten fragen, frag nochmal


----------



## Cerberus81 (16. Nov 2009)

Ah, super, danke erstmal. Was mich bloß irritiert ist, dass über den Aufgaben als Hinweis steht: 

Damit die Prozeduren, die sie in den Aufgaben unten definieren, auch in main() aufgerufen werden können, müssen Sie vor dem Namen der Prozedur jeweils die Zauberworte static void schreiben. Beispiel: static void Schachbrettanzeigen(int zug) { … }


----------



## eRaaaa (16. Nov 2009)

ahso, ja, damit ist dann gemeint, dass du das ganze nicht direkt in die main methode schreiben sollst, sondern halt gleich in eine methode auslagerst. und in der main dann diese methode nur aufrufst(ist auch die elegantere lösung ;D ) (damit du aus der main-methode deine methode aufrufen kannst, muss sie static sein! )

wahrscheinlich dann irgendwie sowas:

```
public static void main(String[] args) {
		einMalEinsAusgabe(10, 10);  //hier der aufruf de rmethode
	}

         
	public static void einMalEinsAusgabe(int breite, int hoehe) { //methodendeklaration
		int einmaleins[][] = new int[hoehe][breite];           //initialisiere array mit den übergebenene werten
		//hier bist du gefragt :)
	}
```


----------



## Cerberus81 (16. Nov 2009)

Jetzt habe ich es verstanden. Du bist mein Held! Danke für die gemachte Mühe. Ich glaube, jetzt sollte ich es hinbekommen.


----------



## Cerberus81 (16. Nov 2009)

Das Ganze sieht jetzt folgendermaßen aus:

class main {

public static void main(String args[]) {

	einmaleins(10, 10); 			// Aufruf der Methode weiter unten
      }

	static void einmaleins(int breite, int hoehe) {

	int einmaleins [] [] = new int [10] [10];

	//breite = 1;
	//hoehe = 1;

		for( hoehe = 1; hoehe <= 10; breite++)
{

			for( breite = 1; breite <=1; hoehe++)

{

				if( hoehe * breite < 10) System.out.print( " ");
				if( hoehe * breite < 100) System.out.print( " ");


				System.out.print( " " + breite * hoehe);

}


				System.out.println( "");
		}
}
	}


Das Problem ist nur, dass ich damit eine Endlosschleife erzeuge. Aber vom Prinzip her müsste das doch eigentlich soweit richtig sein, oder?


----------



## eRaaaa (16. Nov 2009)

ähh, öhh 
deine schleifen sind falsch.

also [c]for (hoehe = 1; hoehe <= 10; breite++)[/c] ...daran und an:
* bzw, du übergibst ja zudem auch noch hoehe + breite! solltest da andere bezeichner nutzen*
wirds liegne mit deiner endlosschleife 



```
for (hoehe = 1; hoehe <= 10; hoehe++) {

			for (breite = 1; breite <= 10; breite++)
```

sooo...

fehler waren:
a) hoehe++ mit breite++ und umgekehrt verwechselt,
b) bei der 2. schleife hattest du nur <=1, anstatt 10 stehen

tip: du übergibst ja der methode die höhe + breite. die solltest du benutzen, bzw zumindestens, in dne schleifen, nicht fest 10 reinschreiben, sondern die längen von dme array.


----------



## Cerberus81 (16. Nov 2009)

Ich habs. Danke nochmal für die ausführliche Hilfe!


----------



## Cerberus81 (16. Nov 2009)

> tip: du übergibst ja der methode die höhe + breite. die solltest du benutzen, bzw zumindestens, in dne schleifen, nicht fest 10 reinschreiben, sondern die längen von dme array.



Also anstatt <=10 einmaleins.length schreiben meinst du?


----------



## eRaaaa (16. Nov 2009)

naja, also imo sind da eig. noch mehre sachen zu verbessern ,
denn

a) du schreibst ja garnix ins array  (du benutzt das ja auch garnicht) also momentan könntest du das ja genauso gut weglassen, aber das ist ja denk ich mal nicht der sinn. du sollst schon die werte ins array schreiben. (vllt sogar zurückgeben, also nicht void, sondenr int[][] und am ende return einmaleins; weiss ich aber nicht genau. geht aus deiner beschreibung imo nicht genau heraus)

b) wenn du es dann benutzt, nicht mit fest 10, sondern eher [c]int einmaleins[][] = new int[hoehe][breite];[/c]

c) schleifenvariablen, haben in der regel namen wie i, oder j o.ä.
[c]for (int i = 1; i <= xxxxx; i++) {[/c]  xxxx dann halt durch breite und hoehe ersetzen
und fangen eig. auch in der regel bei 0 an  (index eines arrays fängt auch bei 0 an !!!)

d)die if-abfragen müsstest du dann natürlich auch anpassen, wobei ich mich eh frage, wieso du das so machst  (schreib doch vllt einfach vor deine ausgabe ein "\t" ...steht für ein tab.


----------

