Du verwendest einen veralteten Browser. Es ist möglich, dass diese oder andere Websites nicht korrekt angezeigt werden. Du solltest ein Upgrade durchführen oder ein alternativer Browser verwenden.
ich möchte gern zahlen sortieren und das klappt ja auch wunderbar, nun möchte ich aber auch Zahlen sortieren mit mehreren Punkten, also Gliederungszahlen z.B. 1.1.1, 4.1 usw.
nun komme ich irgendwie nicht so wirklich voran, vielleicht hat ja jemand von euch einen Vorschlag wie ich das umsetzen könnte, würde mich sehr über eine antwort freuen!
die if- else verzweigung is falsch, das else ist zuviel. weil in diesem fall wie du es gerade hast da würde er den wert der letzten schleife zurückgeben, weil die die eventuellen false werte in der nächsten schleife wieder überschreibst. also sollte sie folgendermaßen aussehen
Darum auch Strings...
Bei 10 fängt das Problem an, da diese dann halt immer noch hinter 2 kommen.
Eine andere Möglichkeit wäre die "Zahlen" zu spliten, und die Teile einzeln zu sortieren...
ich hab das jetzt mit dem Strin und der liste mal versucht aber der meckert, das Semikolon in der Stringdefinition an und ich finde nicht heraus warum!
geht das denn so nicht und wenn wie anders?
Code:
class Sort
{
public static void main (String [] args)
{
String l[]={"4.4" ,"1.2 " , "3.2.3";}; // hier will er das erste Semikolon nicht????
List l = new ArrayList();
l.add("4.4");
l.add("1.2");
l.add("3.2.3");
Collections.sort(l);
}
}
wie siehts denn nun aus, wenn ich mehrer gliederung über Console einfügen will....
ich gebe z.B. ein "1.2.3 Überschrift"
und danach ein weiterem punkt "1.1.1 Bla"
dann würde es doch am besten sein, wenn ich dies in eine Liste packe!
muss ich dann zuerst die Gliederung aufsplitten und dann in die liste oder umgekehrt!
weiß nicht genau wie ich da anfangen soll :cry:
wäre echt lieb wenn jemand nen großen denkanstoß hat für mich :wink:
public class MyClass {
public static void main(String[] a) {
List l = new ArrayList();
l.add("4.4.1.2");
l.add("1.2");
l.add("3.2.3");
l.add("5.3.2.4");
Collections.sort(l);
for (int n=0;n<l.size();n++) {
System.out.println(l.get(n));
}
}
}
public static String[] sortiereNachGliederungspunkten(String[] gliederung){
String[] enum = new String[gliederung.length];
int length = 0;
int max = 0;
for(int k = 0; k < enum.length; k++){
StringTokenizer st = new StringTokenizer(gliederung[k]);
enum[k] = st.nextToken();
if(length < enum[k].length()){
length = enum[k].length();
}
}
String[][] matrix = new String[gliederung.length][];
for(int k = 0; k < enum.length; k++){
StringTokenizer st = new StringTokenizer(enum[k], ".");
String[] token = new String[st.countTokens()];
int index = 0;
while(st.hasMoreTokens()){
String entry = st.nextToken();
if(max < entry.length()){
max = entry.length();
}
token[index++] = entry;
}
matrix[k] = token;
}
for(int k = 0; k < matrix.length; k++){
String str = "";
for(int c = 0; c < matrix[k].length; c++){
while(matrix[k][c].length() < max){
matrix[k][c] = "0" + matrix[k][c];
}
str += matrix[k][c];
}
while(str.length() < length){
str += "0";
}
enum[k] = str;
}
matrix = null;
HashMap map = new HashMap();
for(int k = 0; k < enum.length; k++){
map.put(enum[k], gliederung[k]);
}
Arrays.sort(enum);
String[] result = new String[gliederung.length];
for(int k = 0; k < result.length; k++){
result[k] = map.get(enum[k]).toString();
}
return result;
}
hatte mal das gleiche Problem und bei kamen Nummern über 10 vor. Vielleicht nicht gerade die cleverste Implementierung, aber soweit ich informaiert bin funktioniert sie.