Pregunta

Estoy tratando de hacer un programa que genere, ya sea a 'ganar' o 'perder' de un tirón de la moneda, salida los datos en un archivo, y leer los datos para calcular el promedio, pero me estoy poniendo un 'java.util.NoSuchElementException' error.No estoy del todo seguro de por qué estoy haciendo esto..Ayuda sería muy apreciada.

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

        }
    }
¿Fue útil?

Solución

cambio inFile.next() a inFile.nextLine()

también, usted querrá cambiar if (token.equalsIgnoreCase( "WIN!" )) a if(token.contains("WIN!")) ya que de lo contrario nunca va a pasar (.equals compruebe si la línea entera es "GANAR!" y sólo "GANAR!", .contains comprueba si la línea tiene "GANAR!" en ella).

Otros consejos

En la lectura de bucle de prueba para inFile.hasNextLine(), pero tratar de obtener el token siguiente por inFile.next().Sin embargo, tener una línea siguiente no necesariamente significa que no es un símbolo siguiente.

Cambiar hasNextLine() a hasNext(), o cambio next() a nextLine() (a condición de que todos los símbolos son en líneas separadas).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top