# 2d array ausgeben



## Joptionpane (15. Jan 2012)

Morgen,

will das 1x1 ausgeben lassen mittels 2d array.
Jedoch krieg ich immer eine komische Ausgabe und ich komm nicht auf den Fehler.

Ausgabe soll so aussehen:

```
/* erwartetes Ausgabe des Programms:
     0     0     0     0     0     0
     0     1     2     3     4     5
     0     2     4     6     8    10
     0     3     6     9    12    15
     0     4     8    12    16    20
     0     5    10    15    20    25
0 kommt in der Tabelle 11 mal vor
6 kommt in der Tabelle 2 mal vor
333 kommt in der Tabelle 0 mal vor
*/
```


Ausgabe ist aberAb Zeile 5 Stimmt das Ergebnis perfekt, aber die 4 Zeilen davor müssen weg).

```
/*	0	0	0	0
	0	1	2	3
	0	2	4	6
	0	3	6	9
	0	0	0	0	0	0
	0	1	2	3	4	5
	0	2	4	6	8	10
	0	3	6	9	12	15
	0	4	8	12	16	20
	0	5	10	15	20	25
0 kommt in der Tabelle 11 mal vor
6 kommt in der Tabelle 2 mal vor
333 kommt in der Tabelle 0 mal vor*/
```


wie entsteht dieses 


```
0	0	0	0
1	2	3
2	4	6
3	6	9
```

und wie krieg ich es weg??


```
public static int häufigkeit(int wert, int[][] daten) {
		int x = 0;
		
		
		for (int i =0; i< daten.length; i++){
			for (int j =0;j< daten.length; j++){
				if (wert == daten[i][j]){
				x++;	
				}
			}
		}
		
		return x;
	}
	
	public static void ausgeben(int[][] daten) {
		int i,j;
		 for (i = 0; i < daten.length; i++) {
	           for (j = 0; j < daten.length; j++)
	        	
	        	   System.out.print("\t" + daten[i][j]);
	           
	          System.out.println( "");
		}
	}	
		 
	

	public static int[][] multiplikationstabelle(int n) {

		int[][] daten = new int[n+1][n+1];

		for (int i =1; i < daten.length; i++) {
			for (int j = 1; j < daten.length; j++) {

				daten[i][j] = i * j;

			}

		}
		return daten;
	}
```


----------



## irgendjemand (15. Jan 2012)

sorry ... auch wenn das jetzt etwas krass klingen mag und von denen die hier entscheidungsgewallt besitzen sicher nicht gern gesehen wird ...

ABER

ist google bei dir irgendwie gesperrt ... oder warum musst du wirklich bei jedem kleinen problem hier einen neuen thread auf machen ?

was ich bisher von deinen threads gelesen habe so hätten sich diese alle bestimmt sogar nur mit der SuFu hier in diesem board lösen lassen können ...
dafür hätte es noch nicht mal ne weltweite suche durch google gebraucht ...

zum problem selbst

auch wenn ich deinen code grausam finde *google mal bitte nach "java conventions" ... oder geht das auch nicht ?* kann ich jetzt so auf die schnelle keinen fehler sehen da der fehler vermutlich außerhalb der 3 geposteten methoden auftritt ...

kompletter source wäre hier sicher etwas hilfreicher ...

ansonsten ist deine "ausgabe" soweit korrekt


----------



## Joptionpane (15. Jan 2012)

irgendjemand hat gesagt.:


> sorry ... auch wenn das jetzt etwas krass klingen mag und von denen die hier entscheidungsgewallt besitzen sicher nicht gern gesehen wird ...
> 
> ABER
> 
> ...



habe ca. 10 Einträge über google gesucht, gab nur 1-2 Themen, die meinem ähnelten (wahrscheinlich waren meine Suchbegriffe nicht ganz zutreffend), nichts desto trotz bin ich nunmal ein Student im Anfangsstadium und lerne generell nachts, wodruch Hilfestellung von Kommilitonen vorerst wegfällt, da ich die Lösung gerne sofort hätte bzw Hilfe.
Außerdem ist dieser Bereich ja für Java Anfänger zugeschnitten, wodurch ich hier gerne Hilfe annehme.


Und eben hat ich mir den Code weiter unten angeschaut und tatsächlich lag es daran, dass der Dozent doch noch eine Ausgabe _*ausgeben(multiplikationstabelle(3));*_ miteingebaut hat, sie aber beim Vermerk nicht angegeben hat. Hatte mir seinen Code nicht angeschaut gehabt :autsch:


Und wieso ist der Code grausam? Habe doch nur 3x ne verschachtelte for-schleife benutzt (in 3 Methoden). ???:L


----------



## irgendjemand (15. Jan 2012)

Joptionpane hat gesagt.:


> Und wieso ist der Code grausam? Habe doch nur 3x ne verschachtelte for-schleife benutzt (in 3 Methoden). ???:L



naja das nicht mal ...
weil wenns um multi-dimensionale arrays geht hat man keine andere möglichkeit als entweder verschachtelte loops *iterativ* oder das ganze rekursiv zu bauen ... soweit passt das ja ..

aber

auch wenn java unicode beherrscht solltest du *wie auch bei so ziemlich allem was mit IT zu tun hat* vermeiden umlaute und sonderzeichen zu verwenden ...
java selbst hat damit keine probleme ...
die treten erst auf wenn du das ganze mal unter ner anderen plattform mit anderem charset und so weiter machen willst ...
es kann dann sein das aus deinem "ä" irgendwas 2-byte mäßiges wird wodurch sich dein nicht mehr compilen lässt ...
da fast alles was mit programmieren zu tun hat eh in englisch gehalten ist und daher gerade lokale sonderzeichen oder gar andere sprachen ignoriert werden sollte man sich beim programmieren zumindest am zeichenvorat der englischen sprachen halten ... also aus "ä" lieber "ae" machen ... das ist wenigstens charset-unabhänig da bereits im ASCII definiert

auch solltest du dich mal entscheide wie du variablen deklarierst ...

entweder wie in "häufigkeit" dierekt im kopf oder wie in "ausgeben" explizit ... aber innerhalb eines source-files alles bund mischen verschlechtert nur die lesbarkeit ...

auch ist die bezeichnung deiner methoden *gerade die letzte* nicht so super ... das wäre *nach OOP* eher ein fall für einen klassennamen und eine eigene klasse ... aber weder für eine methode noch als bezeichner eines (primitiven-)objektes ...

was das problem mit dem source deines dozenten angeht : hättest du gleich den kompletten source gepostet wäre es mir / wem anderst bestimmt aufgefallen das die ausgabe 2 mal erfolgt ...


----------



## njans (15. Jan 2012)

```
public class MathTable
{
	private int[][] table;
	
	
	public MathTable(int n)
	{
		table = calculateTableFromValue(n);
	}
	
	
	private int[][] calculateTableFromValue(int value)
	{
		int[][] newTable = new int[value+1][value+1];
		
		for (int i = 0; i < value+1; i++)
		{
			for (int j = 0; j < value+1; j++)
			{
				newTable[i][j] = i*j;
			}
		}
		return newTable;
	}
	
	
    public void printResults() 
    {
         for (int i = 0; i < table.length; i++) 
         {
               for (int j = 0; j < table.length; j++)
               {
            	   System.out.print("\t" + table[i][j]);
               }
               System.out.println();
        }
    } 
    
    
    public static void main(String[] args)
	{
		new MathTable(5).printResults();
	}
	
}
```

Hmm also bei mir geht es ohne Probleme


----------



## Joptionpane (15. Jan 2012)

irgendjemand hat gesagt.:


> naja das nicht mal ...
> weil wenns um multi-dimensionale arrays geht hat man keine andere möglichkeit als entweder verschachtelte loops *iterativ* oder das ganze rekursiv zu bauen ... soweit passt das ja ..
> 
> aber
> ...



Guten Abend schonmal und danke für deine Tipps,

aber, wie schonmal gesagt, die Methodennamen

_*public static int[][] multiplikationstabelle(int n) 
public static void ausgeben(int[][] daten)*_
etc.. sind bereits vom Dozenten vordefiniert, er stellt uns generell immer eine Klasse Online, die er im Prinzip fertig vor sich hat. Er löscht 2-5 Methoden (je nach schwierigkeit der Aufgabe) und setzt leere Methoden in die Aufgabe die wir dann befüllen sollen.  Die Namen sind also längst vergeben vom Dozenten, ich ändere da garnix.
Eine eigene Klasse sollten wir zu dieser Aufgabenstellung nicht benutzten. Manche Dozenten wollen uns nunmal einfach erst die Grundlagen beibringen, dass wir wissen wie das alles zusammenhängt.

Und wie gesagt, tut mir leid das ich den gesamten Code nicht reingestellt hab, dachte es liegt nur an meinem Code


----------



## njans (15. Jan 2012)

```
public static int[][] multiplikationstabelle(int n) 
    {
        int[][] newTable = new int[n+1][n+1];
        
        for (int i = 0; i < n+1; i++)
        {
            for (int j = 0; j < n+1; j++)
            {
                newTable[i][j] = i*j;
            }
        }
        return newTable;
    }
    
    
    public static void ausgeben(int[][] daten)
    {
         for (int i = 0; i < daten.length; i++) 
         {
               for (int j = 0; j < daten.length; j++)
               {
                   System.out.print("\t" + daten[i][j]);
               }
               System.out.println();
        }
    }
```

Dann passt man eben die Signatur an und nennt die Variable um, fertig!
Das dein Prof da ganz komische Namen hat und das ganze wenig mit OOP zu tun hat, ist wohl klar. 
Aber na gut, muss man eben mit leben.


----------



## Marco13 (15. Jan 2012)

irgendjemand hat gesagt.:


> ist google bei dir irgendwie gesperrt ... oder warum musst du wirklich bei jedem kleinen problem hier einen neuen thread auf machen ?



Ich stimme dir zwar zu, dass diese Frage kein Anlass sein sollte, einen Thread aufzumachen, aber ... gezielt nach sowas googlen ist auch schwierig.


----------

