لا يمكن إصلاح 'جافا.util.NoSuchElement' خطأ [مغلقة]
-
21-12-2019 - |
سؤال
أنا أحاول أن أجعل البرنامج الذي تولد إما 'الفوز' أو 'تفقد' لعملة الوجه ، الإخراج البيانات إلى ملف قراءة تلك البيانات إلى حساب متوسط, ولكن أنا الحصول على 'java.util.NoSuchElementException
' خطأ.أنا لست متأكدا تماما لماذا أنا على الحصول على هذا..تساعد سيكون محل تقدير كبير.
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);
}
}
المحلول
تغيير inFile.next()
إلى inFile.nextLine()
أيضا, سوف تحتاج إلى تغيير if (token.equalsIgnoreCase( "WIN!" ))
إلى if(token.contains("WIN!"))
وإلا فإنه لن تمر (.equals
تحقق لمعرفة ما إذا كان خط كامل هو "الفوز" فقط "الفوز!", .contains
التحقق لمعرفة ما إذا كان الخط "الفوز" في ذلك.)
نصائح أخرى
في حلقة القراءة لك اختبار inFile.hasNextLine()
, ولكن في محاولة للحصول على رمز المقبل قبل inFile.next()
.ومع ذلك ، وجود السطر التالي لا يعني بالضرورة أن هناك المميز التالي.
إما تغيير hasNextLine()
إلى hasNext()
, أو تغيير next()
إلى nextLine()
(شريطة أن تكون جميع الرموز الموجودة على خطوط منفصلة).