2013-04-11 2 views
1

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

package habeeb; 

import java.util.*; 

public class Habeeb { 
    public static void main(String[] args) { 
     Scanner input = new Scanner(System.in); 
     int[] num = new int[30]; 
     int i, count=0; 

     System.out.println("Enter the integers between 1 and 100"); 

     for(i=0; i<num.length; i++){ 
      num[i]= input.nextInt(); 
      if(num[i]==0) 
       break; 
      count++; 
     } 

вызова функции здесь

 Sorting(num, i, count); 
    } 

    public static void Sorting(int[] sort, int a, int con){ 
     if (a<0) return; 
/*am sorting the array here*/ 
     Arrays.sort(sort); 
     int j, count=0; 

     for(j=0; j<con; j++){ 
      if(sort[a]==sort[j]) 
       count++; 
     } 

     System.out.println(sort[a]+" occurs "+count+" times"); 
     Sorting(sort, a-1, con); 
    } 
} 

Вот результат:

run: 
Enter the integers between 1 and 100 
2 
5 
4 
8 
1 
6 
0 
0 occurs 6 times 
0 occurs 6 times 
0 occurs 6 times 
0 occurs 6 times 
0 occurs 6 times 
0 occurs 6 times 
0 occurs 6 times 
+2

Пожалуйста, повторите попытку, поставьте скобки (даже для одного, если) и посчитайте их тоже. – sp00m

+0

Вы хотите подсчитать количество появления цифр в заданном массиве ... да? –

+0

да, и это должно быть в порядке доступа –

ответ

2

Попробуйте

Метод подсчета

public int count(int[] values, int value) 
{ 
    int count = 0; 
    for (int current : values) 
    { 
     if (current == value) 
      count++; 
    } 
    return count; 
} 

Затем используйте

int[] sorted = Arrays.sort(num); 
for (int value : sorted) 
{ 
    System.out.println("" + value + " occurs " + count(sorted, value) + " times"); 
} 

Это работает точно.

+0

делать способ слишком много работы, не нужно сортировать. – Woot4Moo

+0

@ Woot4Moo Только что написал эту функцию на [codingbat.com] (http://codingbat.com) –

+0

Хмм интересный сайт, однако вам все равно не нужно сортировать. – Woot4Moo

3

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

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

+0

спасибо, я бы проверил его ...... и попытаюсь использовать. –

2

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

Map<Integer, Integer> countMap = new HashMap<Integer,Integer>(); 


for(i=0; i<num.length; i++){ 
    int current = input.nextInt(); 
    if(countMap.get(current) != null) 
    { 
     int incrementMe = countMap.get(current); 
     countMap.put(current,++incrementMe); 
    } 
    else 
    { 
     countMap.put(input.nextInt(),1); 
    } 
} 
+0

Это довольно четко домашнее задание для кого-то в старшей школе или в начале года. Вероятно, они ограничены встроенными массивами. Слишком много людей здесь просто прыгают прямо в коллекции. Люди должны научиться реализовывать свои собственные виды, чтобы они могли изучать основы. Вы даже не пытаетесь объяснить, почему использовать карту. -1 – Lucas

+0

@ Лукас и все же другие люди в «реальном мире» делают это точно так же, когда они заканчивают слишком много операций, чтобы решить тривиальную проблему. Если вы прочтете мой пост, вы заметили бы, что я явно вызвал OP, делал слишком много работы. Если вы хотите, я могу дать тета сложности относительно того, почему правильнее использовать Карту, но чем снова это кажется немного излишним для такой тривиальной проблемы нет? – Woot4Moo

+0

@Lucas не стесняйтесь написать свой собственный ответ, чтобы получить кредит. – Woot4Moo

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