2014-01-10 3 views
-3

Я пытаюсь создать программу, которая генерирует либо «выигрыш», либо «проигрыш» для флага монетки, вывод данных в файл и чтение эти данные для расчета в среднем, но я получаю сообщение «java.util.NoSuchElementException» . Я не совсем уверен, почему я получаю это. Помощь была бы очень признательна.Не удается исправить ошибку «java.util.NoSuchElement»

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

     } 
    } 
+0

Какую строку бросать 'java.util.NoSuchElementException'? –

+0

Можете ли вы включить полный стек? – Mureinik

ответ

3

изменение inFile.next() к inFile.nextLine()

также, вы хотите изменить if (token.equalsIgnoreCase("WIN!")) к if(token.contains("WIN!")) в противном случае он никогда не будет проходить (.equals проверку, чтобы увидеть, если вся линия «WIN!» И только «WIN!», .contains проверяет, есть ли в строке строка «WIN!».)

+1

Не могу поверить, что никто еще не заметил недостаток '.equalsIgnoreCase' –

0

В цикле чтения испытываешь для inFile.hasNextLine(), но попытаться получить следующий токен inFile.next(). Однако наличие следующей строки не обязательно означает, что есть следующий токен.

hasNextLine() Либо изменения в hasNext() или изменить next() к nextLine() (при условии, что все маркеры находятся на отдельных строках).

Смежные вопросы