Minimum berechnen

Status
Nicht offen für weitere Antworten.

Wang

Bekanntes Mitglied
Hallo JAVA-Freunde! ;)

Ich brauche etwas Hilfe bei folgender Aufgabe:

array.jpg


Es wäre wohl am einfachsten, die Aufgabe über
Code:
Arrays.sort(zahlen);
zu lösen, aber ich denke nicht, dass das hier erlaubt ist, deshalb bin ich einen anderen Weg gegangen:

Java:
/**
 * Minimum Klasse. Diese Klasse dient zur Berechnung des Minimums einer Menge
 * von ganzen Zahlen.
 */
public class Minimum {

    /**
     * Die Methode minimum berechnet das Minimum eines Arrays vom Typ int.
     * 
     * @param zahlen
     *            Die Menge von Zahlen, deren Minimum berechnet werden soll.
     */
    public static int getminimum(int[] zahlen) {
      int minimum = zahlen[0];
      for (int i = 1; i < zahlen.length; i++) {
           if (zahlen[i] < minimum) {
              minimum = zahlen[i];
         }
       }
       return minimum;
    }

    /**
     * Die Methode main dient hier dem Testen der Methode zum Bestimmen des
     * Minimums einer Menge ganzer Zahlen.
     * 
     * @param args
     *            Array mit Parametern - wird von dieser Methode nicht
     *            verwendet.
     */
    public static void main(String[] args) {





    }
}

Würdet ihr sagen, dass das für die Teilaufgabe (a) soweit in Ordnung ist bzw. hättet ihr einen Gegenvorschlag/würdet ihr es einfacher machen?

Bei Teilaufgabe (b) habe ich das Problem, dass ich nicht weiß, wie ich die drei gegebenen Minima in die main-Methode sinnvoll integrieren kann?

Vielen Dank für Eure Mühe!
 

0din

Bekanntes Mitglied
Aufgabe A:
Lösung Top.
methodenname... etwas ungünstig, get bezeichnet eine ganz eigene sorte methoden ;) halt dich lieber an die aufgabe un nenn se "minimum"

Aufgabe B:
Java:
public static void main(String[] args)
{
Minimum min = new Minimum();
//bau dir drei int arrays mit den zahlen aus der aufgabe

System.out.println(min.getMinimum(array1));
//noma das ganze array abdrucken + leerzeile
System.out.println(min.getMinimum(array2));
//noma das ganze array abdrucken + leerzeile
System.out.println(min.getMinimum(array3));
//noma das ganze array abdrucken + leerzeile
}
 

Wang

Bekanntes Mitglied
Danke, 0din! ;)

Bei der Teilaufgabe (a) habe ich das "get" gelöscht.

Allerdings will die (b) bei mir noch nicht so ganz hinhauen (wohl auch deshalb, weil wir das Erzeugen von Objekten mit "new" noch nicht durchgenommen haben). Der Compiler meckert und gibt die Meldung "cannot find symbol" aus, während er auf den Punkt bei
Code:
min.getMinimum
zeigt.

Java:
    public static void main(String[] args) {
        Minimum min = new Minimum();
        int[] array1 = {14, 79, 142, 99};
        int[] array2 = {10, 9, 8, 7, 6, 5, 4, 3, 2, 1};
        int[] array3 = {8, 15, -3, 3};

        System.out.println(min.getMinimum(array1));
        // noma das ganze array abdrucken + leerzeile
        System.out.println(min.getMinimum(array2));
        // noma das ganze array abdrucken + leerzeile
        System.out.println(min.getMinimum(array3));
        // noma das ganze array abdrucken + leerzeile

Was mache ich falsch?

Danke für den starken Support!
 
S

SlaterB

Gast
du hast das get aus dem Methodennamen gelöscht, und wunderst dich nun, warum der Compiler bei 'getMinimum' meckert,
aja ;)
 

NC10

Mitglied
Ich hätte folgende Lösung, allerdings gibt mir diese Lösung für ein negatives Element des Arrays keine richtige Lösung aus: Warum würde mich interessieren! Danke!
Java:
public static int minimum(int[] zahlen) 
    {
        int l = zahlen.length; 
        int search=0;
        int counter = 1;
        int i = 0;
        int ii=1;
        while (counter < l)
	{    
            if (zahlen[i] < zahlen[ii])
	    {
                search = zahlen[i];
                ii++;
                counter++;
            }
            else
	    {
	        search = zahlen[ii];
                i++;
                ii++;
                counter++;
            }
        }
        return search;
    }
 

ARadauer

Top Contributor
die Lösung ist aber nicht sehr schön...

das Minimum suchen ist was sehr simples...

i++;
ii++;
counter++;
sowas ist könnte ich jetzt nicht auf die Schnelle nachvollziehen...
 

NC10

Mitglied
ja ich hab aus gesehen, dass die Lösung mit der for- Schleife einiges schöner ist! Allerdings würde mich immer noch interessieren, warum meine Lösung einen negativen Wert nicht ausgibt. Kann mir da jemand erklören! Vielen Dank!
 

Wang

Bekanntes Mitglied
du hast das get aus dem Methodennamen gelöscht, und wunderst dich nun, warum der Compiler bei 'getMinimum' meckert,
aja ;)

Danke, hat sich erledigt. :)

Es klappt jetzt perfekt, aber eine Sache verstehe ich nicht ganz:
Warum genügt es, lediglich einmal
Code:
Minimum min = new Minimum();
und darunter drei verschiedene Arrays zu schreiben, anstelle von
Code:
Minimum min = new Minimum();
array1...
Minimum min = new Minimum();
array2...
Minimum min = new Minimum();
array3...
?
 
S

SlaterB

Gast
@Wang:
anderer Frage: wieso 3 Objekte?
ein Presslufthammer kann genauso 3 Straßen zerstören wie 3 Presslufthammer, wenn es keine Probleme mit Zeit/ Ort/ Stromversorgung usw. gibt

ein Mathelehrer kann alle Aufgaben aller Schüler korrigieren, wenn er es nacheinander macht

@NC10:
> else
> {
> search = zahlen[ii];
> i++;

wenn das Element an ii kleiner ist als das an i, dann erhöhst du i um 1 und vergleichst danach weiter mit dem Element an i,
aber dieses neue Element an i muss nicht das an ii vom letzten Schleifendurchlauf sein

setze
i = ii;
statt
i++;

dann zeigt i korrekt auf das neue temporäre Minimum


edit:
search kann übrigens ganz entfallen, gib am Ende zahlen zurück,
oder nur search verwenden und auf i verzichten,
eines von beiden reicht, nicht doppelt

ii ist gleich counter +-1, da reicht eine Variable,

zum if brauchst du kein else falls der doppelte Code nach dem if ausgeführt wird,
aus while kann ne for-Schleife werden, usw., dann bist du bald beim gleichen kurzen Code
 
Zuletzt bearbeitet von einem Moderator:

NC10

Mitglied
ui klar dankeschön, Denkfehler! DANKESCHÖN, bin ich dumm ... Wie kann man sowos trainieren?
 

NC10

Mitglied
eine Frage noch: die for - Schleife ist schon irgendwie logisch, allerdings kann ich mir die while- Schleife immer besser vorstellen. Die While- Schleife führt so lange aus, wie der Ausdruck wahr ist.

Gibt es eine ähnliche gedankliche Hilfe für die for- Schleife? Was macht sie genau?
 
S

SlaterB

Gast
> Wie kann man sowas trainieren?

machst du grade, siehe Lehrauftrag deines Lehrers/ Professors ;)

Mathe Klasse 1 - 10 hätte auch geholfen
 

0din

Bekanntes Mitglied
NC10
kleiner tipp am rande, while schleifen gebraucht man vorwiegend bei dingen bei denen man die häufigkeit des durchlaufens nich kennt (z.b. eingaben die falsch sein können) oder entlosschleifen (server)

Wang
mit "Minimum min = new Minimum();" erzeugst du ein objekt vom typ Minimum, das objekt kannst du danach so oft gebrauchn wie du willst,
wenn du jedes mal nen neues objekt anmachst sobald du ne methode gebrauchn willst, kostet das nur unnötig zeit + speicher + code un schadet der lesbarkeit sehr ;)
 

Marco13

Top Contributor
Ganz (unwichtig aber) allgemein: Ich finde statt
Code:
    if (value < minValue)
    {
        minValue = value;
    }
ist sowas hübscher:
Code:
    minValue = Math.min(minValue, value);
 

0din

Bekanntes Mitglied
hübscher un netter isses schon...
aber das is dann glaub ich doch zuviel auf einmal für die zwei ;) net böhs gemeint
außerdem is die aufgabe warscheinlich u.a. auch das sie mit if abfragn und schleifchen arbeitn
 
Status
Nicht offen für weitere Antworten.

Neue Themen


Oben