Java

Neue Frage »

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
 
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));
}
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???
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 ) )
 
 
Neue Frage »
Antworten »


Verwandte Themen

Die Beliebtesten »
Die Größten »
Die Neuesten »