2013-04-11 2 views
1

배열을 강조 정렬하고 배열 요소를 계산하려고 시도했습니다. 누락 된 것을 찾도록 도와주세요. 여러 번 디버깅했습니다. 여기에 내 코드와 출력이있다. 여기에 기능 여기배열 정렬 및 해당 요소 계산

 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); 
    } 
} 

를 호출 덕분에

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++; 
     } 

출력입니다 :

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

괄호 (1 개의 경우에도)를 다시 입력하고 계산하십시오. – sp00m

+0

주어진 배열에서 숫자의 발생 횟수를 계산 하시겠습니까? 예? –

+0

예, 그렇습니다. 그리고 그것은 억지력이 있어야합니다. –

답변

2

다음이 확실히 작동

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

을 사용하여이

세는 방법

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

을보십시오.

+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 학년 때 누군가를위한 숙제입니다. 아마도 원시 배열로 제한됩니다. 너무 많은 사람들이 항상 컬렉션으로 바로 뛰어 들어갑니다. 사람들은 기초를 배울 수 있도록 자신의 종류를 구현하는 법을 배워야합니다. 지도를 사용해야하는 이유를 설명하려고 시도조차하지 않습니다. -1 – Lucas

+0

@Lucas 그리고 "현실 세계"의 다른 사람들은 사소한 문제를 해결하기 위해 너무 많은 작업을 수행하는 똑같은 일을합니다. 당신이 내 글을 읽으면 내가 분명히 OP를 외쳤다는 것을 알았을 것이다. 너무 많은 일을하고 있었다. 내가 세타에게 왜 맵을 사용하는 것이 더 정확한지에 대한 복잡성을 줄 수는 있겠지만, 그 같은 사소한 문제에 대해서는 과도한 잔인한 것처럼 보입니다. – Woot4Moo

+0

@ 루카스는 크레딧을받을 자신 만의 답을 자유롭게 쓸 수 있습니다. – Woot4Moo