Sortieren(Algorithmen)

hos15

Aktives Mitglied
Hallo alle zusammen. Ich habe folgende Aufgabe :
Nehmen wir an wir haben ein Feld:
[feld=[3, 2, 3, 7, 6, 6, 7, 8, 7, 4]]

1) Wie groß ist der minimale Abstand zwischen zwei gleichen Werten (im Beispiel: 1 für die 6)
2) Wie groß ist der maximale Abstand zwischen zwei gleichen Werten (im Beispiel: 5 für die 7)
3) Wie viele Werte im Feld lassen sich als Produkt zweier anderer Werte (ungleich 1) aus dem Feld schreiben? (Im Beispiel: 6 = 2 ∗ 3, 8 = 2 ∗ 4 also 2)
4) gleiche Frage für Summe / Dierenz
5) Von welchem Wert sind die meisten ganzzahligen Vielfache im Feld? (Im Beispiel 2)

Kann mir einer helfen bitte ?
 

Joose

Top Contributor
Hast du denn schon einen Ansatz? Wo genau liegt das Problem?

1) Wie groß ist der minimale Abstand zwischen zwei gleichen Werten (im Beispiel: 1 für die 6)
2) Wie groß ist der maximale Abstand zwischen zwei gleichen Werten (im Beispiel: 5 für die 7)
Wenn du eines von beiden gelöst hast ist das andere eig auch gelöst ;)
Mit 2 verschachtelten Schleife sollte sich diese Problem lösen lassen.
 

hos15

Aktives Mitglied
Also Ja ich habe einen ansatz und zwar so :


Java:
void minAbstand( ) {
   int temp = 0;
   for(int i = 0; i < feld.length; i++) {
       for(int j = N; j > i; N--) {
           if(feld[i] == feld[j]) {
               temp = Math.abs(i - j);
               System.out.println("MinimumAbstand" + temp);
           }
       }
   }
}

stimmt das ?
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
Was soll ich darauf antworten? ;)
Du hast deinen Code, ein Angabe und die Lösung. Nimm deine IDE, kompiliere den Code und führe ihn aus. Kommt das richtige heraus?

An deinem Code gibts einige unklare Stellen:
Was ist "N"?
Deine innere Schleife wird endlos laufen, weil du "j" nicht verringerst.
Du speicherst zwar den aktuell berechneten Abstand aus und gibst ihn aus. Du solltest ihn aber speichern und mit dem vorherigen berechneten Abstand vergleichen (welcher ist größer/kleiner).
 

hos15

Aktives Mitglied
Also hab einige dinge verbessert :

Java:
void minAbstand() {
        int temp = 0;
        
        for (int i = 0; i < feld.length; i++) {
            for (int j = N - 1; j > i; j--) {
                if (feld[i] == feld[j]) {
                    temp = Math.abs(i - j);

                    System.out.println("MinimumAbstand von " + feld[i] + " " + temp);

                }

            }
        }


    }

Du solltest ihn aber speichern und mit dem vorherigen berechneten Abstand vergleichen (welcher ist größer/kleiner).

wie ich das machen soll weiß ich nicht ganz
 

Joose

Top Contributor
Basierend auf deinem Code könnte das wie folgt ausschauen:
Java:
void minAbstand() {
   int minimum = -1;

   for (int i = 0; i < feld.length; i++) {
       for (int j = N - 1; j > i; j--) {
           if (feld[i] == feld[j]) {
               int temp = Math.abs(i - j);
               System.out.println("MinimumAbstand von " + feld[i] + " " + temp);
               // temp muss mit minimum verglichen werden
           }
       }
   }
}
Deine Ausgabe in der Schleife ist so wie sie da steht unsinnig ;) .... "minimumAbstand von x" --> "zu y" fehlt da
 

Joose

Top Contributor
Da es sich bei minimum um ein "int" handelt brauchst du einen Initialwert. Am besten ein ziemlich großer Abstand oder ein unmöglicher Abstand.

Ein Abstand ist immer positiv, also kann er nie < 0 werden. Somit bietet sich zum Beispiel "-1" an.
Oder du nimmst die Länge des Arrays als Initialwert ;) es bleibt eben dir überlassen.

Den 1.Abstand den du dir ausrechnest vergleichst du dann mit dem "minimum", wenn der Abstand kleiner ist als das bisherige "minimum" dann speicherst du den Abstand als neues "minimum" usw.
 

hos15

Aktives Mitglied
Ja aber der kann ja nie kleiner als -1 sein :D
Java:
void minAbstand() {
        int min = -1;
         int temp=0;
        for (int i = 0; i < feld.length; i++) {
            for (int j = N - 1; j > i; j--) {
                if (feld[i] == feld[j]) {
                    temp = Math.abs(i - j);
                } 
                if(temp<min){
                    System.out.println(temp);
                }             
            }         
        }
    }
 
Zuletzt bearbeitet von einem Moderator:

Joose

Top Contributor
1) temp < min musst du nur vergleichen wenn du 2 gleiche Zahlen gefunden hast (sprich das eine if ins andere if geben ;))
2) Dann erweitere doch deine Bedingung um || temp == -1 oder wie ich oben schon geschrieben habe kannst du einen großen unmöglichen Wert nehmen (zum Beispiel die Arraygröße)
 

Neue Themen


Oben