Character-Array sortieren￾￾

Status
Nicht offen für weitere Antworten.

aVoX

Mitglied
Mahlzeit!

Ich möchte ein Character-Array sortieren und ausgeben. Jedoch soll das Ergebnis nicht wie folgt aussehen:
Array unsortiert:
[A, b, q, s, Q, a, s]
Array sortiert (V1):
[A, Q, a, b, q, s, s]
Sondern so (also zuerst der Großbuchstabe, dann - falls vorhanden - der dazugehörige Kleinbuchstabe)
Array unsortiert:
[A, b, q, s, Q, a, s]
Array sortiert (V1):
[A, a, Q, q, b, s, s]
Ich werk schon die ganze zeit daran herum. Mein Code bis jetzt:
[highlight="JAVA"]char[] chr = {'A', 'b', 'q', 's', 'Q', 'a', 's'};
char help;

System.out.println("Array unsortiert:");
System.out.println(Arrays.toString(chr));

//Bubblesort zum sortieren der Buchstaben:
for (int i = chr.length-1; i > 0; i--) {
for (int j = 1; j <= i; j++) {
//* Hier rein gehören meine Überlegungen
if (chr[j-1] > chr[j]) {
help = chr[j-1];
chr[j-1] = chr[j];
chr[j] = help;
}
}
}
System.out.println("Array sortiert (V1):");
System.out.println(Arrays.toString(chr));[/highlight]
*Soweit bin ich schon mit meinen Überlegungen: Wenn das zeichen [j] größer als 65 (großes A) ist und kleiner als 90 (kleines a) ist, muss man 32 dazuzählen, um den Vergleich richtig zu machen. Mei der Methode wird aber jeder Großbuchstabe zu einem kleinen. <- Nicht gut...

MfG, avoX
 

hdi

Top Contributor
ungetestet:

[HIGHLIGHT="Java"]
// wenn er grösser ist als der nächste
if ( chr[j-1] > chr[j]){
// dann schieb ihn vor
help = chr[j-1];
chr[j-1] = chr[j];
chr[j] = help;
}
}
// wenn er kleiner ist als der nächste
else if(chr[j-1] < chr[j]){
// aber zwischen einem Päärchen von Klein-/Grossbuchstabe liegt, zB A-x-a
if(chr[j-2] == chr[j] -32){
// dann schieb ihn trotzdem vor
help = chr[j-1];
chr[j-1] = chr[j];
chr[j] = help;
}
}[/HIGHLIGHT]

...du musst nur aufpassen noch eine kleine Abfrage einzubauen für den Fall j-1 == 0,
weil du sonst bei j-2 == -1 eine Exception kriegst.
 
Es ist es deutlich komfortable dazu Arrays.sort zu nehmen und nur einen eigenen Comparator zu implementieren da man sich das manuelle interieren sparen kann.

Im Comparator sähe das dann etwa so aus
[highlight=Java]
public class MyComarator implements Comparator<Character>
{

public int compare(Character o1, Character o2)
{
int value1=Character.toLowerCase(o1);
int value2=Character.toLowerCase(o2);
if(value1==value2)
{
if(Character.isUpperCase(o1))
{
value1=0;
}
else
{
value2=0;
}
}
return value1-value2;
}
}[/highlight]
 

aVoX

Mitglied
Danke, aber wohin gehört diese Klammer?
hdi hat gesagt.:
[highlight=JAVA]// wenn er grösser ist als der nächste
if ( chr[j-1] > chr[j]){
// dann schieb ihn vor
help = chr[j-1];
chr[j-1] = chr[j];
chr[j] = help;
} // <--
}[/Highlight]
 

hdi

Top Contributor
Genau dorthin, wo sie in meinem Code liegt.
Der erste Teil ist eine Kopie von deinem Code, ich habe lediglich einen
neuen (esle) if-Zweig angehängt.
Das kannst du so kopieren. Aber wie gesagt, hab nich gross überlegt ob das so passt.

Die Lösung von Blaubär ist eindeutig schöner, aber es schadet eig. nie sich das Hirn
zu verdrehen mit solchen Übungen ;)
 
S

SlaterB

Gast
@Käptn Blaubär
durch das value = 0 wird das aber recht kompliziert, da muss man ja erstmal nachdenken, wohin das führt ;)

kleiner Schönheitfehler noch: wenn beide Chars die gleichen sind, also 'x' und 'x' oder 'X' und 'X',
wird dennoch entweder ein positiver oder negativer Wert zurückgegeben, nicht gerade symmetrisch


eine Alternative:
Code:
    public int compare(Character o1, Character o2)
    {
        if (o1.equals(o2)) {
            return 0;
        }
        int c =Character.toLowerCase(o1) - Character.toLowerCase(o2);
        if(c != 0)
        {
            return c;
        } 
        if(Character.isUpperCase(o1))
        {
              return 1;
        }
        return -1; // oder andersrum
    }
 

aVoX

Mitglied
1594.jpeg

Liegt wohl an der } Klammer. Wenn ich die aber wegmache bekomm ich einen IndexOutOfBounds-Fehler, weil das Element -1 nicht im Array definiert ist

@Blaubärs Lösung:
Die Lösung nehm ich deshalb nicht, weil ich sie absolut nicht kapiere! Und ehrlichgesagt habe ich lieber einen Code, der nicht sehr schön ist, den ich verstehe und der funzt, als einen Code, der schön ist, funzt, und den ich absolut nicht verstehe.
 
Zuletzt bearbeitet:

Illuvatar

Top Contributor
Um trotzdem nochmal zum Comparator zurück zu kommen:
Hier eine Version, die meiner Meinung nach den Kontrakt (inklusive Antisymmetrie) vollständig erfüllt:

[HIGHLIGHT="Java"]import java.util.*;

public class Test {
public static void main(String[] args) {
Character[] chars = {
'A', 'b', 'q', 's', 'Q', 'a', 's'
};
Arrays.sort(chars, new Comparator<Character>(){
public int compare(Character c1, Character c2) {
int value1 = Character.toLowerCase(c1) * 2;
if (Character.isLowerCase(c1)) value1++;
int value2 = Character.toLowerCase(c2) * 2;
if (Character.isLowerCase(c2)) value2++;
return value1 - value2;
}
});
System.out.println(Arrays.toString(chars));
}
}
[/HIGHLIGHT]
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
J String Array zu Map<Character, List<Character>> mit Streams Java Basics - Anfänger-Themen 1
S char Array in Character KlassenArray? Java Basics - Anfänger-Themen 24
halla Character-Array in einen String umwandeln Java Basics - Anfänger-Themen 3
N String to Character Array... Java Basics - Anfänger-Themen 5
obiwanke Ziffern durch ASCII Character ersetzen Java Basics - Anfänger-Themen 8
B Klasse "Character" Java Basics - Anfänger-Themen 2
O String mit Character vergleichen Java Basics - Anfänger-Themen 3
M Warum werden character, die Leerzeichen sind, nicht korrekt verarbeitet? Java Basics - Anfänger-Themen 2
F Character umwandeln als Double Werte Java Basics - Anfänger-Themen 8
X Gänsefüßchen als invalid character constant Java Basics - Anfänger-Themen 2
K Regex: illegal character range Java Basics - Anfänger-Themen 4
P Wann Byte-Stream und wann Character-Stream? Java Basics - Anfänger-Themen 11
J Variablen Invalid Character - Error -> Spiel mit Variablenergebnissen Java Basics - Anfänger-Themen 8
J Character.getNumericValue Java Basics - Anfänger-Themen 2
K Character in Wörtern vertauschen Java Basics - Anfänger-Themen 11
G Error: "No character data is allowed" Java Basics - Anfänger-Themen 6
A Character einlesen Java Basics - Anfänger-Themen 2
A character einlesen Java Basics - Anfänger-Themen 4
H was ist radix in Character.digit(char, int radix) Java Basics - Anfänger-Themen 4
B Datentypen Character überprüfen Java Basics - Anfänger-Themen 3
G Character-orientierte File-Streams mit der Klasse FileReader Java Basics - Anfänger-Themen 5
G Character Encoding Java Basics - Anfänger-Themen 3
T Special Character darstellung Java Basics - Anfänger-Themen 4
C Character to String! Java Basics - Anfänger-Themen 6
M Illegal Escape Character und keine Darstellung? Java Basics - Anfänger-Themen 7
S Character aus Textfeld auslesen Java Basics - Anfänger-Themen 2
S Umwandlung eines Character-Streams in ein Image Java Basics - Anfänger-Themen 17
J Space zwischen 2 Character verkleinern Java Basics - Anfänger-Themen 5
T Array verkleinern Java Basics - Anfänger-Themen 2
J Array aus Numberfield Eingaben Java Basics - Anfänger-Themen 7
D Array List mit Objekten sortieren Java Basics - Anfänger-Themen 2
onlyxlia Anzahl Random Zahlen mit Scanner abfragen und in Array speichern Java Basics - Anfänger-Themen 10
Ü Java Array - Buchstaben als Zahlen ausgeben Java Basics - Anfänger-Themen 22
Ü Zweidimensionales Array in der ersten Zeile deklarieren Java Basics - Anfänger-Themen 13
Thomas Uppe 2D Array Reihenfolge vermischen Java Basics - Anfänger-Themen 4
T array auslesen Java Basics - Anfänger-Themen 2
Nitrogames Variablen Variable aus JOptionPane Abfrage in Array einfügen Java Basics - Anfänger-Themen 4
moini Auf Array aus Superklasse zugreifen? Java Basics - Anfänger-Themen 2
J ArrayList in 2D-Array konvertieren. Java Basics - Anfänger-Themen 48
M NullPointerException: Cannot read the array length because "this.Kinder" is null Java Basics - Anfänger-Themen 1
P Wieso kann ich als Index für einen Array einen Char angeben? Java Basics - Anfänger-Themen 3
Finn_lol Fehlermeldung bei Schleife mit Array Java Basics - Anfänger-Themen 4
Proxy Chars vor array übergabe toLowerUpcase Java Basics - Anfänger-Themen 14
iAmFaiinez Primzahlen Tester ohne Array Java Basics - Anfänger-Themen 4
S array 2 dimensional treppe Java Basics - Anfänger-Themen 3
S Array 2x2 Blöcke mit 0 und 1 Java Basics - Anfänger-Themen 10
C Array von Klassen Java Basics - Anfänger-Themen 2
julian0507 2Dim-Array Spaltensummen Java Basics - Anfänger-Themen 1
XWing Doppelte Zahlen im Array Java Basics - Anfänger-Themen 8
melisax Java 2D-Array Tabelle Java Basics - Anfänger-Themen 4
melisax Java Array Wert an bestimmtem Index angeben Java Basics - Anfänger-Themen 14
W Items löschen aus String Array vom Custom Base Adapter Java Basics - Anfänger-Themen 2
Proxy Stack erweitern mit neuem Array falls der alte voll ist!? Java Basics - Anfänger-Themen 5
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
J Array.list vergleichen Java Basics - Anfänger-Themen 1
W Java-Code mit Array Java Basics - Anfänger-Themen 14
D Reflections & Generisches Array Java Basics - Anfänger-Themen 4
T Array Java Basics - Anfänger-Themen 2
T Array Java Basics - Anfänger-Themen 15
T Wörteranzahl im Array zählen Java Basics - Anfänger-Themen 9
Ostkreuz Zweidimensionaler Array Index Java Basics - Anfänger-Themen 2
S String Array Buchstaben um einen gewissen Wert verschieben Java Basics - Anfänger-Themen 4
R Images aus einem Array ausgeben Java Basics - Anfänger-Themen 3
R 2d Array individuell machen Java Basics - Anfänger-Themen 4
D 2D Char Array into String Java Basics - Anfänger-Themen 2
J Array Median bestimmen Java Basics - Anfänger-Themen 6
S Array Maximum bestimmen mit for und foreach Java Basics - Anfänger-Themen 7
S Prüfen ob ein zweidimensionales Array rechteckig ist Java Basics - Anfänger-Themen 4
N Array Java Basics - Anfänger-Themen 1
J Array Mittleren Wert bestimmen Java Basics - Anfänger-Themen 2
D OOP Array einem Objekt zuweisen Java Basics - Anfänger-Themen 2
O Zahlen aus einem char-array per char + Zeichen addieren Java Basics - Anfänger-Themen 2
S leeres Array statt Null Pointer Exception ausgeben Java Basics - Anfänger-Themen 20
S Inhalte aus Array vergleichen und Max ausgeben Java Basics - Anfänger-Themen 3
M 2d array ohne längen anlegen Java Basics - Anfänger-Themen 4
S Bestimmte werte aus einem Array löschen Java Basics - Anfänger-Themen 2
S Ausgeben wie oft ein Wert in einem Array vorkommt Java Basics - Anfänger-Themen 7
E Reihenfolge der Werte umdrehen (mittels statischem int-Array Java Basics - Anfänger-Themen 3
O 2 Dimensionales Array Java Basics - Anfänger-Themen 6
M Bubble Sort - Int[] Array sortieren Java Basics - Anfänger-Themen 2
javaBoon86 Array mehrere Dimensionen Java Basics - Anfänger-Themen 10
B Array nach Elementwerten sortieren? Java Basics - Anfänger-Themen 1
B Explizit Array definieren geht nicht? Java Basics - Anfänger-Themen 14
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
L Gegebenes Array sortieren, indem zufällige Zahlenpaare aus Array ausgewählt werden Java Basics - Anfänger-Themen 14
Say 2-DIM Array Code lesen und verstehen Java Basics - Anfänger-Themen 5
N Array beim erstellen mit Werten füllen Java Basics - Anfänger-Themen 6
C Java Array Struktur, welche ist wann besser? Java Basics - Anfänger-Themen 12
Temsky34 Array IndexOf nicht verfügbar Java Basics - Anfänger-Themen 18
belana wie am besten 2D Array von String to Integer Java Basics - Anfänger-Themen 18
S Array mit Methode löschen Java Basics - Anfänger-Themen 2
J Java To String Methode, Array mit For-Schleife Java Basics - Anfänger-Themen 2
E Durch Muster in Array iterieren Java Basics - Anfänger-Themen 3
L Frage zum Array Java Basics - Anfänger-Themen 1
C 2D Array Ausgabe mit for-Schleife i,j Java Basics - Anfänger-Themen 4
D Methode: Array Reihenfolge tauschen Java Basics - Anfänger-Themen 3
julian0507 Array aus Methode in anderer Methode sichtbar machen Java Basics - Anfänger-Themen 10
P Array vom Typ Klasse Java Basics - Anfänger-Themen 18
Lion.King Array deklarieren und initialisieren Java Basics - Anfänger-Themen 5
P Array-Objekte-Aufruf Java Basics - Anfänger-Themen 22

Ähnliche Java Themen

Neue Themen


Oben