2017-01-26 3 views
0

Я пытаюсь поместить числа в массив с использованием пользовательского ввода, затем найдите среднее из этих чисел, а также найдите, какие числа больше среднего. Числа попадают в массив, но когда я пытаюсь найти среднее значение, я не могу найти среднее значение, а какие числа больше среднего, потому что не все переменные видны части, пытающейся найти числа, большие, чем среднее. Но, когда я разрешаю этой части видеть все переменные (не только {} вокруг некоторых частей), она находит среднее значение для каждого отдельного номера. Итак, сейчас он печатает среднее значение для каждого числа, и он печатает null для чисел, больших, чем среднее. Как мне получить его для печати среднего значения для всех 10 чисел, а какие числа больше среднего?Найдите среднее число чисел в массиве и найдите числа, большие, чем среднее

import java.util.Scanner; 
public class MeanAndHigher 
{ 
public static void main(String [] args) 
{ 
Scanner reader = new Scanner(System.in); 
Number[]numbers = new Number[10]; 
Number[] greaterList = new Number[10]; 
int sum = 0; 
int greaterListIndex = 0; 
for (int i = 0; i < numbers.length; i++) { 
    System.out.println("Enter a number: "); 
    int a = reader.nextInt(); 
    sum += a ; 
    { 
     double average= sum/10; 
     if (a > average) 
      greaterList[greaterListIndex]=numbers[i]; 
     greaterListIndex++; 
     System.out.println("The average is: " + average); 
    } 
} 

System.out.println("Numbers greater than the average are: "); 
for(int i = 0; i < greaterListIndex; i++) { 
    System.out.println(greaterList[i]); 
} 

} 
} 
+0

Ваша основная проблема в том, что вы не t сохраняя ваш вход в массиве 'numbers'. У вас также есть свой вложенный вложенный код - вы делаете вещи в первом цикле, который действительно должен быть снаружи. –

ответ

0

Вы можете сделать что-то же просто, как это с Java 8:

public static void main(String[] args) { 
    int[] array = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 }; 

    double average = Arrays.stream(array).average().getAsDouble(); 

    System.out.println("Average: " + average); 

    System.out.println("Numbers Above Average: " + Arrays.stream(array).filter(i -> i > average).boxed().collect(Collectors.toList())); 
} 
+0

Должен любить функциональное программирование (и его частичное принятие тоже, я полагаю). –

0

Ваш первый цикл пытается справиться с усреднением до суммы numbers было найдено. Кроме того, убедитесь, что вы обратите внимание на объем и тип переменных, чтобы убедиться, что значения видны там, где это необходимо, и что возвращаются правильные результаты, такие как среднее значение двойного типа. Если вы посмотрите на синтаксис усреднения, вы увидите, что оба значения, то есть sum и 10, являются целыми числами, а в Java и других строго типизированных языках целое число возвращается из деления двух целых чисел. Ваша точность будет потеряна, и если бы это было < 1, то было бы возвращено 0 - вы не захотите этого.

import java.util.Scanner; 
public class MeanAndHigher 
{ 
public static void main(String [] args) 
{ 
Scanner reader = new Scanner(System.in); 
Number[]numbers = new Number[10]; 
Number[] greaterList = new Number[10]; 
int sum = 0; 
int greaterListIndex = 0; 
int a; 
double average; 
for (int i = 0; i < numbers.length; i++) { 
System.out.println("Enter a number: "); 
a = reader.nextInt(); 
sum += a ; 
} 
    average = sum/(double)numbers.length; 

for(int j = 0; j < numbers.length; j++){ 
    if (numbers[j] > average) 
     greaterList[greaterListIndex] = numbers[j]; 
    greaterListIndex++; 
} 
    System.out.println("The average is: " + average); 

System.out.println("Numbers greater than the average are: "); 
for(int k = 0; k < greaterListIndex; k++) { 
System.out.println(greaterList[k]); 
} 

} 
} 
+0

Я получаю сообщение об ошибке if (numbers [j]> average), который говорит, что оператор> не может быть применен к java.lang.Number, double, как я могу это исправить? – Marlee3jackson

+0

@ Marlee3jackson, справа: поскольку вы собираетесь сравнивать только целые числа, я предполагаю, тогда вы, вероятно, можете просто делить объекты с двумя номерами, и не беспокоиться о фактическом среднем в конце концов. –

+0

Как бы это сделать, если для поиска среднего вам нужно скомпоновать все числа, а затем разделить его, значит, это не значит, что оно должно быть в переменной? – Marlee3jackson

0

Поскольку вы новичок в Java и, скорее всего, принимать вводный курс здесь ответ, который использует для петель, как и ваша попытка:

import java.util.Arrays; 
import java.util.Scanner; 

public class MeanAndHigher { 
    public static void main(String [] args) { 
    Scanner s = new Scanner(System.in); 

    System.out.print("How many numbers will be in your array? "); 
    int n = s.nextInt(); 

    int arr[] = new int[n]; 
    int sum = 0; 

    System.out.println("Enter the elements of the array:"); 
    for(int i = 0; i < n; i++) { 
     arr[i] = s.nextInt(); 
     sum = sum + arr[i]; 
    } 

    System.out.println("You entered the array: " + Arrays.toString(arr)); 

    double average = sum/arr.length; 
    System.out.println("The average of the array is: " + average); 

    System.out.println("The numbers in the array that are greater than the average are: "); 
    for(int i = 0; i < arr.length; i++) { 
     if(arr[i] > average) { 
     System.out.println(arr[i]); 
     } 
    } 
    } 
} 

Выход:

How many numbers will be in your array? 3 
Enter the elements of the array: 
5 
3 
7 
You entered the array: [5, 3, 7] 
The average of the array is: 5.0 
The numbers in the array that are greater than the average are: 
7 

Попробуйте here!

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