2016-06-27 2 views
-4

Базовая его программа выполняет ввод 6 чисел от пользователя, сохраняет их в массиве, вычисляет их Среднее и Режим. Также подсчитайте, сколько чисел больше среднего. Код моей программы, где я ошибаюсьКак я могу найти режим в массиве?

Мое значение верно, но у меня проблема в режиме.

упаковка p18;

import java.util.Arrays; импорт java.util.Scanner;

public class P18 { 

public static void main(String[] args) { 

Scanner S=new Scanner(System.in); 
    int[] arr1=new int [6]; 
    for (int i = 0; i < 6; ++i) { 
     int g = S.nextInt(); 
      arr1[i] = g; 
    } 

    int input=6; 

    double total=0d; 
    double mean; 

    for(int i=0;i<input;i++) 
    { 
    total=total+arr1[i]; 
    } 
    mean= total/input; 

    System.out.println("the mean is:" + mean); 

PROBLEM STARTS FROM HERE MODE PORTION 


    int max=0;//problem starts from here 
    int maxFreq=0; 

    Arrays.sort(arr1); 

    max = arr1[arr1.length-1]; 

    int[] count = new int[max + 1]; 

    for (int i = 0; i < arr1.length; i++) { 
    count[arr1[i]]++; 
} 

for (int i = 0; i < count.length; i++) { 
    if (count[i] > maxFreq) { 
     maxFreq = count[i]; 
    } 
} 

for (int i = 0; i < count.length; i++) { 
    if (count[i] == maxFreq) { 
     return i; 
    }} 
return -1; 
    }} 
+0

http://stackoverflow.com/questions/1053843/get-the-element-with-the-highest-occurrence-in-an-array –

ответ

1

Вы не храните входные данные в массиве вообще. Вам нужно добавить что-то вроде следующего, чтобы сохранить введенные пользователем:

Scanner S=new Scanner(System.in); 
int[] arr1=new int [6]; 
for (int i = 0; i < 6; ++i) { 
    int g = S.nextInt(); 
    arr1[i] = g; 
} 

int input=6; 

double total=0d; 
double mean; 

for(int i=0;i<input;i++) 
{ 
    total=total+arr1[i]; 
} 
mean= total/input; 

System.out.println("the mean is:" + mean); 

Я также изменил среднее и общее количество до удваивается, так что вы можете получить десятичное значение для среднего значения, в противном случае было бы округлить.

+0

Благодарю вас, dcod, что вы гений, так что же такое режим? –

0

Вы должны задать для каждого номера, который нужно задать пользователю, и если вы хотите, значит, вам нужно использовать поплавок или двойной.

Scanner S = new Scanner(System.in); 
double mean, total; 
double input = 6; 
double arr1 = new double[input]; 


for (int i = 0;i<input;++i){ 
    arr[i] = S.nextDouble(); 
} 

for(int i=0;i<input;i++) 
{ 
total=total+arr1[i]; 
} 
mean= total/input; 

System.out.println("the mean is:" + mean); 
+0

Итого может быть int 'хотя –

+0

Если вы уверены, что среднее будет целочисленным использованием «int» вместо «double». И это тот же код –

+0

Всего может быть int, даже если среднее не может. Никакое целочисленное деление не будет выполняться до тех пор, пока вход будет двойным (или реальным), поэтому только вход и среднее может (вероятно) нуждаться в дробной части –

0

Как вы думаете, что вы читаете 6 целых чисел? Вы вызываете S.nextInt() только один раз и не используете его возвращаемое значение. Это должно быть сделано в вашем цикле, чтобы читать несколько входов и делать с ними что-то.

0

Найти среднее легко; другие ответы охватывали это.

Вы также хотите, чтобы вы использовали цикл для сбора 6 значений для вашего массива и вызывали nextInt() для всех этих значений.

Более сложная часть может быть в режиме. Способ, который я вижу для решения для режима:

1) Сортируйте массив.

2) Создайте int, чтобы удерживать значение текущего режима, и еще один int, чтобы удерживать количество вхождений этого режима. Вам также понадобится счетчик int.

3) Используя цикл, пройдите через отсортированный массив. Для каждого числового значения в массиве подсчитывайте, сколько раз оно происходит. Поскольку он находится в отсортированном порядке, каждый раз, когда значение изменяется, вы знаете, что подсчитали все это значение. Проверьте, больше ли вхождение больше текущего наибольшего вхождения, и если да, измените значение возникновения и значение режима.

+0

Пожалуйста, проверьте код в соответствии с вашим предложением, где это неправильно? –