Registrierung Kalender Mitgliederliste Teammitglieder Suche Häufig gestellte Fragen Zur Startseite

Informatiker Board » Themengebiete » Praktische Informatik » String-Array rekursiv alphabetisch sortieren » Hallo Gast [Anmelden|Registrieren]
Letzter Beitrag | Erster ungelesener Beitrag Druckvorschau | An Freund senden | Thema zu Favoriten hinzufügen
Zum Ende der Seite springen String-Array rekursiv alphabetisch sortieren
Autor
Beitrag « Vorheriges Thema | Nächstes Thema »
Shizmo
Tripel-As


images/avatars/avatar-69.gif

Dabei seit: 16.10.2015
Beiträge: 174

String-Array rekursiv alphabetisch sortieren Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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
22.01.2016 14:57 Shizmo ist offline Beiträge von Shizmo suchen Nehmen Sie Shizmo in Ihre Freundesliste auf
eulerscheZahl eulerscheZahl ist männlich
Foren Gott


Dabei seit: 04.01.2013
Beiträge: 2.859

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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).

__________________
Syntax Highlighting fürs Board (Link)
22.01.2016 15:07 eulerscheZahl ist offline Beiträge von eulerscheZahl suchen Nehmen Sie eulerscheZahl in Ihre Freundesliste auf
Shizmo
Tripel-As


images/avatars/avatar-69.gif

Dabei seit: 16.10.2015
Beiträge: 174

Auf diesen Beitrag antworten Zitatantwort auf diesen Beitrag erstellen Diesen Beitrag editieren/löschen Diesen Beitrag einem Moderator melden       Zum Anfang der Seite springen

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

Vielen Dank Gott
22.01.2016 16:33 Shizmo ist offline Beiträge von Shizmo suchen Nehmen Sie Shizmo in Ihre Freundesliste auf
Baumstruktur | Brettstruktur
Gehe zu:
Informatiker Board » Themengebiete » Praktische Informatik » String-Array rekursiv alphabetisch sortieren