2014-12-07 97 views
0

我的代碼給我44400.0%。我已經搞砸了一堆,但這是最接近我的正確答案。我只允許改變我已經定義了temp數組和下面的行的內容。當我嘗試劃分更多時,我輸掉了有效數字,因爲我需要四分之三作爲百分比的一部分。從整數不正確的百分比

import java.text.DecimalFormat; 

public class ArrayElements90OrMore 
{ 
    public static void main(String [] args) 
    { 
     int [] array = { 91, 82, 73, 94, 35, 96, 90, 89, 65 }; 
     DecimalFormat percent = new DecimalFormat("#0.0%"); 

     System.out.print("The elements are "); 
     for (int i = 0; i < array.length; i++) 
      System.out.print(array[i] + " "); 
     System.out.println(); 

     System.out.println("The percentage of elements 90 or greater is " 
          + percent.format(percent90OrMore(array))); 
    } 

    public static int percent90OrMore(int [] temp) 
    { 
     int count = 0; 
     for (int i = 0; i < temp.length; i++) { 
      if (temp[i] >= 90) { 
       count++; 
      } 
     } 

     return (count * 1000)/(temp.length); 
    } 
} 

回答

3

在一般情況下,你應該乘以100得到一些分數的百分比:

return (count * 100)/temp.length; 

但是,如果你已經使用percent.format顯示比例爲百分比,你應該簡單地返回分數:

return (double) count/temp.length; 

注意,在這種情況下percent90OrMore必須返回一個浮動或雙。否則,你將總是得到0或1

public static double percent90OrMore (int[] temp) 
    { 
     int count = 0; 
     for (int i = 0; i < temp.length; i++) 
     { 
      if (temp[i] >= 90) 
      { 
       count++; 
      } 
     } 
     return (double)count/temp.length; 
    } 
+0

這是真的讓我煩惱的事情。我不應該改變第一部分,它不會接受雙倍。如果它接受雙倍的話,這很容易。 – dsorenson 2014-12-07 09:12:25

+0

@dsorenson'percent.format()'確實接受double。哪一部分不能改變?您只需更改'percent90OrMore' – Eran 2014-12-07 09:15:14

+0

我無法通過上一個打印語句更改任何內容。當我使用這行代碼:return((double)count * 100)/ temp.length; 我收到此錯誤: ArrayElements90OrMore.java:35:錯誤:可能丟失精度 返回((double)count * 100)/ temp.length; ^ 必需:int 找到:雙重 1錯誤 – dsorenson 2014-12-07 09:18:17

0
如果你不想改變方法的返回類型

奇怪的方式是:

System.out.println("The percentage of elements 90 or greater is " 
         + percent.format(percent90OrMore(array) * 1000.0d/((double) temp.length))); 

,並更改如下你的方法:

public static int percent90OrMore(int [] temp) { 
    int count = 0; 
    for (int i = 0; i < temp.length; i++) { 
     if (temp[i] >= 90) { 
      count++; 
     } 
    } 

    return count; 
}