Hallo.
Für einen gegebenen String in Form "2000 10003 1234000 44444444 9999 11 11 22 123" soll ein String zurückgegeben werden, welcher nach aufsteigender Summe der Ziffern(zB 2000 = 2, 11 = 2, 22 = 4, 123 = 6) sortiert ist also in diesem Beispiel "11 11 2000 10003 22 123 1234000 44444444 9999"
Mein Code steht unten, es funktoniert soweit auch, allerdings gibt es noch eine weitere Bedingung die lautet, falls die Summe zweier Zahlen gleich ist sollen diese als "Strings" verglichen werden. Also 11 und 2000 hat beides als Summe 2. 1 kommt aber vor 2 also muss 11 vor 2000 stehen. Mein Code lässt die Liste unverändert (Ich speichere den String erst in eine Liste welche ich dann sortiere) also kommt die Zahl vorher, die auch vorher im String steht was ich nicht haben möchte.
Könnte mir jemand helfen ? Ich denke ich muss was in der compare Methode ändern aber mir will nicht klar werden was...
Für einen gegebenen String in Form "2000 10003 1234000 44444444 9999 11 11 22 123" soll ein String zurückgegeben werden, welcher nach aufsteigender Summe der Ziffern(zB 2000 = 2, 11 = 2, 22 = 4, 123 = 6) sortiert ist also in diesem Beispiel "11 11 2000 10003 22 123 1234000 44444444 9999"
Mein Code steht unten, es funktoniert soweit auch, allerdings gibt es noch eine weitere Bedingung die lautet, falls die Summe zweier Zahlen gleich ist sollen diese als "Strings" verglichen werden. Also 11 und 2000 hat beides als Summe 2. 1 kommt aber vor 2 also muss 11 vor 2000 stehen. Mein Code lässt die Liste unverändert (Ich speichere den String erst in eine Liste welche ich dann sortiere) also kommt die Zahl vorher, die auch vorher im String steht was ich nicht haben möchte.
Könnte mir jemand helfen ? Ich denke ich muss was in der compare Methode ändern aber mir will nicht klar werden was...
Java:
public static String orderWeight(String strng) {
Scanner sc = new Scanner(strng);
String helper = null;
StringBuilder sb = new StringBuilder();
ArrayList<Integer> hel = new ArrayList<Integer>();
while(sc.hasNext()){
helper=sc.next();
hel.add(Integer.parseInt(helper));
}
sc.close();
hel.sort(new Comparator<Integer>(){
@Override
public int compare(Integer a, Integer b) {
String c = String.valueOf(a);
String d = String.valueOf(b);
Integer suma =0;
Integer sumb =0;
for(int i=0;i<c.length();i++){
suma += Character.getNumericValue(c.charAt(i));
}
for(int i=0;i<d.length();i++){
sumb += Character.getNumericValue(d.charAt(i));
}
return suma.compareTo(sumb);
}});
for(int i=0;i<hel.size();i++){
if(i==hel.size()-1) sb.append(hel.get(i));
else
sb.append(hel.get(i)+" ");
}
return sb.toString();
}