Geschrieben von Shizmo am 22.01.2016 um 14:57:
String-Array rekursiv alphabetisch sortieren
Hallo, habe ein kleines Problem, eine Teilaufgabe lautet:
| Zitat: |
public String getAlphabeticFirst()
//liefert "kleinsten" Eintrag nach alphabetischer Ordnung
//Voraussetzung: Liste nicht leer
//Die Methode soll rekursiv bzw. mit rekursiven Helper-Methoden implementiert werden. |
Hier mein Code, nur diese Methode, da der Rest ja unwichtig ist.
Also das String-Array wird im Konstruktor uebergeben, max = ist die Laenge des Arrays (sArray.length).
Also bei mir funktionierts wunderbar, allerdings bei diesem Abgabe-Programm kommt ein Runtime-Error, Fehlermeldung weiter unter.
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
|
//Instanzvariablen
private String[] sArray, copy;
private int max;
private int n = 0;
public String getAlphabeticFirst(){
if(sArray[0] == null){
return "";
}
else if(n == 0){
copy = new String[max];
}
//sArray wird rekursiv kopiert
if(n < max && sArray[n] != null){
copy[n] = sArray[n];
n++;
return getAlphabeticFirst();
}
//die Nulls werden durch z ersetzt
else if(n < max){
copy[n] = "z";
n++;
return getAlphabeticFirst();
}
//die Kopie wird alphabetisch sortiert
else{
Arrays.sort(copy);
n = 0;
return copy[0];
}
} |
|
Hier die undurchsichtige Fehlermeldung:
| code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
|
> java -classpath '/tmp/autoc-einfprog-0.5.5-33-g6ad7fba-plus/check-62-13-1453469752' -Duser.language=EN -Duser.region=US -Xmx512M Tester
test passed
time elapsed: 0.101s
Exception in thread "restricted" java.lang.ExceptionInInitializerError
at java.util.Arrays.sort(Arrays.java:469)
at StringList.getAlphabeticFirst(StringList.java:140)
at StringList.getAlphabeticFirst(StringList.java:136)
at StringList.getAlphabeticFirst(StringList.java:136)
at StringList.getAlphabeticFirst(StringList.java:136)
at StringList.getAlphabeticFirst(StringList.java:130)
at test.testGetAlphabeticFirst(test.java:471)
at test.testRandomList(test.java:109)
at test.run(test.java:24)
at Tester.run(Tester.java:112)
Caused by: java.lang.SecurityException: access to system property java.util.Arrays.useLegacyMergeSort denied.
at SM.checkPropertyAccess(SM.java:197)
at java.lang.System.getProperty(System.java:708)
at java.lang.Boolean.getBoolean(Boolean.java:238)
at sun.security.action.GetBooleanAction.run(GetBooleanAction.java:70)
at sun.security.action.GetBooleanAction.run(GetBooleanAction.java:49)
at java.security.AccessController.doPrivileged(Native Method)
at java.util.Arrays$LegacyMergeSort.(Arrays.java:387)
... 10 more |
|
Noch zur Erklärung, ich ersetze die Nulls durch z's, weil es sonst nicht sortieren kann (kommt eine Null-Pointer Exception).
So, was ist das Problem von dem Abgabe-Programm?
Kann es sein, dass es keine Lust auf Arrays.sort(); hat?
Das wäre zumindest mal die einfachste Lösung, dass Array zu sortieren.
Vielleicht ist aber mit
"//liefert "kleinsten" Eintrag nach alphabetischer Ordnung" was anderes gemeint?
Und wie könnte ich es sonst am besten alphabetisch Ordnen und zwar rekursiv.
LG
Geschrieben von Shizmo am 22.01.2016 um 16:33:
Hah, perfekt vielen Dank, genau diesen Denkanstoß habe ich gebraucht. Mein Code ist sicher nicht perfekt, aber er funktioniert.
Vielen Dank