Java Arrays

AMD_Rulez

Lieutenant
Registriert
Feb. 2010
Beiträge
582
Hallo.
Ich habe folgenden Quellcode:

import java.util.*;
public class Notenfeld
{
public static void main(String argv[])
{
int anzahlNoten;
float summe=0;
float notenFeld[];
Scanner input = new Scanner(System.in);
System.out.println("Wie viele Noten?");
anzahlNoten = input.nextInt();
notenFeld = new float[anzahlNoten];
for (int i = 0; i< anzahlNoten; i++)
{
System.out.print((i+1)+".Note: ");
notenFeld = input.nextFloat();
summe = summe + notenFeld;
}
System.out.println("Durschnitt:"+(summe/anzahlNoten));
System.out.println("Kontrollausgabe: ");

for ( int i = 0; i < notenFeld.length ; i++)
System.out.println(notenFeld+" ");
System.out.println("Programmende Notenfeld.");
}
}


Nun folgende Fragen:
Was passiert in den folgenden Zeilen:

1. notenFeld = new float[anzahlNoten];

2. notenFeld = input.nextFloat();

außerdem verstehe ich nicht was in der kompletten ersten for schleife geschieht:

for (int i = 0; i< anzahlNoten; i++)
{
System.out.print((i+1)+".Note: ");
notenFeld = input.nextFloat();
summe = summe + notenFeld;
}

So und die letzte Frage:
Könnte ich für follgende Zeile

anzahlNoten = input.nextInt();

auch folgendes schreiben:

anzahlNoten = Integer.parseInt(input.nextLine());

?

Vielen Dank im Vorraus:)
 
1. notenFeld = new float[anzahlNoten]

erzeugt einen neuen Array von floats mit anzahlNoten Elementen. Zu Arrays siehe z. B. hier.


2. notenFeld = input.nextFloat()

weist dem i-ten Element des Arrays den Rückgabewert von input.nextFloat() zu (eigentlich dem (i+1)-ten, weil das erste Element die Nummer 0 hat).


In der for-Schleife wird anzahlNoten mal folgendes getan:
- auf dem Bildschirm wird "(i). Note" ausgegeben
- eine Note eingelesen und an der passenden Stelle im Array gespeichert
- die Summe aller bisher eingegebenen Noten aktualisiert (indem die gerade eingegebene dazu addiert wird).


Zur letzten Frage: das sollte im Normalfall wohl auf das gleiche herauskommen, aber afaik erlaubt nextInt() es auch, mehrere Zahlen in der selben Zeile einzugeben. Mit nextLine() und parseInt() geht das nicht.
 
Okay vielen Dank dazu.

heißt das wenn ich hinter eine Variable zB. "double beispiel" die hier "[]" setze, wird automatisch ein Array für die Variable "Beispiel" deklariert?


edit:

außerdem habe ich vor das "(i+1)" noch ein "+" gestzt. also wurde aus der Zeile :"System.out.print((i+1)+".Note: ");" das hier System.out.print(+(i+1)+".Note: ");"

am ergebnis hat sich dabei jetzt nichts verändert. hat das sonst noch irgendwelche unterschiede?
 
Zuletzt bearbeitet:
Genau, das "[]" gibt an, daß es ein Array sein soll.

Das "+", das Du da gesetzt hast, ist unnötig, macht hier aber nichts. Was konkret geschieht, wenn diese Zeile ausgeführt wird, ist:

(1) Der Wert von i+1 wird berechnet (dieser Ausdruck steht in Klammern und kommt daher als erster dran)
(2) Das vorangestellte "+" wird auf das Ergebnis von (1) angewendet, was dabei natürlich gleichbleibt.
(3) Das dritte "+" wird ausgewertet. Dabei handelt es sich aber um ein anderes "+" - nämlich das String-Konkatenier-+, nicht das mathematische. Das Ergebnis von (2) wird dabei implizit in einen String umgewandelt und mit dem String ".Note" zusammengefügt.
(4) System.out.print() wird aufgerufen mit dem Ergebnis von (3) als Argument.

Wie man sieht, käme ohne Schritt (2) genau dasselbe dabei heraus.
 
okay danke für die kompetente antwort;) jetzt ist einiges viel klarer was mir google nicht beibringen konnte:P
Ergänzung ()

okay und bevor ichs vergesse eine letze Frage:D

kann ich für die Zeile
notenFeld = new float[anzahlNoten];

auch etwas anderes schreiben?

zB. notenFeld = Float.parseFloat(input.nextLine([anzahlNoten]));

und wozu sind die letzten Klammer in der Anweisung " beispiel=Integer.parseInt(input.nextLine());" gedacht?
 
AMD_Rulez schrieb:
kann ich für die Zeile
notenFeld = new float[anzahlNoten];

auch etwas anderes schreiben?

zB. notenFeld = Float.parseFloat(input.nextLine([anzahlNoten]));

Nein - Float.parseFloat() liefert einen einzelnen float-Wert, den Du einer Array-Variable nicht zuweisen kannst, und so etwas wie input.nextLine([anzahlNoten]) geht in Java nicht.

und wozu sind die letzten Klammer in der Anweisung " beispiel=Integer.parseInt(input.nextLine());" gedacht?

input.nextLine() ist eine Methode. Beim Aufruf von Methoden müssen in Java immer Klammern angegeben werden, auch wenn nichts drinsteht. Wenn man input.nextLine ohne Klammern schreibt, dann sucht der Java-Compiler nach einer Member-Variable namens nextLine und beschwert sich, weil input keine solche hat.
 
Okay nun sind alle fragen geklärt:D danke nochmal;)
 
Keine Ursache :)
 
Zurück
Oben