Methoden Zahlen austauschen

Tarol

Mitglied
Guten Abend,


Ich zerdenke mein Problem schon mehrere Stunden...
Und zwar möchte ich Werte eines Arrays mit Zahlen ersetzen.

Java:
int[] array = new int[]{3,5,6,7,8,2};

Die höchste Zahl soll mit dem Wert 6(Anzahl der Zahlen) ersetzt werden, die zweithöchste mit 5, usw.

Aussehen sollte mein array dann in etwa so: 2,3,4,5,6,1

Wie könnte ich das am besten lösen?

Es werden später dann etwa 20-30 Werte sein, sonst hätte ich mit if Bedingungen gearbeitet.

liebe Grüße
Tarol
 
Hi,

Danke mal für die schnelle Antwort.
Aber ich habe deine Methode schon versucht, das Problem dabei ist doch das ich vorher das Array durchlaufen muss um zu sehen welcher Wert der höchste ist?
Der vorher-höchste muss dann auch immer wieder um 1 reduziert werden..
Denke ich falsch?

Gruß
 
Ich würde da einen anderen Ansatz wählen:
  • Definiere eine neue Klasse "Eintrag" mit den Feldern "wert" und "altePosition"
  • Implementiere in dieser Klasse das Interface "Comparable" so, dass es nach "wert" sortierbar wird.
  • Erzeuge eine ArrayList<Eintrag> und befülle es mit deinen Daten.
    Das sieht dann etwa so aus: (3,1), (5,2), (6,3), (7,4), (8, 5), (2,6)
    Also der Wert aus deinem Array und die bisherige Position im Array.
  • Sortiere das ganze. Das Ergebnis sieht dann so aus:
    (2,6), (3,1), (5,2), (6,3), (7,4), (8, 5)
  • Jetzt überschreibe dein Array.
    Dazu iterierst du in einer Schleife über ArrayList. Du brauchst dabei den Index ("index") des Objekts im sortierten Array und vom Objekt die Instanz-Variable "altePosition".
    Dann sieht die Zuweisung so aus: array[altePosition] = index + 1;
 
Danke dir Dompteur!

Dein Ansatz hat mich über meine Hürde gebracht!

Ich habe aber ein 2-dimensionales Array verwendet, denn ich hatte vergessen zu sagen, die Zahlen müssen an Ort und Stelle bleiben im Array.

Ich habe die zweite Dimension im Array verwendet, um die Position zu merken, die erste wurde ganz einfach sortiert:

Eingabe: 1,5,9,7,3

1,0 / 5,1 / 9,2 / 7,3 / 3,4
1,0 / 3,4 / 5,1 / 7,3 / 9,2

Nun kann ich die Werte mit den Punkten austauschen und sie wieder in meine Excel Tabelle einfügen.

Sorry für die sehr verwirrende Erklärung.

Aber danke für die Hilfe!!

Gruß
 
Also ich seh das jetzt als Overkill an zu sortieren. Wenn man jeweils das Minimum sucht, ist man viel schneller am Ziel:

Java:
private static int[] getOrder(int[] array) {
  final int[] order = new int[array.length];
  final boolean[] visited = new boolean[array.length];
  int numeration = 1;
  for (int i = 0; i < order.length; i++) {
    int minIndex = 0;
    boolean isFirstElement = true;
    for (int j = 0, min = 0; j < array.length; j++) {
      if (!visited[j] && (isFirstElement || array[j] < min)) {
        min = array[j];
        minIndex = j;
        isFirstElement = false;
      }
    }
    order[minIndex] = numeration++;
    visited[minIndex] = true;
  }
  return order;
}
 
@Flown:
Deine Lösung hat die Komplexität O(n*n).
Wenn man die Daten sortiert und davon ausgeht, dass da ein einfacher Algorithmus wie beispielsweise Quicksort dahinter steckt, dann hast du eine Komplexität von O(n*log(n)).
D.h.: Wenn die Länge des Arrays steigt, dann steigt bei deiner Lösung der Aufwand viel schneller.
 
Aye du hast natürlich recht bei der Komplexität, aber es wäre ein weitaus intuitiver Ansatz für das Problem, da es genau der Problemstellung des TO entspricht.
 
Danke für die weitere Antwort, aber ich habe hier meine Lösung mit einem simplen Sortieralgorythmus:

Java:
static void punkteFinden(String[][] daten) {

    		Arrays.sort(daten, new Comparator<String[]>() {
                @Override
                public int compare(final String[] entry1, final String[] entry2) {
                    final String time1 = entry1[0];
                    final String time2 = entry2[0];
                    return time1.compareTo(time2);
                }
            });
    	         	
        int punkte = 1;
            	daten[j][0] = String.valueOf(punkte);
                	punkte++;


         
            }
 
            for (final String[] s : daten) {
                 System.out.println(s[0] + " " + s[1]);
             }
 
Zuletzt bearbeitet:

Zurück
Oben