Input/Output Roulette - Aufgabe

anhrow

Neues Mitglied
Hallo,

ich bin neu hier und habe folgendes Problem:
Wir haben folgende Aufgabe (in der Abendschule) bekommen und ich bin leider oft wegen Job und Kind verhindert gewesen und schaffe es derzeit nicht alles nachzulernen. Zumal wir nur 1 Jahr Programmieren in Java haben und es somit auch nicht längerfristig wichtig ist, mein Hauptgebiet ist eigentlich Elektrotechnik. Soviel zum Drumherum. :)

Die Aufgabenstellung lautet:

Eine Serie von Roulette-Ergebnissen soll aus einer Datei eingelesen werden. Die Häufigkeiten der einzelnen Zahlen 0 bis 36 soll bestimmt werden.
Eingabe (aus roulettezahlen.txt, siehe Beilage): Beliebig viele Zahlen zwischen 0 und 36
Ausgabe (nach output.txt und System.out): Häufigkeiten aller Zahlen von 0 bis 36
Die Zahl 0 wurde 2x gelesen.
Die Zahl 1 wurde 3x gelesen.
...
Die Zahl 36 wurde 1x gelesen.

Die Zahlen stehen jeweils in einer eigenen Zeile im Textfile.

Habe mich schon herumgespielt bin aber nicht mal Ansatzweise auf ein brauchbares Ergebnis gekommen.

Das ganze soll mit einem Array gelöst werden und das gegebene File einlesen und dann ein anderes als Speicher verwenden.

Wenn mir wer helfen könnte wäre ich wahnsinnig dankbar...

Liebe Grüße
Andreas
 
X

Xyz1

Gast
Eine Möglichkeit wär:
Java:
class R1 {

    String pre = "Die Zahl ", mid = " wurde ", post = "x gelesen.";
    Pattern p = Pattern.compile(pre + "(\\d\\d?)" + mid + "(\\d+)" + post);
    int N = 10_000;

    void makeRoulettezahlen() throws IOException {
        Random r = new Random(((Double) Math.random()).longValue());
        try ( PrintWriter w = new PrintWriter("roulettezahlen.txt")) {
            for (int i = 0; i < N; i++) {
                w.println(r.nextInt(36 + 1));
            }
        }
    }

    void makeOutput() throws IOException {
        try ( PrintWriter wo = new PrintWriter("output.txt")) {
            for (int i = 0; i < 36 + 1; i++) {
                wo.println(pre + i + mid + 0 + post);
            }
        }

        String[] s = new String[36 + 1];
        try ( BufferedReader ro = new BufferedReader(new FileReader("output.txt"))) {
            for (int i = 0; i < 36 + 1; i++) { // be careful
                s[i] = ro.readLine();
            }
        }

        try ( BufferedReader rr = new BufferedReader(new FileReader("roulettezahlen.txt"))) {
            for (int i = 0; i < N; i++) { // be careful
                int j = Integer.parseInt(rr.readLine());
                int k = Integer.parseInt(p
                        .matcher(s[j])
                        .results()
                        .map(m -> m.group(2))
                        .findFirst()
                        .orElse(null));
                s[j] = pre + j + mid + String.valueOf(k + 1) + post;
            }
        }

        try ( PrintWriter wo = new PrintWriter("output.txt")) {
            for (int i = 0; i < 36 + 1; i++) {
                wo.println(s[i]);
            }
        }
    }

    public static void main(String[] args) {
        R1 r1 = new R1();
        try {
            r1.makeRoulettezahlen();
            r1.makeOutput();
        } catch (IOException ioe) {
            ioe.printStackTrace();
        }
    }

}
(In Zeilen wo // be careful steht aufpassen.)
 
X

Xyz1

Gast
Da dürften Optionen mit Regex und Streams wohl eher nicht Thema der Veranstaltung gewesen sein...
Ja ich muss dazu sagen, dass es NICHT modular ist und nicht generisch ist - außerdem werden an einer Stelle Java 8 Features/Mittel genutzt. Das Könnte Minuspunkte geben (u.U.). :(
 

Blender3D

Top Contributor
Java:
import java.io.BufferedReader;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.FileOutputStream;
import java.io.FileReader;
import java.io.IOException;
import java.io.PrintStream;
import java.io.PrintWriter;
import java.util.Random;

public class RouletteSim {
    private final static int MAX_NUMBER = 36;
    private final static Random rnd = new Random(System.currentTimeMillis());

    public static void createSimulatedNumFile(String file, int num) {
        PrintWriter out = null;
        try {
            out = new PrintWriter(new File(file));
            for (int i = 0; i < num; i++)
                out.println(getNumber());
            out.close();
        } catch (FileNotFoundException e) {
            e.printStackTrace();
        }
    }

    public static void createStatistics(String srcFile, PrintStream out) {
        int[] numbers = new int[MAX_NUMBER + 1];
        try {
            FileReader fin = new FileReader(srcFile);
            BufferedReader in = new BufferedReader(fin);
            String nr = null;
            while ((nr = in.readLine()) != null)
                numbers[Integer.parseInt(nr)]++;
            fin.close();
            in.close();
        } catch (IOException e) {
            e.printStackTrace();
        }
        for (int i = 0; i < MAX_NUMBER + 1; i++)
            out.println(String.format("Die Zahl [%2d] wurde <%8d> x gelesen", i, numbers[i]));
    }

    public static int getNumber() {
        return rnd.nextInt(MAX_NUMBER + 1);
    }

    public static void main(String[] args) throws FileNotFoundException {
        String fileSim = "./simulate.txt";
        String fileStatistic = "./statistic.txt";
        createSimulatedNumFile(fileSim, 10000);
        createStatistics(fileSim, System.out); // print to Console
        PrintStream ps = new PrintStream(new FileOutputStream(fileStatistic));
        PrintStream console = System.out;
        System.setOut(ps);
        createStatistics(fileSim, System.out);// print to File
        System.setOut(console);
    }
}
 
X

Xyz1

Gast
Ja so hätte man das wohl machen sollen , @Blender3D . Ich habe sogar die Imports vergessen. :(:(

Aber damit hast Du quasi SEINE Aufgabe gelöst.
 

Neue Themen


Oben