Größte Zahl aus einem Array ermitteln(als statische Methode)

Cemax7

Mitglied
Hey Leute,
ich habe echt keine Ahnung wie ich die Aufgabenstellung lösen soll, weil ich dieses Thema objektorientierte Programmierung nicht so ganz verstehe. Wie muss man bei dieser Aufgabenstellung vorgehen? Also muss ich quasi zwei Quellcodes machen? In einem die Methode implementieren und in dem anderen die Methode testen lassen?Aufgabenstellung3.png
 

Bible Man

Mitglied
Richtig, es müssten zwei Quellcodes geschrieben werden. Die eine Datei hieße dann ArrayGroessteZahl.java, die andere ArrayGroessteZahlTest.java. Beide enthielten die Klasse mit entsprechendem Namen.
 

temi

Top Contributor

Cemax7

Mitglied
Also hab das ausprobiert und klappt leider nicht.
Ich habe mir halt gedacht, dass ich in der main methode ein array mitgeben muss und damit die methode mit dem array arbeiten, man ein neues array braucht
Ich habe halt leider einen Denkfehler..
Und ich hoffe das ist nicht falsch
Die Zuweisung in Zeile 8 muss andersrum sein oder ?
 

Cemax7

Mitglied
Okay hab das geändert.
Nur wie muss ich das in main() machen ? Wie kann ich diese methode aufrufen und das array mitgeben ?
Hab leider kein Plan wie man macht
 

temi

Top Contributor
Wie kann ich diese methode aufrufen und das array mitgeben ?
[CODE lang=java highlight="9"]class Foo {
static void someMethod(int value) {
// do something with value
}
}

static void main() {
int val = 42;
Foo.someMethod(val);
}[/CODE]

Da es sich um eine statische Methode (eine sogenannte Klassenmethode) handelt, erfolgt der Aufruf über den Namen der Klasse.
 
Zuletzt bearbeitet:

temi

Top Contributor
Ich kenne deinen aktuellen Code nicht, aber ich empfehle dir auch einmal z. B. mit folgendem Array zu testen:
Java:
int[] array = { -7, -42, -2 }
 

temi

Top Contributor
Es empfiehlt sich immer mit verschiedenen Werten und Grenzfällen zu testen, z. B.
Java:
int[] array = { } // leeres Array
int[] array = { -7, -42, -2 } // negative Werte
int[] array = { -42, 0, 42 } // gemischte Werte
int[] array = { 7, 42, 2 } // positive Werte
 

temi

Top Contributor

Ubk0

Mitglied
Hier ist einmal eine Methode zum Testen (auch der Randfälle). strenggenommen entspricht meine Methode nicht der Aufgabenstellung, weil diese Methode https://docs.oracle.com/javase/8/docs/api/java/util/Arrays.html#stream-int:A- ja vermieden werden soll. Bei "deineMethode" müsstest Du Deinen Code eintragen:
Java:
import java.util.stream.IntStream;

public class A1 {
    public static int deineMethode(int[] array) {
        //...
        return meineMethode(array);
        //...
    }

    public static int meineMethode(int[] array) {
        return IntStream.range(0, array.length).map(i -> array[i]).max().orElse(-1);
    }

    public static void test() {
        for (int i = 0; i < 1000; i++) {
            int[] a = new int[i];
            for (int j = 0; j < i; j++) {
                a[j] = (int) (Math.random() * 20);
                if (Math.random() < 0.5) {
                    a[j] = -a[j];
                }
            }
            int b = deineMethode(a);
            int c = meineMethode(a);
            System.out.println(b + " " + c + " " + (b == c));
            if (b != c) {
                System.exit(1);
            }
        }
    }

    public static void main(String[] args) {
        test();
    }
}
 

mihe7

Top Contributor
wenn ich das mache dann kommt 0 raus.
Das ist übrigens ein sehr schönes Beispiel dafür, dass sich die Denkweise beim Test Driven Development völlig ändert. Für Interessierte: @mrBrown hat hierzu bereits zwei schöne Beispiele gepostet (zu FizzBuzz und Pfadsuche), daher erspare ich mir den Code.

Ohne TDD setze ich mich hin und schreibe Code, der das Problem löst. Ich konzentriere mich also auf das Problem. Ganz anders, wenn ich TDD anwende. Dann schaltet mein Hirn in den Test-Mode, d. h. mich interessiert der Code der Methode erstmal gar nicht und schon der Anblick von
Java:
public static int ermittleGroessteZahl(int[] array)
löst einen Reflex aus. Ich würde das mal als den null-Reflex bezeichnen. null ist für den Programmierer die heiße Herdplatte, die man mit den Fingern berührt, der leichter Stromschlag, der einen zusammenzucken lässt. Was also passiert, wenn man der Methdoe null übergibt? Oder besser: was soll passieren? Eine NullPointerException wäre angebracht.

Das kann man testen und weiter gehts: was soll passieren, wenn array leer ist? Ooops. Auch hier wäre eine Exception angebracht, denn in einem leeren Array gibt es nun einmal keine größte Zahl. Natürlich ist es keine NPE, eher eine IllegalArgumentException oder NoSuchElementException.

Test geschrieben, weiter gehts: Das array kann null oder leer sein, gut, es kann aber auch genau ein Element enthalten, das dann natürlich auch das größte Element sein muss... Test schreiben und weiter mit zwei Elementen.

Bei zwei Elementen kommt man mit einem if, dem ternären Operator oder auch Math.max aus. Auch den Fall kann man testen, ab drei Elementen muss man sich aber was einfallen lassen: je konkreter der Testcode wird, desto allgemeiner muss der Produktivcode werden.

Beim TDD liegt der Fokus also auf der Spezifikation, das Problem wird eher nebenbei gelöst. Die Aussage ist allerdings mit Vorsicht zu genießen, denn das Problem besteht tatsächlich in der Erfüllung der Spezifikation und nicht im Code, der nur einen Teil, den happy Path, implementiert.
 

Ubk0

Mitglied
Oh, da nichts davon in der Aufgabenstellung erwähnt wird, sind dem der die Methode implementieren soll an der Stelle ziemlich viele Freiheiten gesetzt.
 

mihe7

Top Contributor
Oh, da nichts davon in der Aufgabenstellung erwähnt wird, sind dem der die Methode implementieren soll an der Stelle ziemlich viele Freiheiten gesetzt.
Es ging mir nicht um seine Aufgabe, sondern darum, dass sich die Denke mit TDD schlagartig ändert, was dazu führt, dass man sich auf Ebene der Spezifikation dem Problem nähert.

Davon abgesehen, bekommt er später auch keine Aufgabe vorgesetzt, sondern muss sich selbst darum kümmern. Da stellt sich dann schon die Frage, was man z. B. bei einem leeren Array als Maximum zurückgeben soll.
 

M.L.

Top Contributor
ziemlich viele Freiheiten
Nicht zwingend, da bereits die Art der Aufgabenstellung (statische Methoden, ohne java.util...., Testen ohne JUnit) bereits impliziert das Werkzeuge wie z.B. Streams, TDD gerade nicht verwendet werden sollen / dürfen / müssen. Da bleibt die (ältere) "zu-Fuss-Lösung" mit der Annahme das das Zielarray mindestens einen gültigen Wert enthält: https://beginnersbook.com/2014/07/java-finding-minimum-and-maximum-values-in-an-array/
 

mrBrown

Super-Moderator
Mitarbeiter
impliziert das Werkzeuge wie z.B. ... TDD gerade nicht verwendet werden sollen / dürfen / müssen
TDD ist vor allem auch die Denkweise, das kann man auch mit einer Main-Methode und ein paar Ausgaben erreichen – also genau das, was in der Aufgabe gefordert ist :)

Wenn man nicht erst die Methode fertig schreibt, bevor man sie das erste Mal ausführt, verhindert man auch die Fehler, die der TO gemacht hat
 

Ubk0

Mitglied
Wahrscheinlich ist betreffend der Fehlerbehandlung das gewünscht (ich habe hier etwas umständlich einen JUnit-Test nachgebaut):
Java:
import java.util.NoSuchElementException;
import java.util.Objects;
import java.util.stream.IntStream;

public class A1 {
    private static void check(int[] array) {
        if (array == null)
            throw new NullPointerException("The array is null.");
        if (array.length == 0)
            throw new NoSuchElementException("The array is empty (length == 0).");
    }

    public static int deineMethode(int[] array) {
        check(array);
        int max = array[0];
        for (int i : array)
            if (i > max)
                max = i;
        return max;
    }

    public static int meineMethode(int[] array) {
        check(array);
        return IntStream.range(0, array.length).map(i -> array[i]).max().getAsInt();
    }

    public static void assertEquals(Object o1, Object o2) {
        if (!Objects.equals(o1, o2)) {
            if (o1 instanceof Exception && o2 instanceof Exception
                    && !((Exception) o1).getMessage().equals(((Exception) o2).getMessage())) {
                System.out.println(o1);
                System.out.println(o2);
                System.exit(1);
            }
        }
    }

    public static void test() {
        Exception e1 = null, e2 = null, e3 = null, e4 = null;
        try {
            deineMethode(null);
        } catch (Exception e) {
            e1 = e;
        }
        try {
            meineMethode(null);
        } catch (Exception e) {
            e2 = e;
        }
        try {
            deineMethode(new int[0]);
        } catch (Exception e) {
            e3 = e;
        }
        try {
            meineMethode(new int[0]);
        } catch (Exception e) {
            e4 = e;
        }
        assertEquals(e1, e2);
        assertEquals(e3, e4);

        for (int i = 1; i < 100; i++) {
            for (int k = 0; k < 100; k++) {
                int[] a = new int[i];
                for (int j = 0; j < i; j++) {
                    a[j] = (int) (Math.random() * 20);
                    if (Math.random() < 0.5) {
                        a[j] = -a[j];
                    }
                }
                assertEquals(deineMethode(a), meineMethode(a));
            }
        }
    }

    public static void main(String[] args) {
        test();
    }
}
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
J In einem Array die größte Zahl ermitteln und Faktorisieren. Java Basics - Anfänger-Themen 5
T float soll durch schleife die größte mögliche Zahl herausfinden, Ausgabe ist aber "Infinity" Java Basics - Anfänger-Themen 1
S Größte Zahl nach Eingabe der Zahl 0 ausgeben Java Basics - Anfänger-Themen 6
J Die größte Zahl anzeigen Java Basics - Anfänger-Themen 19
kilopack15 Größte zahl eines Arrays finden Java Basics - Anfänger-Themen 1
J größte eingelesene Zahl ausgeben lassen Java Basics - Anfänger-Themen 12
C Felder(Größte Zahl, Index) Java Basics - Anfänger-Themen 6
T Größte und 2. Größte zahl Addieren Java Basics - Anfänger-Themen 29
G Rekursiv die größte Zahl eines Arrays Java Basics - Anfänger-Themen 6
O Größte zahl aus array ermitteln Java Basics - Anfänger-Themen 6
H Größte Duplikat (Größte Doppelte Wert) eines Arrays ausgeben Java Basics - Anfänger-Themen 9
M Ist es möglich, das größte und zweitgrößte element in einem Array mit nur einer Schleife ausfindig zu machen ? Java Basics - Anfänger-Themen 19
A Mit Rekursion Zufallszahlen erstellen und größte finden Java Basics - Anfänger-Themen 5
A Bitte! This ist wohl das größte Hindernis in Java Java Basics - Anfänger-Themen 19
M Files löschen - alle, ausser das größte! Java Basics - Anfänger-Themen 3
ixChronos Letzten 4 Ziffern einer großen Zahl ausgeben Java Basics - Anfänger-Themen 3
T Ich brauche eine Schleife die eine beliebige Zahl so lange durch 10 teilt bis zur Null Java Basics - Anfänger-Themen 5
Shadowrunner Variablen Gibt es eine Möglichkeit die Ziffern/Stellen einer Zahl fest zu legen? Java Basics - Anfänger-Themen 3
T Eingabe durch eine Zahl dividieren nachgucken? Java Basics - Anfänger-Themen 4
G Bei dynamischer Arrayliste nach jeder Auswahl Zahl entfernen Java Basics - Anfänger-Themen 3
M Long-Typ in String-Änderung führt zu keinem Ergebnis bei großer Zahl Java Basics - Anfänger-Themen 11
E Array, nächste Zahl zur 5 ausgeben, wie? Java Basics - Anfänger-Themen 42
A Methoden Guten Tag , ich wollte so machen dass wenn meine frog an eine fly/bee geht dann an meine Tafel geht der zahl +1 hoch. Java Basics - Anfänger-Themen 2
B Überprüfung dass Zahl nur aus 0,1 besteht Java Basics - Anfänger-Themen 2
S Vollkommene Zahl berechnen und ausgeben Java Basics - Anfänger-Themen 16
B Hashmap richtig bauen, die Tripel auf Zahl abbildet? Java Basics - Anfänger-Themen 10
B 49-bit-zahl mit genau 6 Einsen bauen? Java Basics - Anfänger-Themen 21
D Kleinste Zahl in Array finden die vorher noch errechnet werden müssen. Java Basics - Anfänger-Themen 4
M Java Ausgabe der höchsten Zahl Java Basics - Anfänger-Themen 14
Thomas06 Wie kann man mithilfe von boolean herausfinden ob eine zahl durch 5 und 7 teilbart ist ? Java Basics - Anfänger-Themen 7
M Prüfen on eine Zahl im String enthalten ist Java Basics - Anfänger-Themen 3
M zahl raten Java Basics - Anfänger-Themen 1
G Position einer unbekannten 3-stelligen-Zahl in einem String finden Java Basics - Anfänger-Themen 15
sserio Prüfen, ob eine Zahl eine periodische Zahl ist Java Basics - Anfänger-Themen 20
H Erste Schritte Nach einer Zahl n soll n Mal der String untereinander ausgegeben werden Java Basics - Anfänger-Themen 3
I Zahl aufrunden (Zeit) Java Basics - Anfänger-Themen 43
M Eine Methode die erkennt ob die ein gegebene zahl größer oder kleiner sein muss Java Basics - Anfänger-Themen 2
D Gerade oder ungerade Zahl mittels Methoden Java Basics - Anfänger-Themen 13
TanTanIsTrying Durschnitt berechnen von eingegebener Zahl bis 1 heruntergezählt Java Basics - Anfänger-Themen 9
R Fortlaufende Zahl Java Basics - Anfänger-Themen 3
A Wenn eine Zahl durch 7 teilbar ist, soll statt der Zahl ein ‘*‘ angezeigt werden. java? Java Basics - Anfänger-Themen 47
K Warum gibt mir z. B. 40^128 eine Zahl? Ich dachte mit xor kann man nur booleanwerte erhalten, also prüfen ob etwas whar oder falsch ist? Java Basics - Anfänger-Themen 1
I String Kombination erstellen anhand fortlaufender Zahl (Vertragsnummer) Java Basics - Anfänger-Themen 13
B Methoden Rekursiv festellen, ob eine Zahl gerade-oft vorkommt oder nicht Java Basics - Anfänger-Themen 4
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
Q Prüfen ob Zahl als Summe von Potenzen dargestellt werden kann. Java Basics - Anfänger-Themen 20
HelpInneed Zahl. Java Basics - Anfänger-Themen 2
R Perfekte Zahl Java Basics - Anfänger-Themen 8
D Mittlerste Zahl Java Basics - Anfänger-Themen 17
D Grösste Zahl in einer Folge herausfinden. (ULAM) Java Basics - Anfänger-Themen 9
Poppigescorn Häufigkeit einer zahl zählen Java Basics - Anfänger-Themen 5
B Konkatenieren eines Strings und inkremtierenden Zahl zu einer INT Variablen Java Basics - Anfänger-Themen 7
Poppigescorn scan.nextInt() wiederholen bis eine Zahl eingeben wird Java Basics - Anfänger-Themen 7
J Verdoppeln einer Zahl (in dem Fall Münzen) Java Basics - Anfänger-Themen 4
C Programm das feststellen kann, ob eine eingegebene Zahl einem Schaltjahr entspricht, richtig geschrieben? Java Basics - Anfänger-Themen 11
S Algorithmus (reelle Zahl <65536 von dezimal zu dual) max. 10 Nachkommastellen Java Basics - Anfänger-Themen 4
K Wie kontrolliere ich ob ich die Zahl in meinem Array schon hab? Java Basics - Anfänger-Themen 9
T Zahl in Array ersetzen Java Basics - Anfänger-Themen 2
Abraham42 Prozentsatz einer Zahl mehrmals Java Basics - Anfänger-Themen 2
Kingamadeus2000 Anzahl der Ziffern der kürzesten Zahl aus einem zurückliefern Java Basics - Anfänger-Themen 1
V Beliebige Dreistellige Zahl Teiler finden Java Basics - Anfänger-Themen 4
newcomerJava Nach doppelter Zahl eine Ausgabe Java Basics - Anfänger-Themen 10
W Random Zahl unter Berücksichtung eines Durchschnitts Java Basics - Anfänger-Themen 7
S Zahl eingeben Java Basics - Anfänger-Themen 8
A Java . punkt neben einer Zahl. Java Basics - Anfänger-Themen 1
F Eine Zahl mit Arrays vergleichen Java Basics - Anfänger-Themen 7
V Array auf eine Zahl durchsuchen Java Basics - Anfänger-Themen 15
X Nach einem Bruch testen ob es eine ganze Zahl ist Java Basics - Anfänger-Themen 6
L Erhöhung der Zahl Java Basics - Anfänger-Themen 3
F Negative Zahl erzwingen Java Basics - Anfänger-Themen 3
N Eine Zahl solange teilen bis es nicht möglich ist und die Ergebnisse ausgeben Java Basics - Anfänger-Themen 23
T Eulersche Zahl e Java Basics - Anfänger-Themen 5
S Letzte Zahl eines Integer auslesen? Java Basics - Anfänger-Themen 3
G Programm schreiben: Zahl (n) eingeben, 1+1/n+2/n+3/n+....+n/n Java Basics - Anfänger-Themen 8
B Eine ganze Zahl zerlegen. Java Basics - Anfänger-Themen 4
J Fehler beim generieren von 4 Zufallszahlen Zahl doppelt ist eigentlich ausgeschlossen Java Basics - Anfänger-Themen 9
H Harshad-Zahl (Nivenzahl) und Palindrom überprüfen Java Basics - Anfänger-Themen 2
I Wie viele 1 an Bits hat die Zahl x? Java Basics - Anfänger-Themen 5
A Gewürfelte Zahl ausgeben Java Basics - Anfänger-Themen 10
M Rationale Zahl erkennen - Kurze Frage zum Restwert nach Division Java Basics - Anfänger-Themen 3
A Überprüfen, ober eine Zahl Ziffer enthält Java Basics - Anfänger-Themen 12
O Markoff-Zahl Java Basics - Anfänger-Themen 22
B Datenbank, aktuelle Ende als Zahl an Label übergeben Java Basics - Anfänger-Themen 7
L 10-Stellige Zahl hochzählen lassen Java Basics - Anfänger-Themen 1
H String und Zahl Java Basics - Anfänger-Themen 10
R Zahl 1 bis 100 erraten Java Basics - Anfänger-Themen 12
Y Konkrete Hilfe gesucht - Anzahl der Stellen einer eingegebenen Zahl überprüfen Java Basics - Anfänger-Themen 5
J Button klick bei eine bestimmten Zahl Java Basics - Anfänger-Themen 8
B Zahl in String abspeichern und später berechnen Java Basics - Anfänger-Themen 15
H OOP eine Zahl immer weiter durch 2 teilen Java Basics - Anfänger-Themen 15
J Für jeden Buchstaben eine Zahl Java Basics - Anfänger-Themen 1
H Würfelspiel, stop bei gleicher Zahl Java Basics - Anfänger-Themen 4
B Array - die Häufigkeit der Zahl zählen Java Basics - Anfänger-Themen 9
I Erste Schritte Testen, ob eine Zahl eine Primzahl ist Java Basics - Anfänger-Themen 8
J Rekursive Methode - Ziffern einer Zahl ausgeben Java Basics - Anfänger-Themen 2
I Eulersche Zahl Java Basics - Anfänger-Themen 6
F Produkt d. Ziffern einer Zahl..?! Java Basics - Anfänger-Themen 5
J Die Zahl herausfinden die durch 2 - 30 Teilbar ist... Java Basics - Anfänger-Themen 17
A Ungeordnetes Array ordnen, Zahl einlesen und einordnen Java Basics - Anfänger-Themen 23
A Rechnen mit Text und Zahl Java Basics - Anfänger-Themen 4

Ähnliche Java Themen

Neue Themen


Oben