# Was könnte bei folgenden Methoden falsch sein?



## Windows10 (6. Mrz 2016)

Ich will nicht das ihr die folgenden Aufgaben für mich löst, sondern mir Tipps gebt wo in meinem Code ein Fehler sein kann!!

Methode: char[][] getPolybiusMatrix
Aufgabe: Sollte mit den Buchstaben (siehe Bildanhang) gefüllt werden!

```
public static char[][] getPolybiusMatrix()
    {
        char[][]polybiusmatrix=new char[5][5];
        char c='A';
        for( c='A'; c<polybiusmatrix.length;c++)
        {
            for(char c2=c;c2<polybiusmatrix[c].length;c2++)
            {
                Out.print(polybiusmatrix[c][c2]);
                c2=(char)(c+1);
                if(c=='I')
                {
                    Out.println("I/J");
                }
            }
            Out.println();
        }
        Out.println(polybiusmatrix);
        return polybiusmatrix;
    }
```

Methode: String readText()
Aufgabe: Liest den zu verschlüsselten Text aus einer Datei. Dabei sind alle Leerzeichen Satz-und Sonderzeichen zu entfernen, sowie die Umlaute ß und J entsprechend zu ersetzen.

```
public static String readText(String filename)
    {
        In.open(filename);
        while(In.done())
        {
            String line=In.readString();
            Out.println(line);
            return line;
        }
        In.close();
        return "";
    }
```

Methode: void printTextSeparated(String text)
Aufgabe: Gibt den Text mit zwei Leerzeichen zwischen dem Text aus

```
public static void printTextSeparated(String text)
    {
        Out.println("Text: "+text);
    }
```

Methode: int[]transformToCode(String text, char[][]matrix)
Aufgabe: wandelt den Text in ein int-Array um

```
public static int[] transformToCode(String text, char[][]matrix)
    {
        int[]code=new int[matrix.length];
        for(int i=0; i<code.length;i++)
        {
            Out.println(code[i]);
        }
        return code;
    }
```

Methode: void printCode(int[]code)
Aufgabe: Gibt das int-Array aus

```
public static void printCode(int []code)
    {
        Out.print(code);
    }
```


----------



## Meniskusschaden (6. Mrz 2016)

Da sind noch einige Fehler enthalten bzw. in manchen Methoden ist einfach noch gar nichts zur Problemlösung programmiert. Was ist denn aktuell dein konkretes Problem? Oder anders gefragt: Warum glaubst du, noch nicht fertig zu sein?


----------



## Windows10 (6. Mrz 2016)

Meniskusschaden hat gesagt.:


> Da sind noch einige Fehler enthalten bzw. in manchen Methoden ist einfach noch gar nichts zur Problemlösung programmiert. Was ist denn aktuell dein konkretes Problem? Oder anders gefragt: Warum glaubst du, noch nicht fertig zu sein?


Mein aktuelles Problem ist, das es mir in der Methode char[][]getPolybusMatrix() das Array einfach nicht befüllen will!! Welche Methoden sind fehlerfrei?


----------



## Meniskusschaden (6. Mrz 2016)

Was ist deine Erwartungshaltung an diese for-Schleife:`for( c='A'; c<polybiusmatrix.length;c++)`? Aktuell versuchst du, sie solange zu durchlaufen, wie die char-Variable c einen Wert enthält, der kleiner als die Array-Länge ist. Im ersten Durchlauf wird also geprüft, ob der Buchstabe A kleiner als 5 ist.
EDIT: genauer gesagt wird geprüft, ob der ASCII-Code des Buchstaben A kleiner als 5 ist.


----------



## Windows10 (6. Mrz 2016)

Meniskusschaden hat gesagt.:


> Was ist deine Erwartungshaltung an diese for-Schleife:`for( c='A'; c<polybiusmatrix.length;c++)`? Aktuell versuchst du, sie solange zu durchlaufen, wie die char-Variable c einen Wert enthält, der kleiner als die Array-Länge ist. Im ersten Durchlauf wird also geprüft, ob der Buchstabe A kleiner als 5 ist.
> EDIT: genauer gesagt wird geprüft, ob der ASCII-Code des Buchstaben A kleiner als 5 ist.


Wie kann man diesen Fehler beheben? Es sollte das Alphabet ausgegeben werden!!! I und J an der gleichen Stelle!!


----------



## Meniskusschaden (6. Mrz 2016)

Du kannst beispielsweise zwei for-Schleifen mit je 5 Iterationen verschachteln (äußere Schleife für die Zeilennummer, innere für die Spaltennummer). Außerdem benötigst du eine char-Variable, die du vor Schleifenbeginn mit 'A' initialisierst und bei jedem inneren Schleifendurchlauf inkrementierst (Sonderbehandlung für 'J'). Dann hast du in der inneren Schleife Zeilennummer, Spaltennummer und passenden Buchstaben zur Verfügung, um die entsprechende Matrixzelle korrekt zu füllen.


----------



## Windows10 (6. Mrz 2016)

Meniskusschaden hat gesagt.:


> Du kannst beispielsweise zwei for-Schleifen mit je 5 Iterationen verschachteln (äußere Schleife für die Zeilennummer, innere für die Spaltennummer). Außerdem benötigst du eine char-Variable, die du vor Schleifenbeginn mit 'A' initialisierst und bei jedem inneren Schleifendurchlauf inkrementierst (Sonderbehandlung für 'J'). Dann hast du in der inneren Schleife Zeilennummer, Spaltennummer und passenden Buchstaben zur Verfügung, um die entsprechende Matrixzelle korrekt zu füllen.


Ist folgende Methode besser? 

```
public static char[][] getPolybiusMatrix()
    {
        char[][]polybiusmatrix=new char[5][5]; 
        for( int i=0; i<polybiusmatrix.length;i++)
        {
            for(int j=0;j<polybiusmatrix[i].length;j++)
            {
                char buchstabe='A';
                Out.print(polybiusmatrix[i][j]+buchstabe);
                if(buchstabe=='I')
                {
                    char buchstabe1='I';
                    char buchstabe2='J';
                    Out.print(buchstabe1+"/"+buchstabe2);
                }   
                buchstabe++;
            }
            Out.println();
        }
        Out.println(polybiusmatrix);
        return polybiusmatrix;
    }
```

Mit diesem Code wird es aber auch noch nicht befüllt!!


----------



## Meniskusschaden (6. Mrz 2016)

Du initialisierst buchstabe bei jedem Schleifendurchlauf neu mit 'A'. Das solltest du besser vor der Schleife machen, denn sonst nützt es ja nichts, dass du buchstabe inkrementierst. Ausserdem füllst du die Matrix noch nicht, deshalb ist die folgende Ausgabe nicht sinnvoll_:


		Java:In die Zwischenablage kopieren


Out.print(polybiusmatrix[i][j]+buchstabe);

__ Zur ersten Kontrolle würde ich hier nur folgendes ausgeben, damit du besser siehst, was passiert:_

```
Out.print(buchstabe);
```
_Allerdings kenne ich die Klasse Out nicht. Die kommt vermutlich vom Dozenten._


----------

