Informatiker Board (http://www.informatikerboard.de/board/index.php)
- Themengebiete (http://www.informatikerboard.de/board/board.php?boardid=1)
-- Theoretische Informatik (http://www.informatikerboard.de/board/board.php?boardid=5)
--- Java (http://www.informatikerboard.de/board/thread.php?threadid=247)


Geschrieben von iko am 30.08.2007 um 16:48:

  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



Geschrieben von Tobias am 30.08.2007 um 17:39:

 

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));
}



Geschrieben von iko am 30.08.2007 um 17:46:

 

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???



Geschrieben von Tobias am 30.08.2007 um 19:02:

 

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 ) )


Forensoftware: Burning Board, entwickelt von WoltLab GmbH