2013-04-03 125 views
1

我在平均顯示小數時出現問題。它一直顯示.00或.1。 我試圖把它上雙,但我仍然得到同樣的results.Also,我想包括第一個整數,我輸入的總和,但我不知道how.Please幫助:如何平均輸出小數?

import java.io.*; 
import java.util.*; 

public class WhileSentinelSum 
{ 
static final int SENTINEL= -999; 

public static void main(String[] args) 
{ 
    // Keyboard Initialization 
     Scanner kbin = new Scanner(System.in); 

    //Variable Initialization and Declaration 
     int number, counter; 
     int sum =0; 
     int average; 

    //Input 
     System.out.print("Enter an integer number: "); 
     number = kbin.nextInt(); 
     counter=0; 


    //Processing 
    //Output 
     while(number != SENTINEL) 
     { 
      counter++; 
      System.out.print("Enter an integer number: "); 
      number = kbin.nextInt(); 
      sum += number; 
     } 

     if (counter !=0) 
      System.out.println("\nCounter is: " + counter); 
     else 
      System.out.println("no input"); 

     average= sum/counter; 
     System.out.println("The sum is " + sum); 
     System.out.println("The average is " + average); 


     System.out.println(); 

    }//end main 
}//end class 
+0

'average'必須是'double'。在平均分配時,做這個計算:'average =(sum + 0.0)/ counter;' – Justin 2013-04-03 22:07:36

+0

看看這個:http:// stackoverflow。com/questions/2909451/java-simple-division-in-java-bug-feature – Justin 2013-04-03 22:11:04

回答

5

即使你宣佈averagedouble,則sumcounter變量int,所以Java將其分配給average之前仍然使用integer division ,例如5/10結果在0而不是0.5

演員一個變量來double師強制浮點操作前:

double average; 

... 
average = (double) sum/counter; 

您可以處理它包括在計算的第一個數字你進入while循環之前(如果它是而不是哨兵價值)。

+0

謝謝,如何將我輸入的第一個整數添加到總和中? – eLg 2013-04-03 22:13:58

+1

與在while循環中添加到總和中的方式相同。 – rgettman 2013-04-03 22:14:41

+0

它給出了不同的答案 – eLg 2013-04-03 22:18:19

1
average = sum/counter; 

該行正在執行整數除法(即它切斷了真實結果的小數部分)。你應該將其更改爲

average = (double) sum/counter; // perform double division, not int division 

其中第一蒙上sumdouble,因此,定期進行雙師。

請注意,您需要將average變量的類型更改爲double


只是爲了說明我的觀點:

int a = 3; 
int b = 2; 

System.out.println(a/b); 
System.out.println((double) a/b); 
 
1 
1.5 
1

它看起來像問題是,說

average = sum/counter; 

行即使你做average一個doublesum/counter仍然是整數除法,這將產生一個整數的答案。你可以試着說

double average = ((double)sum)/counter; 

另一種解決方案是使double類型的sumcounter,也使average一個double

+0

從技術上講,沒有必要在括號中加上'(double)sum' ......無論如何,該演員將被應用於_sum_。這就是說,你可以通過說它更具表現力來贊成對方。 – jahroy 2013-04-03 22:15:49

0

初始化總和和平均值加倍。 使用kbin.nextDouble()。

+0

把它們作爲整數可能會更好,但要把它們中的一個加到分裂的雙精度上。 – jahroy 2013-04-03 22:16:57

0

據說:如果需要確切的結果,千萬不要使用doublefloat您應該更喜歡BigDecimal。基元不使用大多數人希望的舍入模式。