سؤال

أنا أحاول أن أجعل البرنامج الذي تولد إما 'الفوز' أو 'تفقد' لعملة الوجه ، الإخراج البيانات إلى ملف قراءة تلك البيانات إلى حساب متوسط, ولكن أنا الحصول على '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() (شريطة أن تكون جميع الرموز الموجودة على خطوط منفصلة).

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top