Frage

Ich versuche, ein Programm zu erstellen, das bei einem Münzwurf entweder „Gewinn“ oder „Verlieren“ generiert. Ausgabe Speichern Sie die Daten in einer Datei und lesen Sie diese Daten, um die zu berechnen Durchschnitt, aber ich bekomme ein 'java.util.NoSuchElementException' Fehler.Ich bin mir nicht ganz sicher, warum ich das bekomme.Hilfe wäre sehr dankbar.

import java.util.Scanner;
import java.util.Random;
import java.io.IOException;
import java.io.PrintWriter;
import java.io.File;
public class BottleCapPrize
{
    public static void main(String [] args) throws IOException
    {            
        int random;
        int loop = 1;
        double trials = 0;
        double winCounter = 0;
        double average;
        String token = "";

        //

        Scanner in = new Scanner(System.in);
        Random rand = new Random();
        PrintWriter outFile = new PrintWriter (new File("MonteCarloMethod.txt"));

        //User Input Trials
        System.out.print("Number of trials: ");
        trials = in.nextInt();

        //For loop (random, and print to file)
        average = 0;
        for(loop = 1; loop <= trials; loop++)
        {
            random = rand.nextInt(5);
            if(random == 1)
            {
                outFile.println("Trial: " + loop + " WIN!");
            }
            outFile.println("Trial: " + loop + " LOSE");
        }

        outFile.close();

        //read output 
        File fileName = new File("MonteCarloMethod.txt");
        Scanner inFile = new Scanner(fileName);
        while (inFile.hasNextLine())
        {
            token = inFile.next();
            if (token.equalsIgnoreCase( "WIN!" ))
            {
                winCounter++;
            }

        }

        //average and print average
        average = winCounter / trials * 100;
        outFile.println("Average number of caps to win: " + average);
        System.out.println("Average number of caps to win: " + average);

        }
    }
War es hilfreich?

Lösung

ändern inFile.next() Zu inFile.nextLine()

Außerdem werden Sie sich ändern wollen if (token.equalsIgnoreCase( "WIN!" )) Zu if(token.contains("WIN!")) denn sonst wird es nie passieren (.equals Überprüfen Sie, ob die gesamte Linie "Win!" ist, ob die gesamte Linie! und nur "Win!", .contains Schecks, um zu sehen, ob die Linie "gewinnen!" drin.)

Andere Tipps

In der Leseschleife testen Sie auf inFile.hasNextLine(), aber versuchen Sie, den nächsten Token zu bekommen inFile.next().Das Vorhandensein einer nächsten Zeile bedeutet jedoch nicht unbedingt, dass es ein nächstes Token gibt.

Entweder ändern hasNextLine() Zu hasNext(), oder ändern next() Zu nextLine() (vorausgesetzt, alle Token befinden sich in separaten Zeilen).

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top