2010-06-03 73 views
2

簡單的百分比計算。它不會返回0.0以外的值,我認爲有一次或兩次返回100.0%。除此之外,它不會做一件事。我嘗試過用幾種不同的方式來玩代碼,它只是不會工作。計算出來0.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

aa = r.nextInt(10 + 1) 您有這樣做的原因嗎?這與aa = r.nextInt(11)是一樣的。您可能想要aa = r.nextInt(10)+ 1. – 2010-06-03 16:15:49

回答

1
score = (correctAnswer/actualQues) 

如果同時correctAnsweractualQues是廉政局的得分,然後每次將得到0,因爲INT值無法處理十進制值,這就是爲什麼我們使用浮點。

correctAnswer和/或totalQues應該是float/double(BigDecimal是迂腐)。這樣,其中一個操作數是浮點值,除法是在浮點運算中完成的,而不是整數運算...和SHAZAM!,您將得到一個非零(非截斷)結果。

+0

謝謝!這解決了\ m / – 2010-06-03 15:49:26

4

變化

score = (correctAnswer/actualQues) * 100; 

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

因爲你正在做的整數除法,該操作的結果將始終是0或1。相反,嘗試強制轉換爲浮點數在劃分之前:

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

假設correctAnswertotalQues是整數類型,行score = (correctAnswer/totalQues) * 100;將使用整數除法(導致0或1)。爲了避免這種情況,你需要顯式轉換一個浮動型:

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

演員(甚至宣稱)爲「」類型的屬性。這應該爲你解決。

0

如果您不需要,或者想要雙倍,最簡單的解決方案是首先進行乘法。

score = 100 * correctAnswer/actualQues; 

在這種情況下,分數仍爲int值。