30.08.2007, 16:48 |
Auf diesen Beitrag antworten » |
iko |
Java
Hallo, möchte folgende aufgabe lösen:
Zitat: |
Schreiben sie eine Applikation die
- 1000 ganzzahlige Zufallszahlen zwischen 0 und 100 erzeugt und diese untereinander in eine datei schreibt
-aus dieser erzeugten datei die zahlen ausliest, den durchschnitt berechnet und diesen wert ausgibt |
hab die zahlenwerte erstmal verändert damit ich alles im überblick hab, was alles geschieht.
komm nun aber nich mehr weiter.
Zitat: |
import java.io.*;
public class Zufall{
public static void main(String args[])throws java.io.IOException{
int zufallsZahl;
String s;
int d=0;
PrintWriter schreiben = new PrintWriter(new FileWriter("Zufallszahlen.txt"));
for (int i=0;i<5;i++){
zufallsZahl = (int)(Math.random()*101);
schreiben.println(zufallsZahl);
}
schreiben.flush();
schreiben.close();
BufferedReader einlesen = new BufferedReader(new FileReader("Zufallszahlen.txt"));
while ((s = einlesen.readLine()) != null){
System.out.println(s);
d++;
}
for (int p=0; (s = einlesen.readLine()) != null;p++){
int tor [] = new int [d];
tor[p]=Integer.parseInt(s);
System.out.println("2. "+s);
}
einlesen.close();
System.exit(0);
}
}
|
Kann mir jmd sagen, warum die letzte for-schleife nicht funktioniert?
Bekomme nich die gewünschte ausgabe....
Gruß
iko |
30.08.2007, 17:39 |
Auf diesen Beitrag antworten » |
Tobias |
Ich seh da einige Fehler.
Erstmal solltest du besser die Random-Klasse von Java benutzen. Dann kannst du 100 Zufallszahlen so erstellen:
code: |
1:
2:
3:
4:
5:
6:
|
Random rnd = new Random();
// Zufallszahl zwischen 1 und 100
int rndNmbr = rnd.nextInt(100) + 1;
|
|
Beim Einlesen der Datei benutzt du zuerst eine While-Schleife um die Zeilen zu zählen und danach eine For-Schleife. Das "einlesen" zeigt aber nach der While-Schleife bereits auf das Ende der Datei, weswegen die For-Schleife danach nicht mehr durchlaufen wird. Außerdem legst du in der for-schleife in jeder Iteration das Array "tor" neu an. Richtig wäre es, vor der for-Schleife das Array einmal anzulegen.
Noch besser ist es, zum Abspeichern der Int-Werte eine verkettete Liste zu verwenden. So brauchst du die Größe der Datei garnicht kennen.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
|
BufferedReader einlesen = new BufferedReader(new FileReader("Zufallszahlen.txt"));
LinkedList<Integer> linkedList = new LinkedList<Integer>();
while ((s = einlesen.readLine()) != null){
try {
int val = Integer.parseInt(s);
} catch (NumberFormatException e) {
System.out.println("Fehler: " + e);
return;
}
linkedList.put(new Integer(val));
} |
|
|
30.08.2007, 17:46 |
Auf diesen Beitrag antworten » |
iko |
ja danke... kam gerade selber drauf mit den dynamischen datenstrukturen und hab ein Vector benutzt.
so funkts auch wunderbar...
Zitat: |
import java.io.*;
import java.util.*;
import javax.swing.JOptionPane;
public class Zufall{
public static void main(String args[])throws java.io.IOException{
int zufallsZahl;
String s;
int gesamt=0;
PrintWriter schreiben = new PrintWriter(new FileWriter("Zufallszahlen.txt"));
for (int i=0;i<1000;i++){
zufallsZahl = (int)(Math.random()*101);
schreiben.println(zufallsZahl);
}
schreiben.flush();
schreiben.close();
BufferedReader einlesen = new BufferedReader(new FileReader("Zufallszahlen.txt"));
Vector<String> v = new Vector <String>();
while ((s = einlesen.readLine()) != null){
v.add(s);
}
einlesen.close();
for (int i=0;i<v.size();i++){
gesamt = gesamt + Integer.parseInt(v.get(i));
}
double durchschnitt= ((double)gesamt)/(v.size());
JOptionPane.showMessageDialog(null,"Der Durchschnitt beträgt: "+durchschnitt);
System.exit(0);
}
}
|
könnte man das ganze auch kürzer gestalten und trotzdem zum ziel kommen??? |
30.08.2007, 19:02 |
Auf diesen Beitrag antworten » |
Tobias |
Wenn du nur den Durchschnitt haben willst, dann brauchst du keine dynamische Datenstruktur.
code: |
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
|
BufferedReader einlesen = new BufferedReader(new FileReader("Zufallszahlen.txt"));
int sum = 0;
int count = 0;
while ((s = einlesen.readLine()) != null){
sum += Integer.parseInt(s);
count++;
}
System.out.println("Durchschnitt: " + ((double)sum /count ) )
|
|
|