2014-12-24 34 views
1

以下是作业: 对于此程序,有两个“部分”。第一部分将运行试验,并确定每次试验开启前有多少上限,然后才能找到胜利上限。每个试验(人)都将成为赢家。每个试用版打开的上限数量写入该文件。 程序的第二部分将读取数值并计算平均值。平均数应该在4.5到5.5之间,因为有五分之一的胜算。使用随机整数

它编译和运行,但平均始终为0

我的代码:

int randNum = 0; 
    Random randNumList = new Random(); 

    int counter = 0; 
    Scanner in = new Scanner(System.in); 
    System.out.println("How many trials will there be?"); 
    int trials = in.nextInt(); 

    int winner = 0; 

    PrintWriter outFile = new PrintWriter (new File("cap.txt")); 
    //run trials 
    for (int loop = 1; loop <= trials; loop++)  
    { 
    //select random number until 5 is selected 
    randNum = randNumList.nextInt(6); 
    for (randNum = randNumList.nextInt(6); randNum == 5; randNum++) 
    { 
     randNum = randNumList.nextInt(6); 
     counter++; 
    } 

    outFile.println(loop + " " + randNum); 
    } 


    outFile.close (); //close the file when finished 

    String token = " "; 
    Scanner inFile = new Scanner(new File("cap.txt")); 

    while (inFile.hasNext()) 
    {  
     token = inFile.next(); 
     if(token.equals("5")) 
     winner++; 
    } 

    double average = winner/counter; 
    System.out.println("The average number is " + average); 
+1

什么是错了,它应该工作用代码?你试过编译/运行它吗? –

+1

你真正的问题是什么? “看看我的代码”是不是一个问题.. –

+0

它编译和运行,但平均总是0. – apsstudent

回答

0

除了int/int除法精度问题,应该是winner/(double)counter(double)winner/counter尝试将您的内部for loop更改为do while。一般来说,当你不知道确切的迭代次数时,更喜欢while

另外,randNumList.nextInt(6)是[0-5],因此有6个可能的结果 - >有1/6的机会赢得。为了解决这个问题,使用randNumList.nextInt(5)+ 1

for (int loop = 1; loop <= trials; loop++) { 
    //select random number until 5 is selected 
    do { 
     randNum = randNumList.nextInt(5) + 1; 
     counter++; 
    } while (randNum != 5); 

    outFile.println(loop + " " + randNum); //why here?? maybe you should add it below counter++; 
} 

if(token.equals("5"))将无法​​正常工作,因为你写(环+ randNum),如果你使用outFile.println(randNum);

+0

谢谢,它帮助了很多。 – apsstudent

0

你cap.txt文件不包含 “5”=>赢家= 0,平均= 0 /计数器= 0(总是)。

0

winner/counter返回一个int而不是double(整数除法,因为两个操作数都是整数,所以结果被截断)。试试这个:

winner/(double)counter 

那确实会返回一个double。

+0

谢谢。我做到了,但输出是0.04。我还有什么做错了? – apsstudent

+0

尝试使用'while(randNum!= 5)'改变'for(randNum = randNumList.nextInt(6); randNum == 5; randNum ++)'。 –