2017-01-05 3 views
3

У меня есть небольшая проблема, может быть, кто-нибудь может мне помочь. У меня есть случайный массив элементов, затем подсчитайте среднее значение и сканируйте номер от пользователя. Я ищу количество массивов элементов, отличных от среднего, меньше числа, отсканированного от пользователя.Элементы массива отличаются от среднего и меньше числа

public static double average(int[][] array){ 
    double average = 0; 
    int sum = 0; 
    for(int i = 0; i < array.length; i++){ 
     for(int j = 0; j < array.length; j++){ 
      sum += array[i][j]; 
     } 
    } 
    average = (double) sum/array.length; 
    return average; 
} 

public static void main(String[] args) { 
    Random rnd = new Random(); 
    Scanner scan = new Scanner(System.in); 

    int[][] array = new int[4][4]; 
    for(int i = 0; i < array.length; i++){ 
     for(int j = 0; j < array.length; j++){ 
      array[i][j] = rnd.nextInt(10); 
     } 
    } 

    int a = scan.nextInt(); 
    average(array); 
    int elements = 0; 
    for(int i = 0; i < array.length; i++){ 
    for(int j = 0; j < array.length; j++){ 
     if(array[i][j]) { 
      // ?? need help here 
     } 
    } 
} 
+1

В чем проблема, с которой вы столкнулись в '??'. –

ответ

2

Здесь:

average(array); 

Вы вызываете свой средний метод ... но вы не использовать его результат!

double averageForArray = average(array); 

позволяет позже сравнить против этого значения, как:

int deltaGivenByUser = scan.nextInt(); 

for(int i = 0; i < array.length; i++){ 
    for(int j = 0; j < array.length; j++){ 
    if(Math.abs(array[i][j] - average) >= deltaGivenByUser) { 
     ... 

Примечания:

  • выше находится на уровне "псевдо-код"; Я не запускал его через компилятор; поэтому остерегайтесь тонких ошибок/опечаток. Мой код предназначен для того, чтобы дать вам идею как это сделать; он не предназначен для копирования/вставки/решения.
  • Пожалуйста, загляните в ваш , называя. Имя переменной типа «a» не говорит ничего. Мое имя deltaGivenByUser, вероятно, не идеально, но по крайней мере оно дает Идея, для чего эта переменная будет использоваться.
  • Затем поближе посмотрите, как работать со сканерами; например, с использованием метода hasNextInt(). В настоящий момент ваш код не будет работать, если пользователь предоставил что-то, что не является номером
  • Также отдельные вещи: у вас есть хороший метод вычисления этого среднего; вы также можете создать другой метод, который получает это значение, предоставленное пользователем; делать что обработка за пределами основного метода
1

Это рискованно:

for(int i = 0; i < array.length; i++){ 
    for(int j = 0; j < array.length; j++){ 
    sum += array[i][j]; 
} 

Вы используете размер внешнего массива для обоих контуров. Лучше использовать фактический размер вспомогательной массива:

for(int i = 0; i < array.length; i++) { 
     int[] subArray = array[i]; 
     for(int j = 0; j < subArray.length; j++){ 
     sum += subArray[j]; 
} 
Смежные вопросы