Question

Je suis en train de faire un programme qui génèrent "gagner" ou "perdre" pour une pièce de monnaie, sortie les données dans un fichier, et de lire que les données pour calculer la moyenne, mais je suis un 'java.util.NoSuchElementException' erreur.Je ne suis pas entièrement sûr de savoir pourquoi je reçois ce..De l'aide serait très appréciée.

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

        }
    }
Était-ce utile?

La solution

changement inFile.next() pour inFile.nextLine()

aussi, vous aurez envie de changer if (token.equalsIgnoreCase( "WIN!" )) pour if(token.contains("WIN!")) car sinon il ne passera jamais (.equals vérifier pour voir si la totalité de la ligne est "GAGNÉ!" et seulement "GAGNÉ!", .contains vérifie si la ligne a "GAGNÉ!" en elle.)

Autres conseils

Dans la lecture de la boucle de test pour inFile.hasNextLine(), mais essayez d'obtenir le prochain jeton par inFile.next().Cependant, ayant un côté de la ligne ne signifie pas nécessairement qu'il y a une prochaine jeton.

Modifier hasNextLine() pour hasNext(), ou changer next() pour nextLine() (à condition que tous les jetons sont sur des lignes séparées).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top