String-Array rekursiv alphabetisch sortieren

Neue Frage »

Auf diesen Beitrag antworten »
Shizmo 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
 
Auf diesen Beitrag antworten »
eulerscheZahl

Bei "kleinsten Eintrag nach alphabetischer Ordnung" handelt es sich denke ich nicht um ein temporales "nach", sondern um ein "gemäß".
Sort wäre wohl gemogelt. Und du musst auch nicht das ganze Array sortieren, sondern nur den kleinsten Wert finden.
Ich würde den index des aktuellen Arrayelements mit übergeben. Dann rufst du rekursiv auf, um das Minimum aller nachfolgenden Einträge zu finden und vergleichst das mit dem aktuellen Wert (compareTo, nicht sort).
Auf diesen Beitrag antworten »
Shizmo

Hah, perfekt vielen Dank, genau diesen Denkanstoß habe ich gebraucht. Mein Code ist sicher nicht perfekt, aber er funktioniert.

Vielen Dank Gott
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »