计算结果为0.0?

时间:2010-06-03 15:40:04

标签: java arrays loops

简单的百分比计算。它不会返回除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

6 个答案:

答案 0 :(得分:4)

更改

score = (correctAnswer / actualQues) * 100;

score = ((double)correctAnswer / actualQues) * 100;

答案 1 :(得分:3)

由于您正在进行整数除法,因此该操作的结果将始终为0或1.而是尝试在分割之前转换为浮点数:

score = (int)((correctAnswer / (1.0 * totalQues)) * 100);

答案 2 :(得分:2)

假设correctAnswertotalQues都是整数类型,则行score = (correctAnswer / totalQues) * 100;将使用整数除法(结果为0或1)。要避免这种情况,您需要显式地将其转换为浮动类型:

score = (correctAnswer / ((double)totalQues)) * 100;

答案 3 :(得分:1)

score = (correctAnswer / actualQues)

如果correctAnsweractualQues都是int,那么得分每次都会得0,因为int值不能处理十进制值,这就是我们使用浮点的原因。

correctAnswer和/或totalQues应该是float / double(BigDecimal是迂腐的)。这样,其中一个操作数是一个浮点值,除法是用浮点运算完成的,而不是整数算术和SHAZAM !,你将得到一个非零(非截断)结果。

答案 4 :(得分:0)

将属性转换为<甚至声明>“ double ”类型。这应该适合你。

答案 5 :(得分:0)

如果您不需要或想要双倍,最简单的解决方案是首先进行多重化。

score = 100 * correctAnswer / actualQues;

在这种情况下,得分仍为int值。