Ist es möglich, das größte und zweitgrößte element in einem Array mit nur einer Schleife ausfindig zu machen ?

M

Martze

Mitglied
Hallo,
Meine Frage wie in der Überschrift genau genug definiert. es handelt ist um ein Integerarray.

Hier ein Code als Beispiel, um zu verstehen was ich meine, das Problem hierbei ist nur, dass ich diese Aufgabe mit 2 Schleifen gelöst habe, ich möchte jedoch wissen, ob dies auch mit einer gehen würde und wie:


Java:
    public static void main(String[] args) {

        int max = 0;
        int secondmax = 0;

        int[] array = new int[] { 5, 7, 4, 3, 9, 5, 14, 2, 8, 4, 6, 5 };

        // firstsecond zweischleifig

        for (int i = 0; i < array.length; i++) {
            if (array[i] > max)
                max = array[i];
        }

        for (int i = 0; i < array.length; i++) {
            if (array[i] < max && secondmax < array[i])
                secondmax = array[i];
        }

        System.out.println(max + " " + secondmax);

    }

Vielen Dank für die Antwort schonmal
 
Tarrew

Tarrew

Top Contributor
Ja, das sollte möglich sein.
Wenn du ein neues maximales Element findest, dann wird dein altes max-Element ja gleichzeitig zum zweitgrößten Element ;)
 
Tarrew

Tarrew

Top Contributor
Für den Fall muss du eine extra Bedingung einfügen, aber mit einer Schleife geht das immer noch.

Java:
for (int i = 0; i < array.length; i++) {
    if (array[i] > max) {
        secondmax = max;
        max = array[i];
    } else if (array[i] > secondmax) {
        secondmax = array[i];
    }
}
 
Zuletzt bearbeitet:
W

White_Fox

Top Contributor
Wieso initialisierst du int max nicht mit dem kleinsten Wert, der vorkommen kann? Dann kannst du dir das if sparen.

Und bedenke den Fall daß ein neues Element zwar kleiner als max ist, aber größer als max-1 sein kann. Wenn dein größtes Element sieben und dein zweitgrößtes Element fünf ist, hast du ein Problem wenn auf einmal eine sechs reingerät.
 
mrBrown

mrBrown

Super-Moderator
Mitarbeiter
Wieso initialisierst du int max nicht mit dem kleinsten Wert, der vorkommen kann? Dann kannst du dir das if sparen.

Und bedenke den Fall daß ein neues Element zwar kleiner als max ist, aber größer als max-1 sein kann. Wenn dein größtes Element sieben und dein zweitgrößtes Element fünf ist, hast du ein Problem wenn auf einmal eine sechs reingerät.
Auf welchen Code beziehst du dich?
 
W

White_Fox

Top Contributor
Auf keinen Code...nur auf die Beschreibung von Tarrew ganz oben.

Aber ich sehe gerade: Tarrew hat den Fall in seinem Beispiel ja berücksichtigt. Mea Culpa.
 
X

Xyz1

Gast
Man kommt mit genau zwei Fällen in der Schleife aus
Java:
		int n = 2;
		int[] array = new int[n];
		for (int i = 0; i < array.length; i++) {
			array[i] = new Random().nextInt(6);
		}
		int m1 = array[0] >= array[1] ? 0 : 1;
		int m2 = array[0] < array[1] ? 0 : 1;
		for (int i = 2; i < array.length; i++) {
			if (array[i] > array[m1]) {
				m2 = m1;
				m1 = i;
			} else if (array[i] > array[m2]) {
				m2 = i;
			}
		}
		System.out.println(Arrays.toString(array));
		System.out.println(array[m1] + " " + array[m2] + " " + m1 + " " + m2);

(Aber das Array muss mind eine Länge von 2 haben denn sonst wird es schwer das zweitgrößte Element zu finden) :(
 
X

Xyz1

Gast
X

Xyz1

Gast
Da bin ich nicht bei dir. Alleine schon die Benennung der Variablen macht sie deutlich undurchsichtiger.
Nein, das ist Quatsch. Zum Beispiel möchte ich keinen Informationsverlust haben bei dem Index von gleichen Elementen. Für jeden Programmierer mit etwas Erfahrung sollte das selbstverständlich sein - andernfalls weise ich auch darauf hin.
 
mihe7

mihe7

Top Contributor
Java:
public class TwoLargestElements<T extends Comparable<T>> {
    private int ixFirstMax = -1;
    private int ixSecondMax = -1;
    private T[] data;

    public TwoLargestElements(T[] arr) {
        data = arr;
        if (arr.length > 1) {
            findMaxs();
        }        
    }

    private void findMaxs() {
        ixFirstMax = data[1].compareTo(data[0]) > 0 ? 1 : 0;
        ixSecondMax = -(ixFirstMax-1);
        for (int i = 2; i < data.length; i++) {
            if (data[i].compareTo(data[ixFirstMax]) > 0) {
                ixSecondMax = ixFirstMax;
                ixFirstMax = i;
            } else if (data[i].compareTo(data[ixSecondMax]) > 0) {
                ixSecondMax = i;
            }
        }
    }
  
    public int indexOfLargest() { return ixFirstMax; }
    public int indexOfSecondLargest() { return ixSecondMax; }
    public T largest() { return data[ixFirstMax]; }
    public T secondLargest() { return data[ixSecondMax]; }

    public static void main(String[] args) {
        TwoLargestElements<Integer> tl = new TwoLargestElements<>(
            new Integer[]{-8,-10,-1, -2, -3, -4, -5});
        System.out.println(tl.largest());
        System.out.println(tl.secondLargest());
    }
}
Gut, damit kommen wir allmählich in den Blödsinn rein :)
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
P Klassenübergreifende Ausgabe mittels "getter" nicht möglich Java Basics - Anfänger-Themen 21
Z Kein überprüfen des gesamten Arrays möglich.(Viergewinnt Spiel) Java Basics - Anfänger-Themen 6
B Erste Schritte Guice Injection nicht in jeder Klasse möglich Java Basics - Anfänger-Themen 2
N Eine Zahl solange teilen bis es nicht möglich ist und die Ergebnisse ausgeben Java Basics - Anfänger-Themen 23
G Warum ist hier ein Lamda-Ausdruck möglich Java Basics - Anfänger-Themen 2
I Druckerauflösung auslesen - mittlerweile möglich? Java Basics - Anfänger-Themen 4
Olis Erste Schritte Simples Memory Spiel möglich? Java Basics - Anfänger-Themen 1
dapzoo Class File Version zu niedrig? Ausführen über Eingabeaufforderung nicht möglich Java Basics - Anfänger-Themen 14
S Sequenz von Zahlen bei einem Stack möglich oder nicht möglich? Java Basics - Anfänger-Themen 5
W Dezimalzahlen in Binärzahl umwandeln. Wie möglich ? Java Basics - Anfänger-Themen 9
T Classpath Zwei gleiche Dateinamen in verschiedenen Projekten möglich? Java Basics - Anfänger-Themen 13
K Einzelne Email verschieben nicht möglich Java Basics - Anfänger-Themen 3
H Datentypen for(typ a : b) nur typ Object möglich ? Java Basics - Anfänger-Themen 2
JavaNewbie2.0 Warum ist dies nicht möglich? Java Basics - Anfänger-Themen 7
T Input/Output Einlesen eines .txt Files nur bei gesetztem Breakpoint möglich Java Basics - Anfänger-Themen 1
M Ist es möglich den Login in eine Drittseite für den eigenen zu benutzen? Java Basics - Anfänger-Themen 1
J Java Ordner Erstellung nicht möglich. Java Basics - Anfänger-Themen 3
R Primzahl ja/nein - besserer Code möglich? Java Basics - Anfänger-Themen 2
M Eingabe im Terminal nicht möglich Java Basics - Anfänger-Themen 20
X Minimax-Algorithmus über alle Kanten möglich? - Kanten darstellen Java Basics - Anfänger-Themen 1
Z Pattern und Matcher substring zu String möglich? Java Basics - Anfänger-Themen 4
D Hinzufügen einer Site zur Ausnahmeliste nicht möglich Java Basics - Anfänger-Themen 1
D Liste verschiedener konkreter Klassen möglich? Java Basics - Anfänger-Themen 2
Detox Class Datei erzeugen nicht möglich über cmd Java Basics - Anfänger-Themen 1
K Variablen Ist es möglich eine ArrayList vom Typ Array zu erstellen? Java Basics - Anfänger-Themen 2
W Vergleich mit If-Abfrage nur für Zahlen bis 07 möglich - Warum? Java Basics - Anfänger-Themen 7
A Methoden Parameter optionalisieren möglich? - Wie? Java Basics - Anfänger-Themen 19
H Kein Zugriff auf das Element einer JList möglich: Fehlermeldung Java Basics - Anfänger-Themen 2
M Möglich? Methode aufrufen deren Bezeichner zur Laufzeit durch einen überg. String festgelegt wird Java Basics - Anfänger-Themen 3
0 Über CMD die JAVA Datei ausführen? möglich? Java Basics - Anfänger-Themen 8
A Arrays Per For Schleife Erstellen - !Möglich? Java Basics - Anfänger-Themen 8
V Eine einfachere Variante möglich ? Java Basics - Anfänger-Themen 3
1 Mini Programm, keine Eingabe möglich.. Java Basics - Anfänger-Themen 6
J Windows Maus-Zeigerbeschleunigung aktivieren/deaktivieren - Mit Java möglich? Java Basics - Anfänger-Themen 2
C String Objekt erstellen auch ohne new() möglich? Java Basics - Anfänger-Themen 5
D String mit Integer Variablen Namen vergleichen, möglich? Java Basics - Anfänger-Themen 6
S ResultSet close() in funktion nich möglich. Java Basics - Anfänger-Themen 8
F Exportieren als ausführbare Jar-Datei unter Ubuntu nicht möglich Java Basics - Anfänger-Themen 17
K Mehrere Klassen beim JavaEditor verwenden - möglich? Java Basics - Anfänger-Themen 8
K Erste Schritte Vergleichen von Zahlen ohne mehrere if-Verzweigungen - möglich? Java Basics - Anfänger-Themen 6
S Bearbeiting von xml-Datei in src-Ordner möglich?i Java Basics - Anfänger-Themen 5
R Variablen Möglich?: Cast einer Referenzvariable auf den Typ seines Objektes Java Basics - Anfänger-Themen 19
G PrintWriter each line möglich? Java Basics - Anfänger-Themen 4
B Input/Output Formatierter Text aus PDF als Array auswerten in JAVA möglich ? Java Basics - Anfänger-Themen 8
E Input/Output Deserialisierung (Manipulation der Objekte möglich?) Java Basics - Anfänger-Themen 2
J "public int x" - Zugriff von anderer Klasse (selbes Package) nicht möglich?! Java Basics - Anfänger-Themen 4
R Tippen nur beschränkt möglich Java Basics - Anfänger-Themen 5
H Panel in Variable setzen möglich? Java Basics - Anfänger-Themen 10
GianaSisters Methoden eigenes TableModel -> removeRow möglich machen Java Basics - Anfänger-Themen 30
T Generisches Feld in nicht-generischer Klasse möglich? Java Basics - Anfänger-Themen 5
H Zahlen Bilder zuordnen möglich? Java Basics - Anfänger-Themen 4
P info()-Methode mit Objektrückgabe: Konsolenausgabe möglich? Java Basics - Anfänger-Themen 8
M nach jar export keine db abfrage möglich Java Basics - Anfänger-Themen 2
S Spielfeld Ausgabe mit 2 for - Schleifen möglich ? Java Basics - Anfänger-Themen 4
K Klassen Klassen nicht möglich? Java Basics - Anfänger-Themen 8
P Klassen Instanz einer Klasse in ihrer eigenen Definition erzeugen? möglich? Java Basics - Anfänger-Themen 4
C Stringeingabe: kein Satz wegen Leerzeichen möglich Java Basics - Anfänger-Themen 3
T keine buchstaben!nur zahlen eingabe möglich Java Basics - Anfänger-Themen 48
Y .class Ausführung nicht möglich - Path lässt sich nicht ändern Java Basics - Anfänger-Themen 8
I Input/Output System.out.println formatierung? möglich? Java Basics - Anfänger-Themen 2
G Input/Output Mehrere Einlesevorgänge nicht möglich Java Basics - Anfänger-Themen 4
L Öffnen des Programms nach kompilieren nicht möglich Java Basics - Anfänger-Themen 3
jmar83 final wenn immer möglich verwenden? Java Basics - Anfänger-Themen 30
T Boolean in ein Objektdatentyp casten möglich? Java Basics - Anfänger-Themen 5
H ActionListener Verbesserung möglich? (This) Java Basics - Anfänger-Themen 3
N run() methode von threads überladen möglich? Java Basics - Anfänger-Themen 5
C einfacher Link zu *.html Datei möglich? Java Basics - Anfänger-Themen 4
D Funktion mit optionalen Parametern möglich? Java Basics - Anfänger-Themen 3
Q switch case hier möglich Java Basics - Anfänger-Themen 10
D Datentypen mehrdimensionales Array meherer Typen möglich ? Java Basics - Anfänger-Themen 6
D Neues Objekt in Methode erstellen möglich? Java Basics - Anfänger-Themen 5
E "Zweigeteilte" JNLP-Datei möglich? Java Basics - Anfänger-Themen 2
capgeti Verschiedene Rückgabetypen ohne Typecast möglich? Java Basics - Anfänger-Themen 7
-horn- public static double[][][] NAME() nur per RETURN Wertrückgabe möglich? Java Basics - Anfänger-Themen 20
J Null-Pointer -> Code-Zeile ausgeben möglich? Java Basics - Anfänger-Themen 7
C Ist gleichzeitiges Lesen und Schreiben einer ArrayList möglich Java Basics - Anfänger-Themen 2
D Sichere Loginverbindungen möglich? Java Basics - Anfänger-Themen 3
A Parameter in der URL möglich? Java Basics - Anfänger-Themen 6
A In Java Ribbon GUI möglich Java Basics - Anfänger-Themen 2
L Programm so klein wie möglich machen Java Basics - Anfänger-Themen 12
G Prüfung ob GUI möglich? Java Basics - Anfänger-Themen 2
G Wieso enum Declaration nur außerhalb einer Methode möglich? Java Basics - Anfänger-Themen 9
-horn- Array mit nicht fixer Größe möglich? Nachträgliches befüllen Java Basics - Anfänger-Themen 10
J Array-Index nur als Integer möglich? Java Basics - Anfänger-Themen 15
J Ordner Passwortsichern möglich? Java Basics - Anfänger-Themen 10
H ist eine "neue Session" für Mail möglich? Java Basics - Anfänger-Themen 3
S LineNumberReader - bessere Lösung möglich? - Log4J Java Basics - Anfänger-Themen 9
A Start über Konsole nicht möglich Java Basics - Anfänger-Themen 4
X WAV conversion ist einfach nicht möglich Java Basics - Anfänger-Themen 2
B Windows Vista Home Premium und Java 1.4.2_08, möglich ? Java Basics - Anfänger-Themen 3
T Spiel --> Soforteingaben per Pfeiltaste möglich? + Weiter Java Basics - Anfänger-Themen 21
D Sound in Frames möglich? EDIT Class Clip Java Basics - Anfänger-Themen 5
M Variablen einer Klasse zu durchlaufen möglich? Java Basics - Anfänger-Themen 5
T ist das möglich? Java Basics - Anfänger-Themen 2
G Projekt über Java möglich? Java Basics - Anfänger-Themen 9
J Start mit .exe-Datei oder Desktop-Symbol möglich? Java Basics - Anfänger-Themen 12
S Pokerprogrammierung mit wenig Vorkenntnissen möglich? Java Basics - Anfänger-Themen 50
G Automatische Browsereingabe möglich ? Java Basics - Anfänger-Themen 4
G Ist es möglich, den 'Rahmen' eines Frames durch Grafiken. Java Basics - Anfänger-Themen 5
G static var serialisieren möglich? Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Anzeige

Neue Themen


Oben