在我的任务中,我必须制作一个简单版本的Craps,由于某种原因,即使两个变量都是非0,百分比赋值总是产生0,这里是代码.
import java.util.Random;
Run Code Online (Sandbox Code Playgroud)
标题,注意变量
public class Craps {
private int die1, die2,myRoll ,myBet,point,myWins,myLosses;
private double winPercent,lossPercent;
private Random r = new Random();
Run Code Online (Sandbox Code Playgroud)
只需滚动两个模具并生产一些模具.
public int roll(){
die1 = r.nextInt(6)+1;
die2 = r.nextInt(6)+1;
return(die1 + die2);
}
Run Code Online (Sandbox Code Playgroud)
Play方法,这只是循环游戏.
public void play(){
myRoll = roll();
point = 0;
if(myRoll == 2 ||myRoll == 3 || myRoll == 12){
System.out.println("You lose!");
myLosses++;
}else if(myRoll == 7 || myRoll == 11){
System.out.println("You win!");
myWins++;
}else{
point = myRoll;
do {
myRoll = roll();
}while(myRoll != 7 && myRoll != point);
if(myRoll == point){
System.out.println("You win!");
myWins++;
}else{
System.out.println("You lose!");
myLosses++;
}
}
}
Run Code Online (Sandbox Code Playgroud)
这就是bug,这是测试器方法.
public void tester(int howMany){
int i = 0;
while(i < howMany){
play();
i++;
}
Run Code Online (Sandbox Code Playgroud)
bug就在这些赋值语句中
winPercent = myWins/i * 100;
lossPercent = myLosses/i* 100;
System.out.println("program ran "+i+" times "+winPercent+"% wins "+ lossPercent+"% losses with "+myWins+" wins and "+myLosses+" losses");
}
Run Code Online (Sandbox Code Playgroud)
}
Roh*_*ain 14
可能是因为你正在进行整数除法,而分母大于分子.所以价值将为零.
您可以更改此作业: -
winPercent = myWins/i * 100;
lossPercent = myLosses/i* 100;
Run Code Online (Sandbox Code Playgroud)
至: -
winPercent = myWins * 100.0/i;
lossPercent = myLosses * 100.0/i;
Run Code Online (Sandbox Code Playgroud)
有两件事需要考虑: -
通过将你的分子转换为float: - 使你的分裂成为分裂的浮点:
winPercent = (float)(myWins)/i * 100;
Run Code Online (Sandbox Code Playgroud)而且,在整数除法的情况下,它是相关性
和优先性的问题.由于*并/具有相同的优势,并且具有从左到右的关联性.因此,myWins / i将首先进行评估.因此,很有可能该值可以为0.
因此,只要改变顺序*,并/使*第一发生.
注意,我用过100.0乘法.因为乘以100将再次导致截断.
| 归档时间: |
|
| 查看次数: |
3859 次 |
| 最近记录: |