# Minimum berechnen



## Wang (2. Dez 2009)

Hallo JAVA-Freunde! 

Ich brauche etwas Hilfe bei folgender Aufgabe:







Es wäre wohl am einfachsten, die Aufgabe über 
	
	
	
	





```
Arrays.sort(zahlen);
```
 zu lösen, aber ich denke nicht, dass das hier erlaubt ist, deshalb bin ich einen anderen Weg gegangen:


```
/**
 * 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 (2. Dez 2009)

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:

```
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 (2. Dez 2009)

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 
	
	
	
	





```
min.getMinimum
```
 zeigt.


```
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!


----------



## SlaterB (2. Dez 2009)

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


----------



## NC10 (2. Dez 2009)

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! 

```
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 (2. Dez 2009)

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 (2. Dez 2009)

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 (2. Dez 2009)

SlaterB hat gesagt.:


> 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 
	
	
	
	





```
Minimum min = new Minimum();
```
 und darunter drei verschiedene Arrays zu schreiben, anstelle von 
	
	
	
	





```
Minimum min = new Minimum();
array1...
Minimum min = new Minimum();
array2...
Minimum min = new Minimum();
array3...
```
 ?


----------



## SlaterB (2. Dez 2009)

@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_


----------



## NC10 (2. Dez 2009)

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


----------



## NC10 (2. Dez 2009)

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?


----------



## Wang (2. Dez 2009)

NC10 hat gesagt.:


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



"Programmieren lernt man nur durch Programmieren!"


----------



## SlaterB (2. Dez 2009)

> Wie kann man sowas trainieren? 

machst du grade, siehe Lehrauftrag deines Lehrers/ Professors 

Mathe Klasse 1 - 10 hätte auch geholfen


----------



## 0din (2. Dez 2009)

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 (2. Dez 2009)

Ganz (unwichtig aber) allgemein: Ich finde statt

```
if (value < minValue)
    {
        minValue = value;
    }
```
ist sowas hübscher:

```
minValue = Math.min(minValue, value);
```


----------



## 0din (2. Dez 2009)

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


----------



## w0ddes (2. Dez 2009)

Joah ist ne typische Übungsaufgabe für If und for   musste ich auch mal machen


----------

