# Programm mit Arrays



## Simon100 (18. Dez 2011)

Guten Abend,

habe hier eine Aufgabe vor mir liegen und komme nicht weiter :

Ich soll eine Anwendung schreiben mit einem Datenfeld (Array) der größe 500, zufällig mit den Werten 1 bis 100 füllt.

Das habe ich bereits hinbekommen.

Aber nun soll ich den kleinesten und den größen Wert der im Array ist bestimmen und wie oft die beiden werte vorkommen. und das dann anschließen ausgeben.

Ich weiß nicht genau wie ich dem Programm sagen soll, was der kleinste und größte wert ist.
 den es kann ja sein das die werte 1 und 500 gar nicht vorkommen.



Ich hoffe ihr könnt mir helfen.


Das was ich bissher habe:[JAVA=1]

import java.util.Random;

class a2 {


 public static void main (String [] args) {

 Random rd = new Random() ;

 // Deklarieren und Initialisieren

	int [] arr =  new int [500];
	int anzahl = 0;

	//Befüllen

	for (int i = 0; i<arr.length; i++)
	{
	arr _ = rd.nextInt (100);
	}

	//Auslesen

  for (int i = 0; i<arr.length; i++)
  {
   System.out.println (arr  + " ");
  }

[/code]_


----------



## Final_Striker (18. Dez 2011)

Simon100 hat gesagt.:


> Ich weiß nicht genau wie ich dem Programm sagen soll, was der kleinste und größte wert ist.
> den es kann ja sein das die werte 1 und 500 gar nicht vorkommen.



4 78 6 23 58 56 34 1 9 37

Was ist hier der größter und kleinster Wert?
Wie hast du ihr rausgefunden?
Genau so machst du es dann auch in deinem Programm.


----------



## Simon100 (18. Dez 2011)

Ah ok habe es geschafft habe also die Zahlen verglichen

 [JAVA=1]
int maximal = arr[0];  
        for (int c = 0; c < 500; c++) {
            if (arr[c] > maximal)
                maximal= arr[c];
        }
        System.out.println("größte Zahl: " + maximal) ;

[/code]


und um den kleinsten wert zu ermitteln muss ich ja an sich das gleiche machen nur das ich paar sachen änder oder ?


----------



## Final_Striker (18. Dez 2011)

Simon100 hat gesagt.:


> und um den kleinsten wert zu ermitteln muss ich ja an sich das gleiche machen nur das ich paar sachen änder oder ?



Geht es nicht schneller das einfach auszuprobieren als eine solche Frage zu stellen?


----------



## Simon100 (18. Dez 2011)

So müsste es doch Aussehen ? ohne das er zählt wie oft die zahlen vorkommen.

Ist das richtig ? [JAVA=1]

import java.util.Random;

class ArrayTest {


 public static void main (String [] args)
 {
	// Deklarieren und Initialisieren
	int [] arr =  new int [500];
	int anzahl = 0;

	Random rd = new Random ();

	//Befüllen
	for (int i = 0; i<arr.length; i++)
	{
	arr _ = rd.nextInt (100);
	}

  //Auslesen
  for (int i = 0; i<arr.length; i++)
  {
   System.out.println (arr  + " ");
  }

  //Suche der kleinsten Zahl

  		  int minimal = arr[0];  
        for (int d = 0; d < 100; d++) {
            if (arr[d] < minimal)
                minimal= arr[d];
        }
        System.out.println("kleinste Zahl: " + minimal) ;


  //Suche der größten Zahl

          int maximal = arr[0];  
        for (int c = 0; c < 100; c++) {
            if (arr[c] > maximal)
                maximal= arr[c];
        }
        System.out.println("größte Zahl: " + maximal) ;



		}
		}

[/code]


lg Simon_


----------



## Gast2 (18. Dez 2011)

> So müsste es doch Aussehen ? ohne das er zählt wie oft die zahlen vorkommen.
> 
> Ist das richtig ?


Naja teste es aus, nimm nen kleineres Array, und kontrollier per Hand ob die Zahlen passen.


----------



## Simon100 (19. Dez 2011)

Wie kann ich den jetzt herraus finden wie oft der kleinste wer und er größte wert vorkommt ??

´mit einer for- Schleife ??


----------



## Gast2 (19. Dez 2011)

in der ersten Schleife bestimmst du den kleinsten Wert im Array.
Jetzt kannst du mit ner zweiten for-Schleife nochmal über das Array laufen und schauen wie oft der Wert vorkommt.


----------



## Simon100 (19. Dez 2011)

mh mist ich bekomme das irgendwie nicht hin 

könntet ihr mehr tipps geben ?
 weiß einfach nicht wie ich sie schleife schreiben soll.


lg Simon


----------



## Deros (19. Dez 2011)

du brauchst keine weitere schleife, einfach in der jetzigen noch zusätzlich abfragen ob "if (arr[c] == maximal)" und dann einen counter hochzählen, und nicht vergessen den counter wenn ein neuer max/min-wert gefunden wurde wieder auf 0 zu setzen


----------



## timbeau (19. Dez 2011)

Ohne 2. Schleife kann sich das Maximum doch ändern. 

@TE: For-Schleifen alle mit der Länge des Arrays als Abbruchbedingung kreieren.


```
for(...; d < 100; d++) {}
```

kann schnell in die Hose gehen und ist schlechter Stil. 


```
int minCounter = 0;
int maxCounter = 0;
for (int c = 0; c < arr.size(); c++) {
            if (arr[c] == maximal)
                { //hier machste was?!
}
/* hier äquivalent*/
        }
```


----------



## Simon100 (19. Dez 2011)

DANKE für deine antwort aber irgendwie verstehe ich das immer noch nicht 100 % .

so in der art würde das ja aussehen oder ? was meinstest du mit "counter hochzählen" (z.b. d++) ?

also habe es mal versucht aber es geht noch nicht.

Außerdem habe ich noch eine einfachere schreibweise gefunden um den größen und kleinsten wert zu ermitteln. Wie könnte ich da die anzahl des größen und kleinsten wertes ermitteln 


[JAVA=42]// Min und Max suchen
		int maxi = 0;
		int mini = 100;
		for (int i = 0; i<arr.length; i++)
		{
			maxi = Math.max (maxi, arr _);
			mini = Math.min (mini, arr );
		}

		//Ausabe
		System.out.println ("Das Maximum betraegt: " + maxi + " und das Minimum betraegt: " + mini + ".");

[/code]


Wer toll wenn ihr mir noch weiter helfen könntet !

<lg simon_


----------



## Michael... (19. Dez 2011)

Es reicht insgesamt eine Schleife mit 
	
	
	
	





```
for (int i = 0; i<arr.length; i++)
```
 in der man auf Minimum und Maximum überprüft und ggf. entsprechende Zähler erhöht oder zurücksetzt.
Um dahin zukommen ist es am Anfang vielleicht besser mit zwei Schleifen zu starten eine in der min und max ermittelt werden und eine zweite nachgelagert in der deren Häufigkeit bestimmt wird. Wenn das mal klappt, kann man dann versuchen alles in einer Schleife abzubilden.


----------



## Michael... (19. Dez 2011)

Simon100 hat gesagt.:


> [JAVA			maxi = Math.max (maxi, arr _);
> mini = Math.min (mini, arr );_


_
Das vereinfacht zwar die min max Bestimmung, aber sicher, dass der Aufgabensteller das als Lösung aktzeptiert? Ausserdem würde diese Vorgehensweise das Bestimmen der Häufigkeit in der selben Schleife erschweren.

Man muss ja pro Extrem nur drei Fälle unterscheiden.
Für das Minimum z.B.:
Wenn der aktueller Wert größer dem akt. Min. mach einfach weiter (und prüfe z.B. auf Maximum)
Wenn der akt. Wert gleich dem akt. Min. erhöhe Zähler um Eins
Wenn der akt. Wert kleiner dem akt. Min. setzte Wert als akt. Min. und setzte Zähler auf Eins._


----------



## Simon100 (21. Dez 2011)

Oh ok habe dann meine alte schreibweise genommen und es auch hinbekommen. und im nach hinein wars ja doch nicht soo schwer.

Danke noch mals !!!!!!!!!

lg Simon


----------

