2014-12-07 65 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; 
}