2014-12-07 8 views
0

Мой код дает мне 44400.0%. Я испортил ему кучу, но это самое близкое, что я получил к правильному ответу. Мне разрешено изменять только те строки, на которых я определил временный массив и ниже. Когда я пытаюсь разделить больше, я теряю значительные цифры, так как мне нужно три четверти как часть процента.Неверный процент от целых чисел

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

+0

@dsorenson 'percent.format()' принимает двойной. Какую часть вы не можете изменить? Вам просто нужно изменить 'percent90OrMore' – Eran

+0

Я ничего не могу изменить в последнем заявлении печати. Когда я использую эту строку кода: return ((double) count * 100)/temp.length; Я получаю эту ошибку: ArrayElements90OrMore.java:35: ошибка: возможная потеря точности return ((double) count * 100)/temp.length; ^ required: int найдено: double 1 ошибка – dsorenson

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; 
} 
Смежные вопросы