In der Vorlesung wurde der sog. Gray-Code vorgestellt. In dieser Aufgabe soll von uns Studenten ein Generator
für Gray-Codes implementiert werden.
Erstellen Sie eine neue Klasse GrayCode.
a) Implementieren Sie zunächst die statische Klassenmethode int prevLength(int len). Diese Methode soll die Länge des nächst kleineren Gray-Codes zurückgeben. Hat ein Gray-Code die Länge len, so hat der nächst kleinere Gray-Code die Länge len/2 , wenn len durch zwei teilbar ist. Ansonsten ist die Länge des nächst kleineren Gray-Codes durch die größte 2er-Potenz bestimmt, die kleiner len ist.
b) Ergänzen Sie danach String[] generate(GrayCodeControl gcc, int len). Diese Methode erzeugt mittels Rekursion zuerst den nächst kleineren Gray-Code, um diesen anschließend zu einem Gray-Code Glen der Länge len zu erweitern. Die Basisfälle stellen hierbei die Gray-Codes G1 = {"0"} sowie G2 = {"0"; "1"} dar. Für die Länge len = 4 soll demnach die Zeichenkettenreihung G4 = {"00"; "01"; "11"; "10"} zurückgegeben werden.
ACHTUNG – WICHTIG: Gleich zu Beginn Ihrer generate müssen Sie die Methode gcc.logGenerate(gcc, len) aufrufen und ihr die Argumente des aktuellen Aufrufs übergeben. Diese Methode dient der Überprüfung Ihrer Implementierung und ist für die automatische Bewertung im EST essentiell!
MEIN CODE:
Wo ist der Fehler?
für Gray-Codes implementiert werden.
Erstellen Sie eine neue Klasse GrayCode.
a) Implementieren Sie zunächst die statische Klassenmethode int prevLength(int len). Diese Methode soll die Länge des nächst kleineren Gray-Codes zurückgeben. Hat ein Gray-Code die Länge len, so hat der nächst kleinere Gray-Code die Länge len/2 , wenn len durch zwei teilbar ist. Ansonsten ist die Länge des nächst kleineren Gray-Codes durch die größte 2er-Potenz bestimmt, die kleiner len ist.
b) Ergänzen Sie danach String[] generate(GrayCodeControl gcc, int len). Diese Methode erzeugt mittels Rekursion zuerst den nächst kleineren Gray-Code, um diesen anschließend zu einem Gray-Code Glen der Länge len zu erweitern. Die Basisfälle stellen hierbei die Gray-Codes G1 = {"0"} sowie G2 = {"0"; "1"} dar. Für die Länge len = 4 soll demnach die Zeichenkettenreihung G4 = {"00"; "01"; "11"; "10"} zurückgegeben werden.
ACHTUNG – WICHTIG: Gleich zu Beginn Ihrer generate müssen Sie die Methode gcc.logGenerate(gcc, len) aufrufen und ihr die Argumente des aktuellen Aufrufs übergeben. Diese Methode dient der Überprüfung Ihrer Implementierung und ist für die automatische Bewertung im EST essentiell!
MEIN CODE:
Java:
public class GrayCode {
public static int prevLength(int len){
if(len %2 == 0) return len/2;
int i=0;
while((int) Math.pow(2, i) < len) {
i++;
}
return (int) Math.pow(2, i-1);
}
public static String[] generate(GrayCodeControl gcc, int len) {
gcc.logGenerate(gcc, len);
if(len ==1) {
return new String [] {"0"};
}else if(len ==2) {
return new String[] {"0","1"};
}else {
String [] shortArray= generate(gcc,prevLength(len));
String[] returnArray = new String[len];
int j=0;
for(int i =0; i<returnArray.length; i++) {
if(shortArray.length>i) returnArray[i]=shortArray[i];
else {
returnArray[i]=shortArray[shortArray.length-1 -j];
j++;
}
}
for(int i=0; i<shortArray.length;i++) {
returnArray[i] = "0"+shortArray[i];
}
for(int i=returnArray.length-1; i>shortArray.length;i--) {
returnArray[i]= "1"+shortArray[i];
}
return returnArray;
}
}
}
Zuletzt bearbeitet von einem Moderator: