简单的百分比计算。它不会返回除0.0之外的值,我认为一次或两次返回100.0%。除此之外,它不会做任何事情。我试过用几种不同的方式玩代码,但它不会工作。
for (int loop = 1; loop < loopCount; loop++)
{
aa = r.nextInt(10+1);
abc = (int) aa;
String[] userAnswer = new String[x];
int totalQues = (correctAnswer + wrongAnswer), actualQues = (totalQues - 1);
if(abc < x)
{
userAnswer[abc] = JOptionPane.showInputDialog(null,"Question "+quesNum+"\n\n"+questions[abc]+"\n\nA: "+a[abc]+"\nB: "+b[abc]+"\nC: "+c[abc]+"\nD: "+d[abc]+"\nCorrect Answers: "+correctAnswer+"\nWrong Answers: "+wrongAnswer+"\nTotal Questions: "+totalQues);
if(userAnswer[abc].equals(answers[abc]))
{
correctAnswer++;
}
else
{
wrongAnswer++;
}//else
if(actualQues == x);
{
score = (correctAnswer / actualQues) * 100;
JOptionPane.showMessageDialog(null,"The test is finished.");
JOptionPane.showMessageDialog(null,"You scored "+score+"%");
}//if
}//if
}//for
答案 0 :(得分:4)
更改
score = (correctAnswer / actualQues) * 100;
到
score = ((double)correctAnswer / actualQues) * 100;
答案 1 :(得分:3)
由于您正在进行整数除法,因此该操作的结果将始终为0或1.而是尝试在分割之前转换为浮点数:
score = (int)((correctAnswer / (1.0 * totalQues)) * 100);
答案 2 :(得分:2)
假设correctAnswer
和totalQues
都是整数类型,则行score = (correctAnswer / totalQues) * 100;
将使用整数除法(结果为0或1)。要避免这种情况,您需要显式地将其转换为浮动类型:
score = (correctAnswer / ((double)totalQues)) * 100;
答案 3 :(得分:1)
score = (correctAnswer / actualQues)
如果correctAnswer
和actualQues
都是int,那么得分每次都会得0,因为int值不能处理十进制值,这就是我们使用浮点的原因。
correctAnswer
和/或totalQues
应该是float / double(BigDecimal是迂腐的)。这样,其中一个操作数是一个浮点值,除法是用浮点运算完成的,而不是整数算术和SHAZAM !,你将得到一个非零(非截断)结果。
答案 4 :(得分:0)
将属性转换为<甚至声明>“ double ”类型。这应该适合你。
答案 5 :(得分:0)
如果您不需要或想要双倍,最简单的解决方案是首先进行多重化。
score = 100 * correctAnswer / actualQues;
在这种情况下,得分仍为int值。