# 2dimensionales Array



## babuschka (26. Mrz 2012)

Hey Leute, ich wollte ein 2-dimensionales array schreiben, es soll alle geraden zahlen ausgeben, und immer da , wo es eine ungerade zahl gibt soll es ne "0" hinzufügen
Hey Leute könnt ihr mir mal sagen , wieso das array nicht funktioniert:
Es soll nur alle geraden zahlen ausgeben, und immer da , wo es eine ungerade zahl gibt soll es ne "0" hinzufügen, 

Java Code: 

```
public class g{
	public static void main (String[]args){
		
		String array[][]=new String [10][10];
		for(int i=0;i<10;i++){
			for(int j=0;j<10;j++){
	if(i+j%2==0){
	System.out.print(array[i][j]+" " );
	
	}
	
	else{
	System.out.print("0");
	
			}
			}
		System.out.println();
		}
		
	}
}
```
könnt ihr mir da helfen? ich glaub ich hab hier einiges falsch nur weiß nicht genau was
danke im vorraus


----------



## nillehammer (26. Mrz 2012)

-In den if-Zweig schreibe:

```
System.out.println(array[i][j]);
```
- In den else-Zweig schreibe:

```
System.out.println(0);
```
- Überprüfe Deine if-Bedingung. Die sieht merkwürdig aus. Du prüfst, ob die Summe aus Zeilen- und Spaltenindex gerade ist. Willst Du das wirklich? Oder willst Du prüfen, ob der aktuelle Wert gerade ist?


----------



## VfL_Freak (26. Mrz 2012)

Hallo ako,

bin mir auf die Schnelle nicht ganz sicher, denke aber, das Modulo stärker bindet !
Versuch' mal 


```
if( (i+j) % 2 == 0 )
```

Gruß
Klaus


----------



## nillehammer (26. Mrz 2012)

VFL_Freak hat gesagt.:
			
		

> bin mir auf die Schnelle nicht ganz sicher, denke aber, das Modulo stärker bindet !


Stimmt, VFL_Freak hat Recht. Ist mir garnicht aufgefallen;(


----------



## nillehammer (26. Mrz 2012)

Und was mir noch grad auffält. In dem Array stehen überall Nullen. int-Arrays werden nämlich defaultmäßig mit 0 in jedem Feld initialisiert.


----------



## babuschka (26. Mrz 2012)

danke für die antworten 
meint ihr es so:


```
public class g{
public static void main (String[]args){
 
int array[][]=new int [10][10];
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){

if((i+2)%2==0){
System.out.println(array[i][j]);
} else {
System.out.println(0);
}
 
}
}
}
}
```

also das funktioniert immer noch nicht so ganz hmm


----------



## nillehammer (26. Mrz 2012)

> if((i+2)%2==0){


Was soll das jetzt für eine Bedingung sein? Nochmal die Frage: Willst Du prüfen, ob der aktuelle aus dem Array ausgelesene Wert gerade ist oder irgend was anderes? Das müsstest Du dann bitte genau sagen.


----------



## babuschka (26. Mrz 2012)

also ich hab ja 100 felder in dem array, und da wo eine gerade zahl ist , soll die gerade zahl ausgegebene werden, aber da wo ne ungerade zahl ist soll ne 0 hin

klappt leider immer noch nicht so ganz


----------



## nillehammer (26. Mrz 2012)

Gut, also willst Du den aus dem Array ausgelesenen Wert überprüfen und nicht "Laufvariable i plus 2". Dann muss die Bedingung so aussehen:

```
if (array[i][j] % 2 ==0)
```
Mit Deinem aktuellen Array:

```
int array[][]=new int [10][10];
```
wirst Du aber nur Nullen sehen, weil er nur Nullen enthält. Für sinnvollere Testergebnisse solltest Du Deinen Array mit etwas anderem füllen als Nullen.


----------



## babuschka (26. Mrz 2012)

also es soll so sein:

```
public class g{
public static void main (String[]args){
 
int array[][]=new int [10][10];
for(int i=0;i<10;i++){
for(int j=0;j<10;j++){
int zahl=10*i+j;
if (zahl%2==0){
array[i][j]= zahl;
}

System.out.print(array[i][j] + " ");
}
System.out.println();
}
 
}
}
```

aber kann mir jemand sagen wieso das in der zeile nur bis 9,19,29,39 usw. geht aber nicht bis 10,20,30 usw.???


----------



## nillehammer (26. Mrz 2012)

Array-Indieces fangen bei 0 an zu zählen. Ein Array der Länge 10 hat also die Indices 0 bis 9. Und langsam fühl ich mich etwas ver***t. Du machst im Code immer was völlig anderes als, das was Du in Deinem Text schreibst, was Du möchtest. Das macht es extrem schwer, zu helfen. Ich bin jetzt raus. Viel Spaß noch


----------



## VfL_Freak (26. Mrz 2012)

Moin,



ako hat gesagt.:


> aber kann mir jemand sagen wieso das in der zeile nur bis 9,19,29,39 usw. geht aber nicht bis 10,20,30 usw.???


Was genau meinst Du denn mit "in der Zeile" ???:L

Nun gehen ja Deine Zählvariablen von 0 - 9 und nicht von 1 - 10 (warum im Übrigen für Arrayindexe völlig richtig ist). Du solltest dann aber für die zu prüfenden Zahlen jeweils inkrementieren!

Vlt. ist es so schon besser:

```
public class g
{
  public static void main (String[]args)
  {
    int array[][] = new int[10][10];
    for(int i=0; i<10; i++)
    {
      for( int j=0; j<10; j++ )
      {
        int zahl=10*i+j;  // entspr. zahl=(10*i) + j !!
                          // warum '*10' ???
                          // zudem: 10*0 + 0 bleibt 0!
                          // soll es hier vlt. eine 1 sein ?? 
        if (zahl%2==0)
        {
          array[i][j] = zahl;  // ok, ist 'ne gerade Zahl'
        }
        else
        {
          array[i][j] = 0;  // 'ne ungerade Zahl'
        }
        System.out.print(array[i][j] + " ");
      }
      System.out.println();
    }
  }
}
```

Welcher Zahlenbereich soll denn überhaupt bearbeitet werden ??

Gruß
Klaus


----------



## hüteüberhüte (26. Mrz 2012)

...habe dir mal eben eine kommentierte main geschrieben:

```
public static void main(String[] args) {

        int[][] iaa = new int[10][10];

        // befüllen (da jetzt jedes Element 0 ist)...
        for (int i = 0; i < iaa.length; i++) { // .lenght liefert 10, Schleife geht bis 9
            for (int j = 0; j < iaa[i].length; j++) { // .length liefert auch 10
                iaa[i][j] = i * 10 + j; // 0,...,9, 10, 11 usw. 99
            }
        }

        // alle ungeraden Elemente sollen 0 sein...
        for (int i = 0; i < iaa.length; i++) {
            for (int j = 0; j < iaa[i].length; j++) {
                if (iaa[i][j] % 2 == 1) {
                    iaa[i][j] = 0;
                }
                // else nicht benötigt
            }
        }

        // und ausgeben...
        for (int[] ia : iaa) {
            System.out.println(java.util.Arrays.toString(ia));
        }

    }
```
Ausgabe:

```
[0, 0, 2, 0, 4, 0, 6, 0, 8, 0]
[10, 0, 12, 0, 14, 0, 16, 0, 18, 0]
[20, 0, 22, 0, 24, 0, 26, 0, 28, 0]
[30, 0, 32, 0, 34, 0, 36, 0, 38, 0]
[40, 0, 42, 0, 44, 0, 46, 0, 48, 0]
[50, 0, 52, 0, 54, 0, 56, 0, 58, 0]
[60, 0, 62, 0, 64, 0, 66, 0, 68, 0]
[70, 0, 72, 0, 74, 0, 76, 0, 78, 0]
[80, 0, 82, 0, 84, 0, 86, 0, 88, 0]
[90, 0, 92, 0, 94, 0, 96, 0, 98, 0]
```
...ist das richtig so/so gewollt?


----------



## hüteüberhüte (26. Mrz 2012)

In diesen Fall würde es auch ganz ohne Modulo-Operator gehen (Begründung steht im Code):

```
public static void main(String[] args) {

        int[][] iaa = new int[10][10];

        for (int i = 0; i < iaa.length; i++) {
            for (int j = 0; j < iaa[i].length; j++) {
                iaa[i][j] = i * 10 + j;
            }
        }

        for (int i = 0; i < iaa.length; i++) {
            for (int j = 1; j < iaa[i].length; j += 2) { // Schrittweite 2
                iaa[i][j] = 0;
                /* 
                 * das ist möglich, 
                 * weil das Array mit den aufeinander
                 * folgenden Zahlen von 0 bis 99 gefüllt wurde,
                 * und feststeht,
                 * in/an/bei welchen Indices ungerade Zahlen sind
                 * 
                 */
            }
        }

        for (int[] ia : iaa) {
            System.out.println(java.util.Arrays.toString(ia));
        }

    }
```


----------



## xehpuk (26. Mrz 2012)

Dann kann man auch gleich nur jede gerade Zahl eintragen.

```
public static void main(String[] args) {
	int[][] iaa = new int[10][10];
	
	for (int i = 0; i < iaa.length; i++) {
		for (int j = 0; j < iaa[i].length; j+=2) { // 2er-Schritte
			iaa[i][j] = i * 10 + j;
		}
	}
	
	for (int[] ia : iaa) {
		System.out.println(java.util.Arrays.toString(ia));
	}
}
```


----------



## hüteüberhüte (26. Mrz 2012)

...ja, aber es geht doch darum, es so anschaulich wie möglich zu gestalten. Einmal jeder Arrayindex, einmal jeder Zweite und eine for-each-Schleife. Solange sich ako nicht näher dazu geäußert hat, sind es auch nur Vermutungen.


----------



## Firephoenix (28. Mrz 2012)

Kann mir mal jemand erklären warum der Thread auf einmal von babuschka mit 1.3k beiträgen ist und nicht mehr von ako mit 45 Beiträgen? 

Bei dem Thread ist das ja nichtmal so schlimm, aber gewisse Posts von ako aus dem anderem Thread hatten schon nicht mehr einen so netten Tonfall den man gerne in seiner Beitragsliste haben will.

Gruß


----------



## SlaterB (28. Mrz 2012)

babuschka hat die undankbare Aufgabe, alle Postings (meist freiwillig) gelöschter User aufzunehmen,
aber keine Sorge wegen Filter oder so, babuschka wird dich nicht von selber aus mit neuen Postings behelligen 

der sitzt in seinem babuschka-Haus, trinkt nur babuschka-Cola und überlegt, welche nächste Wahl die Piraten gewinnen müssen


----------



## hüteüberhüte (28. Mrz 2012)

ako/babuschka haben sich ja nicht mehr dazu geäußert. Vielleicht wurden die beiden Accounts unter babuschka zusammengefasst? Das könnte eine Möglichkeit sein. Aber in diesen Thread wurde doch gaaar nichts schlimmes geschrieben?


----------



## hüteüberhüte (28. Mrz 2012)

SlaterB hat gesagt.:


> babuschka hat die undankbare Aufgabe, alle Postings (meist freiwillig) gelöschter User aufzunehmen,
> aber keine Sorge wegen Filter oder so, babuschka wird dich nicht von selber aus mit neuen Postings behelligen
> 
> der sitzt in seinem babuschka-Haus, trinkt nur babuschka-Cola und überlegt, welche nächste Wahl die Piraten gewinnen müssen



Dann lässt sich ja nicht mehr erkennen/zurückverfolgen von wem die Beiträge ursprünglich stammten... Das ist natürlich auch eine Möglichkeit Spuren zu verwischen  Wird das bei jedem gelöschten User so gemacht? ([/OT])


----------



## SlaterB (28. Mrz 2012)

dieses Zurückverfolgen ist ja wohl auch nicht nötig, vorhandene Postings sollten sinnerhaltend reichen,
bevor noch mehr komische Fragen kommen: kann man sich doch alles mit etwas Ruhe denken, bei wirklich ernsten Interesse per PN nachfragen,
hier geschlossen


----------

