(Integer) Liste nach aufsteigender Summe der Ziffern sortieren (mit Bedingung)

L

lennero

Bekanntes Mitglied
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...

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();
    }
 
Flown

Flown

Administrator
Mitarbeiter
Weißt du was eine Comparable::compareTo Methode als Rückgabe liefert?
 
X

Xyz1

Gast
Mach aus den Strings KEINE Integers... Lasse das Strings - dann ist es wesentlich einfacher und liegt auf der Hand.

Bearbeitung: Und sorry an @Flown das ich da reingegrätscht habe. :eek:
 
L

lennero

Bekanntes Mitglied
Weißt du was diese Werte bedeuten?

Falls -1 zurückgegeben wird ist suma (in meinem Fall) kleiner, falls 0 sind sie gleich, und falls 1, ist suma größer.

Nach diesem Schema wird dann aufsteigend sortiert.

Mach aus den Strings KEINE Integers... Lasse das Strings - dann ist es wesentlich einfacher und liegt auf der Hand.

Bearbeitung: Und sorry an @Flown das ich da reingegrätscht habe. :eek:

Wie summiere ich denn die Ziffern ohne Strings draus zu machen ?
 
H

Harry Kane

Top Contributor
Mach aus den Strings KEINE Integers... Lasse das Strings - dann ist es wesentlich einfacher und liegt auf der Hand.
Wie summiere ich denn die Ziffern ohne Strings draus zu machen ?
Dein Rückfrage passt nicht so ganz zum Hinweis.
Deine Hin-und her-Konvertiererei ist arg umständlich. Du startest mit einem String. Dieser wird zerlegt, und die Teilstrings in Integer-Instanzen konvertiert und in eine ArrayList<Integer> gespeichert. Dann schreibst du einen Comparator<Integer>, der im ersten Schritt aus den Integer-Objekten wieder Strings macht.
Du kannst deine Auswertung auch nur mit den Originalstrings machen.
 
L

lennero

Bekanntes Mitglied
Dein Rückfrage passt nicht so ganz zum Hinweis.
Deine Hin-und her-Konvertiererei ist arg umständlich. Du startest mit einem String. Dieser wird zerlegt, und die Teilstrings in Integer-Instanzen konvertiert und in eine ArrayList<Integer> gespeichert. Dann schreibst du einen Comparator<Integer>, der im ersten Schritt aus den Integer-Objekten wieder Strings macht.
Du kannst deine Auswertung auch nur mit den Originalstrings machen.

ups. ja das ist mir jetzt auch klar geworden. hab mich dadurch auch selbst total verwirrt.

durch die abfrage

if (suma==sumb) return c.compareTo (d);

konnte ichs aber dann doch lösen
 
Flown

Flown

Administrator
Mitarbeiter
Das ist ein schönes Beispiel für OOP. Hier sollte das Single-Responsible-Principle herrschen. Ein Comparator sollte nicht konvertieren und dann auch noch sortieren. Das sollte eine eigene Klasse übernehmen und die Konvertierung in eine Ziffernsumme nur einmal tätigen.
Dann könnte das so aussehen:
Java:
import java.util.*;

public class Test {
  public static void main(String[] args) {
    String s = "2000 10003 1234000 44444444 9999 11 11 22 123";
    String[] strings = s.split("\\s+");
    Digits[] digits = new Digits[strings.length];
    for (int i = 0; i < strings.length; i++) {
      digits[i] = Digits.parse(strings[i]);
    }
    System.out.println(Arrays.toString(digits));
    Arrays.sort(digits);
    System.out.println(Arrays.toString(digits));
  }
}

class Digits implements Comparable<Digits> {
  private final String digits;
  private final int digitSum;
  
  private Digits(String digits, int digitSum) {
    this.digits = Objects.requireNonNull(digits);
    this.digitSum = digitSum(digits);
  }
  
  @Override
  public int compareTo(Digits o) {
    int compare = Integer.compare(digitSum, o.digitSum);
    if (compare == 0) {
      return digits.compareTo(o.digits);
    }
    return compare;
  }
  
  @Override
  public String toString() {
    return digits;
  }
  
  public static Digits parse(String s) {
    Objects.requireNonNull(s);
    final int digitSum = digitSum(s);
    return new Digits(s, digitSum);
  }
  
  private static int digitSum(String s) {
    int sum = 0;
    for (int i = 0; i < s.length(); i++) {
      final char c = s.charAt(i);
      if(!Character.isDigit(c)) {
        throw new IllegalArgumentException("Input must only consist of digits.");
      }
      sum += Character.getNumericValue(c);
    }
    return sum;
  }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Baum aus Integer Liste erstellen Java Basics - Anfänger-Themen 0
B Liste von Integer -> Nächster Wert bekommen Java Basics - Anfänger-Themen 5
C Liste o.ä. erstellen mit <Integer, <Integer, String> Java Basics - Anfänger-Themen 7
D Summe aller Positiven Integer aus einer Liste mit ActionObject Java Basics - Anfänger-Themen 2
R Datentypen Liste mit Integer Java Basics - Anfänger-Themen 4
J Transformation zweier Integer in ein Double Java Basics - Anfänger-Themen 26
M Integer aus aus einer Klasse in andere speichern Java Basics - Anfänger-Themen 12
L Iterieren durch eine ArrayList. Integer Array wird übergeben Java Basics - Anfänger-Themen 17
D Fibonacci overflow integer Java Basics - Anfänger-Themen 8
J Eine Position im String durch einen Integer - Wert teilen Java Basics - Anfänger-Themen 5
S Integer Wert wird nicht übernommen Java Basics - Anfänger-Themen 2
V int zu Integer und String Java Basics - Anfänger-Themen 6
H Datentypen Was für eine Format verbirgt sich hinter dem Integer-Wert 053? Java Basics - Anfänger-Themen 2
M Regex zum Integer.parseInt Java Basics - Anfänger-Themen 4
J Problem beim vergleich von zwei Integer Java Basics - Anfänger-Themen 3
S Vergleichen ob der Integer der benutzt eingeben werden soll überhaupt ein int ist Java Basics - Anfänger-Themen 1
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
K String in Integer umwandeln Java Basics - Anfänger-Themen 4
G Überprüfen ob alle Ziffern von 1-9 in einem Integer vorhanden sind Java Basics - Anfänger-Themen 6
D integer negativen Wert abspeichern Java Basics - Anfänger-Themen 3
A Mit JComboBox Ergebnis einen Integer aus einer anderen Klasse aufrufen. Java Basics - Anfänger-Themen 2
J Methoden Moving a n integer matrix Java Basics - Anfänger-Themen 3
R Eingabe String umwandeln zu Integer Werten Java Basics - Anfänger-Themen 8
M Input/Output Java Swing: Prüft ob Text aus JTextField ausschließlich Integer enthält Java Basics - Anfänger-Themen 15
J Erhöhen eines Values als Integer bei gleichen Keys in HashMap Java Basics - Anfänger-Themen 12
UnknownInnocent Datentypen Integer ArrayList sortieren Java Basics - Anfänger-Themen 2
J Methoden Equals Methode für Integer und Objekte überschreiben? Java Basics - Anfänger-Themen 9
UnknownInnocent Bestimmten Integer Wert aus Array filtern Java Basics - Anfänger-Themen 2
L String in Integer umwandeln Java Basics - Anfänger-Themen 3
K Datentypen String zu Integer parsen Java Basics - Anfänger-Themen 2
S Integer aus Array filtern Java Basics - Anfänger-Themen 4
F Referenzvariable vom Typ "Integer" definieren. (Klausuraufgabe) Java Basics - Anfänger-Themen 5
M set Integer bzw. set null mit SQL DB Java Basics - Anfänger-Themen 9
H Bubblesort-Zwei Integer auf Dekade vergleichen. Java Basics - Anfänger-Themen 6
B Variablen integer im Array Java Basics - Anfänger-Themen 5
R Kompletten String umwandeln in Integer Java Basics - Anfänger-Themen 10
H 32-Bit Zahl (Integer) in eine IPv4 Adresse umwandeln? Java Basics - Anfänger-Themen 2
Orkanson Datentypen Integer in String umwandeln/hinzufügen Java Basics - Anfänger-Themen 3
O Datentypen Integer mit führender Null Java Basics - Anfänger-Themen 13
M Argument in Integer verwandeln und das Doppelte davon printen Java Basics - Anfänger-Themen 9
D Fehler: String zu Integer Java Basics - Anfänger-Themen 7
b1ck Integer initialisieren bei do-while-Schleife Java Basics - Anfänger-Themen 11
E Integer und Array übergeben Java Basics - Anfänger-Themen 9
W Fehler bei Integer.parseInt() Java Basics - Anfänger-Themen 4
R String in Integer Java Basics - Anfänger-Themen 11
D Komischer Fehler nach <Integer> List Java Basics - Anfänger-Themen 2
J Integer in Array einlesen Java Basics - Anfänger-Themen 14
J Warum ist das ein Unterschied (Integer / int) Java Basics - Anfänger-Themen 2
H Integer in Datei schreiben Java Basics - Anfänger-Themen 2
B OOP Cannot instantiate the type AuDList<Integer> Java Basics - Anfänger-Themen 18
3 ArrayList Integer Wrapper Klasse als Ersatz für normale Arrays Java Basics - Anfänger-Themen 10
K Methoden Integer runden/aufrunden Java Basics - Anfänger-Themen 2
E Erste Schritte Lower Bounded Wildcards <? super Integer> Java Basics - Anfänger-Themen 1
M Datentypen Integer und Float Konflikt Java Basics - Anfänger-Themen 3
J Integer-Werte in Array ein- bzw. auslesen Java Basics - Anfänger-Themen 7
T Integer Wert in andere Methode übergeben Java Basics - Anfänger-Themen 2
N Probleme bei Speicherung eines Integer-Array in Datei speichern Java Basics - Anfänger-Themen 3
C Zwei Integer Arrays "kombinieren" Java Basics - Anfänger-Themen 10
D Integer Fehlermeldung exception Java Basics - Anfänger-Themen 4
M Höchster Integer aus 9 Zahlen Java Basics - Anfänger-Themen 13
I Klassen Integer von BL in GUI übergeben | Fehler Java Basics - Anfänger-Themen 4
T Integer-Objekt über Hash-Funktion in Array ablegen Java Basics - Anfänger-Themen 1
S Integer/Value-Paar in Prio-Queue ohne Comparator Java Basics - Anfänger-Themen 5
D Datentypen Ein Integer Feld in einen String wandeln ohne Nullenunterdrückung Java Basics - Anfänger-Themen 6
R integer zahlenfolge speichern, ausgeben Java Basics - Anfänger-Themen 1
L Summer aller Integer-Zahlen im Intervall [x,y] Java Basics - Anfänger-Themen 6
K ArrayList<Integer> problem Java Basics - Anfänger-Themen 3
L Vom Benutzer eingebene Integer addieren und ausgeben. Java Basics - Anfänger-Themen 11
S integer absteigend sortieren Java Basics - Anfänger-Themen 2
S ArrayList<ArrayList<Integer>> sortieren Java Basics - Anfänger-Themen 3
T Variablen Integer in Stmt Java Basics - Anfänger-Themen 13
B gemischter string zu integer Java Basics - Anfänger-Themen 22
R Big Integer Java Basics - Anfänger-Themen 8
B Erste Schritte Integer Eingabe über Scanner mit Abfangen von Eingabefehlern Java Basics - Anfänger-Themen 3
B Variablen Wertezuweisung bei integer Java Basics - Anfänger-Themen 5
J Integer Werte in Array einlesen Java Basics - Anfänger-Themen 6
E Integer oder Strings spiegeln (in while loop) Java Basics - Anfänger-Themen 6
D String mit Integer Variablen Namen vergleichen, möglich? Java Basics - Anfänger-Themen 6
G Was passiert bei einem Overflow von zwei Integer Java Basics - Anfänger-Themen 6
H Integer.toString(int i) vs. String.valueOf(int i) Java Basics - Anfänger-Themen 12
K Date cannot be cast to java.lang.Integer Java Basics - Anfänger-Themen 4
N Probleme beim Rechnen mit Integer und double Java Basics - Anfänger-Themen 4
A Integer aus Stream to Double Java Basics - Anfänger-Themen 7
J Integer.parseInt Java Basics - Anfänger-Themen 23
G String Array konvertieren in Integer Array? Java Basics - Anfänger-Themen 7
K Datentypen double x als Bruch aus Integern macht x zu integer? Java Basics - Anfänger-Themen 3
G Uhrzeit als String in Integer (HH:MM:SS) Java Basics - Anfänger-Themen 5
T Cannot convert from Integer to int Java Basics - Anfänger-Themen 12
T abfrage eines Integer Array s Java Basics - Anfänger-Themen 5
flatpat Variablen Eratosthenes mit Integer Array Java Basics - Anfänger-Themen 10
J BufferedReader in Integer konvertieren Java Basics - Anfänger-Themen 7
M Integer-ArrayList to int-Array Java Basics - Anfänger-Themen 8
E Integer ausserhalb des Zahlenbereiches Java Basics - Anfänger-Themen 2
C Erste Schritte Integer Werte in Array kopieren Java Basics - Anfänger-Themen 21
E Datentypen Integer vergleichen Java Basics - Anfänger-Themen 3
W String & Integer im Array Java Basics - Anfänger-Themen 7
Z Integer erhöht sich nicht! Java Basics - Anfänger-Themen 8
R Integer Definitionsbereich Java Basics - Anfänger-Themen 5
A Integer Eingabe überprüfen Java Basics - Anfänger-Themen 7
Gossi Datentypen Diskussion: Integer vs. int (Double vs. double) Java Basics - Anfänger-Themen 6

Ähnliche Java Themen

Anzeige

Neue Themen


Oben