Der Fehler „java.util.NoSuchElement“ kann nicht behoben werden [geschlossen]
-
21-12-2019 - |
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);
}
}
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).