ich möchte mit einem Array mit der Länge 100, welches mit Zufalls Zahlen befüllt wird, dessen max,min,summe und durchschnitt ausgeben?

2 Antworten

ich... kapier irgendwie nicht was du da machst oder was dien ziel ist.
Oben definierst du ein int array mit 101 einträgen,d as ist klar.
irgendwo müsste dann initialisierung folgen.

Kapieren tue ich nun schon deine for bedingungen nicht.
start i ist 0, klar.
abbruchbedingung i<100, klar.
und nach jedem schleifendurchlauf soll i auf eine zufallszahl gesetzt werden, korrekt?
Kann dir wohl schon einen potentiellen fehler sagen:
in jedem schleifen durchlauf wird i auf einen wert
0<i<=100 gesetzt. rein zufällig.
wie du vielleicht weißt gibt es unendlich viele reelle zahlen zwischen 0 und 1.
Demnach gibt es auch unendlich vile zahlen zwischen 0 und 100.

Das heißt, wenn dein i nach nem schleifendurchlauf neu zugewiesen wird, wird es entweder i=100 zugewiesen (wozu random() den wert 1 liefern müsste) oder eine der unendlichen vielen zahlen kleiner 100. dass das von dir dann zu nem integer abgerundet wird, ist nebensächlich.
Was ich sagen will.
von allen zahlen zwischen 0 und 100 (derer es unendlich viele gibt) ist 100 die einzige, die die abbruchbedingung aktivieren würde.
Von daher ist die wahrscheinlichkeit ca. 0%, dass die abbruchbedingung je erreicht wird.
Insofern ist das praktisch ne endlos schleife.

und da ne endlosschleife nie endet (*badum tss*), werden die zeichenbefehle weiter unten auch nie erreicht.

Nur so meine theorie.
Und dann mal gefragt:

wie und warum willst du deine i werte zuweisen?

wozu die gesch9ichte mit den zufallszahlen wenn du in der shcleife ja doch nur den arrayeintrag mit dem zugehörigen index füllst?

warum nicht einfach for(int i=0; i<100; i++) ?
geht systematisch alle zahlen von 0 bis 99 durch und weißt jewweils dem eintrag den index zu.

Ausserdem ist deina rray 101 einträge größ, daher macht int i=0;i<101 mehr sinn.
Damit auch jeder eintrag gefüllt wird.

ansonsten must du mir noch mal näher erklären was du genau vorhast.
denn irgendwie erscheint mir die tatsache dass du initialisierung und durchschnitt und co. berehcnung in der selben schleife hast, recht seltsam.

Weil bspw. im 1. schritt wird ja nur der index=0 eintrag initialisiert, der rest ist noch leer (bzw. standardmäßig mit 0 vorbelegt)

jetzt schon durchschnitt berechnen?

würde die durchschnittsberechnung hinter die forschleife packen, macht mehr sinn :-)


Belus911 
Beitragsersteller
 20.06.2018, 14:23

Vielen Dank!! :-)

1

Du verwechselst da was.

  1. Das Array muss Länge 100 haben, nicht 101
  2. Die Schleife muss von 0 bis 99 laufen und das Inkrement ist 1, nicht Zufallszahl!
  3. Du musst für einfach[i] eine Zufallszahl einsetzen.

Also lautet das Ganze dann:

int[] einfach = new int[100];
for (int i = 0; i < 100; i++)
{
  einfach[i] = (int)(Math.Random() * 100);
  summe += einfach[i];
  if (einfach[i] > max) max = einfach[i];
  if (einfach[i] < min) min = einfach[i];
  durchschnitt = (float)summe / 100.0
 }

JupStrunk  20.06.2018, 14:35

eleganter währe allerdings den Durchschnitt nach der Schleife zu berechnen...

0
ohwehohach  20.06.2018, 14:41
@JupStrunk

Eleganz ist relativ. Effizienter wäre es auf jeden Fall. Und Du bist 7 Minuten zu spät mit dem Kommentar ;-)

1
densch1248  20.06.2018, 20:00
@ohwehohach

es ist sinnlos, einen (falschen) durchschnitt hundert mal in der schleife berechnen zu lassen.
Einfach unter die schleife ein
durchscnitt=summe/100.0;
fertig

0
ohwehohach  20.06.2018, 20:30
@densch1248

Das habe ich nie bestritten, dennoch hat das nichts mit Eleganz zu tun, sondern eben mit Effizienz. Jemand, der auf Effizienz keinen Wert legt, könnte argumentieren, dass es elegant wäre, alle vier Statusvariablen an der selben Stelle zu berechnen. Aber ja, ich würde normalerweise den Durchschnitt auch außerhalb der Schleife berechnen. Ich habe lediglich das Code-Beispiel abgeschrieben und an den entscheidenden Stellen korrigiert.

0
densch1248  20.06.2018, 14:28

ich würd die durchscnittsberechnung noch unter die for schleife packen.
Bringt ja nix, wenn der durchschnitt mit einem unfertig initialisierten datensatz, und das sogar noch rund 100 mal, berechnet wird :-D

1
ohwehohach  20.06.2018, 14:31
@densch1248

Das stimmt wohl. Dabei würde ich gleich noch das Semikolon ergänzen, welches ich vergessen hab... :-)

0
Belus911 
Beitragsersteller
 20.06.2018, 14:23

Vielen Dank für die Hilfe! :-)

1