2015-04-01 2 views
-2

Я пытаюсь найти режим для своей программы, пользователь вводит количество чисел от 0 до 100 столько, сколько они хотят, я пытаюсь найти режим из этих чисел, но каждый раз, когда я пытаюсь найти режим, он возвращает мне 3, я нашел все остальное, мне просто нужна помощь с режимом.Как найти режим массива с использованием Java

import java.util.Scanner; 

public class deveation { 
    public static void main(String Args[]) { 
     Scanner kbReader = new Scanner(System.in); 
     int sum = 0; 
     int bob[] = new int[101]; 
     int total = 0; 
     int a = 0; 
     int min = 0; 
     int max = 100; 
     int mode = 0; 
     boolean stay_in_loop = true; 

     while (stay_in_loop) { 

      System.out.println("Please enter interger(s) from 0-100: "); 
      int number = kbReader.nextInt(); 

      if (number < 0) { 
       stay_in_loop = false; 
      } 

      else { 
       total++; 
       bob[number]++; 
      } 
     } 

     int median = total/2 + 1; 
     while (median > 0) { 
      median -= bob[a]; 
      a++; 
     } 
     a--; 
     boolean findit = true; 
     while (findit) { 
      if (bob[min] != 0) 
       findit = false; 
      else 
       min++; 
     } 

     boolean findme = true; 

     while (findme) { 
      if (bob[max] != 0) 
       findme = false; 
      else 
       max--; 
     } 

     for (int p = 0; p < 101; p++) { 
      if (bob[p] > mode) { 
       mode = bob[p]; 
      } 
      for (int j = 0; j < 101; j++) 
       if (bob[j] <= mode) 
       //I don't know why I'm getting three for this 
       { 

       } 
     } 

     for (int i = 0; i < 101; i++) { 
      sum += bob[i] * i; 

     } 
     System.out.println(sum); 
     System.out.println(sum /= total); 
     System.out.println(a); 
     System.out.println(min); 
     System.out.println(max); 
     System.out.println(mode); 
     //You should start putting down these comments 
    } 

} 
+0

Невозможно воспроизвести вашу проблему. Что вы имеете в виду, вы всегда получаете три? – Aify

+0

В тот же день вышли два ответа, но вы не голосовали, не принимали и не отвечали - так подано. Поскольку комментатор говорит, что они не могут воспроизвести, голосование также закрывается. – halfer

ответ

0

Попробуйте использовать что-то вроде хэш-карты, где ключом будет число и значение, которое будет числом вхождений. И вы можете просто отслеживать самую высокую ценность. Также вы должны иметь возможность сделать это в значении времени O (n) в одном цикле через массив. В Интернете есть множество примеров поиска режима.

+0

'bob [i]' уже подсчитывает количество вхождений 'i'. –

+0

@pbabcdefp ahh yup my bad..missed, что – Kerbstomp

1

Вы делаете mode = bob[p], но bob[p] - это сколько раз число появилось в вашем массиве. mode действительно должен быть p.

Например, предположим, что bob массив:

[2, 1, 3, 1, 1, 2] 

Это означает, что 0 появляется дважды, 1 появляется один раз, 2 появляется три раза и так далее. mode в этом случае равен 2, который задается индексом массива, а не значением, хранящимся в массиве.

Чтобы найти режим, нам нужно пройти через массив count (bob) и сохранить две переменные: mode и самый высокий count до сих пор. Нет необходимости цитировать дважды или использовать вложенные циклы.

int count = 0; 
int mode = 0; 
for (int p = 0; p < bob.length; p++) { 
    // If the count of the p element is greater than the greatest count until now 
    if (bob[p] > count) { 
     // Update the greatest count 
     count = bob[p]; 
     // p is the new mode 
     mode = p; 
    } 
} 
1

Режим - это число (число), которое повторяется чаще всего. Я бы избавился от внутреннего цикла, который у вас есть.

for (int p = 0; p<101; p++) { 
    if (bob[p]>mode) { 
     mode=bob[p]; 
    } 
} 

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

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

for (int p = 0; p < 101; p++) { 
    if (bob[p] == mode) { 
     System.out.println("Mode Number: " + p); 
    } 
} 

Помните, что в режиме может быть более одного номера.

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