2016-07-18 1 views
2

У меня есть две проблемы с моим кодом. 1) Это не дает мне правильное среднее значение, когда я добавляю значения в мой arraylist, поэтому я знаю, что мое условие в моем цикле for отключено и 2) Оно не отображает все числа в моем списке элементов массива. В нем конкретно не отображается 0-е целое число.ArrayList Рассчитать среднее значение Уменьшение Самый маленький

Вот мой код:

public class CalcAvgDropSmallest { 

    public static void main(String[] args) {  
     int lowNum = 0; // # of the lowest numbers to be dropped 
     double average; // calcuates the mean of the sum and the lowest numbers dropped 
     ArrayList<Double> inputs= getALInfo(); 
     lowNum = getLowestnum(); 
     average = calculateAvg(inputs, lowNum); 
     getAvg(inputs, lowNum, average); 

    } 

    public static ArrayList<Double> getALInfo() { 
     ArrayList<Double> inputs = new ArrayList<Double>(); 

     // Read Inputs 
      Scanner in = new Scanner(System.in); 
      System.out.println("Please enter 5 - 10 integers, Q to quit: ");   
      Double vals = in.nextDouble(); 

     while (in.hasNextDouble()) 
      { 
       inputs.add(in.nextDouble()); 
      }    

     return inputs;  
    } 

    public static int getLowestnum() {   
     int lowNum = 0; 

     // Reads Input value for # of lowest values dropped 

     System.out.println("How many of the lowest values should be dropped?"); 
     Scanner in = new Scanner(System.in); 
     lowNum = in.nextInt(); 

     return lowNum; 

    } 

    public static double calculateAvg(ArrayList<Double> inputs, int lowNum) { 
     double sum = 0; 
     double average = 0;     
     int i = 0; 
     // Calcuates the average of the array list with the lowest numbers dropped 

     for (i = 0; i < inputs.size(); i++) 
     { 
      if (inputs.get(i) > lowNum) { 
       sum = sum + inputs.get(i); 
      } 
     } 
     average = (sum/inputs.size());   

     return average; 
    } 

    public static void getAvg(ArrayList<Double> inputs,int n, double average) { 
     // It's adding all the values and dividing by the size of it, which is a problem 
     // Also, it's not showing the 0th integer aand just straight to the 1st integer 
     System.out.println("The average of the numbers " + inputs + " except the lowest " +n+ " is " +average); 
    } 
} 
+2

Вы выбрасывая первый двойной вошел! –

+0

Здесь: 'Double vals = in.nextDouble();'. Не делайте этого, не игнорируйте эту первую запись. Вы входите в vals, но никогда не кладете его в свой ArrayList. –

+0

Спасибо! Я исправил это сейчас. –

ответ

4

Во-первых, пожалуйста, программу для интерфейса (вместо конкретного типа ArrayList) List. Во-вторых, вы должны убедиться, что вы добавили каждое значение, которое вы прочитали, на ваш List. Затем убедитесь, что вы прочитали завершающее значение (и отмените его); иначе он будет отложен в буфере. Наконец, я передал бы Scanner в методы (вместо повторного объявления его локально). Мол,

public static List<Double> getALInfo(Scanner in) { 
    List<Double> inputs = new ArrayList<>(); 
    System.out.println("Please enter 5 - 10 integers, Q to quit: "); 
    while (in.hasNextDouble()) { 
     inputs.add(in.nextDouble()); 
    } 
    in.next(); 
    return inputs; 
} 

Вы могли бы упростить getLowestnum как

public static int getLowestnum(Scanner in) { 
    System.out.println("How many of the lowest values should be dropped?"); 
    return in.nextInt(); 
} 

Тогда ваш calculateAvg должен сортировать List и взять subList (отбрасывая lowNum значения) и, наконец, вернуться в среднем. Нечто подобное,

public static double calculateAvg(List<Double> inputs, int lowNum) { 
    Collections.sort(inputs); 
    return inputs.subList(lowNum, inputs.size()).stream() 
      .mapToDouble(Double::doubleValue).average().getAsDouble(); 
} 

А потом main завершить на примере

public static void main(String[] args) { 
    Scanner in = new Scanner(System.in); 
    List<Double> inputs = getALInfo(in); 
    int lowNum = getLowestnum(in); 
    double average = calculateAvg(inputs, lowNum); 
    System.out.printf("%.2f%n", average); 
} 

 Смежные вопросы

  • Нет связанных вопросов^_^