2012-04-06 3 views
0

이것은 내가 원하는 것입니다 :
숫자가 아닌 숫자가 입력 될 때까지 사용자가 원하는만큼 많은 숫자를 입력하도록하십시오. 은 100 개 미만의 숫자가 있다고 가정합니다. 자주 입력하는 번호를 찾습니다. ( 경우 모두 인쇄, 하나 이상 존재한다.)
출력 예 :
입력 : 5
입력 4
입력 9
입력 9
입력 4
입력 1
입력 : a
가장 일반적인 : 4, 9
나는 가장 흔한 숫자 인 것을 알아낼 수있는 지점에 있습니다. 그러나 같은 번호를 반복해서 인쇄하고 싶지는 않습니다. 위의 예 : 가장 일반적인 방법 : 4, 9, 9, 4
수행해야 할 작업은 무엇입니까?같은 번호의 반복을 피하려면 어떻게해야합니까?

public static void main(String[] args) throws IOException { 
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
    String[] input = new String[100]; 
    System.out.print("Input: "); 
    input[0] = in.readLine(); 
    int size = 0; 
    for (int i = 1; i < 100 && isNumeric(input[i-1]); i++) { 
      System.out.print("Input: "); 
      input[i] = in.readLine(); 
      size = size + 1; 
    } 
    /*for (int i = 0; i < size; i++) { //testing 
     System.out.println(input[i]); 
    }*/ 
    int numOccur; 
    int[] occur = new int[size]; 
    for(int i = 0; i < size; i++) { 
     numOccur = 0; 
     for (int j = 0; j < size; j++) { 
      if(input[i].equals(input[j])) { 
       numOccur = numOccur + 1; 
      } 
     } 
     occur[i] = numOccur; 
     //System.out.println(numOccur); //testing 
    } 
    int maxOccur = 0; 
    for(int i = 0; i < size; i++) { 
     if(occur[i] > maxOccur) { 
      maxOccur = occur[i]; 
     } 
    } 
    //System.out.println(maxOccur); //testing 
    for (int i = 0; i < size && !numFound; i++) { 
     if(occur[i] == maxOccur) { 
      System.out.println(input[i]); 
     } 
    } 

} 

//checks if s is an in, true if it is an int 
public static boolean isNumeric (String s) { 
    try { 
     Integer.parseInt(s); 
     return true; //parse was successful 
    } catch (NumberFormatException nfe) { 
     return false; 
    } 
} 

해결책을 찾았습니다!

String[] mostCommon = new String[size]; 
    int numMostCommon = 0; 
    boolean numFound = false; 
    for (int i = 0; i < size; i++) { 
     int isDifferent = 0; 
     if (occur[i] == maxOccur) { 
      for (int j = 0; j < size; j++) { 
       if (!(input[i].equals(mostCommon[j]))) { 
        isDifferent = isDifferent + 1; 
       } 
      } 
      if (isDifferent == size) { 
       mostCommon[numMostCommon] = input[i]; 
       numMostCommon = numMostCommon + 1; 
      } 
     } 
    } 
    for (int i = 0; i < numMostCommon - 1; i++) { 
     System.out.print("Most common: " + mostCommon[i] + ", "); 
    } 
    System.out.println(mostCommon[numMostCommon - 1]); 
+0

이 숙제가 있습니까? –

+0

yeap, 죄송합니다 태그를 추가하는 것을 잊어 버렸습니다. & while 루프에 대해서만 함수, 배열을 배웠습니다 – user1215225

답변

0
Set<Integer> uniqueMaxOccur = new HashSet<Integer>(); 
    for (int i = 0; i < size ; i++) { 
     if(occur[i] == maxOccur) { 
      //System.out.println(input[i]); 
      uniqueMaxOccur.add(input[i]); 
     } 
    } 

과 세트의 값을 표시

+0

설명 할 수 있겠지만, 세트 사용에 익숙하지 않습니다. 또한, 다른 방법이 있습니까? – user1215225

+0

설정을 사용하는 것이 논리적으로 가장 좋습니다. 여기 [Set] 튜토리얼 [http://docs.oracle.com/javase/tutorial/collections/interfaces/set.html]을 참조하십시오. 반복기를 사용해야한다는 힌트. –

+0

세트없이 작업하는 것은 좋지 않습니다. 생각할 수있는 것은 모든 사이즈를'size/maxoccur' 크기의 배열로 저장하고이 배열에 숫자를 추가해야한다는 것입니다. 인쇄하기 전에 모든 항목에 중복이 있는지 확인해야합니다. 그러나 다시 한 번 세트를 사용하여 당신을 추천합니다. –

0

Set을 사용하고 이미 인쇄 된 값을 저장할 수 있습니다.

1

이이 frequenceis를 저장하는 데 한계가 매우 적은 즉 미만 100 의사 코드가 같은 것입니다 당신은 해시 테이블을 사용할 수
vector<int> hash(101)
cin>>input
if(isnumeric(input))
hash[input]++
else{max=max_element(hash.begin(),hash.end());
for(int i=0;i<100;i++)
if(hash[i]==max)
print i
}

0

어떻게 이런 일에 대해?

public static void main(String[] args) throws IOException { 
    BufferedReader in = new BufferedReader(new InputStreamReader(System.in)); 
    Map<string,int> numberLookup = new HashMap<string,int>(); 
    Boolean doContinue = true; 
    while (doContinue) 
    { 
     System.out.print("Input: "); 
     String input = in.readLine(); 
     if (isNumeric(input)) 
     { 
      if (!numberLookup.containsKey(input)) 
       numberLookup.put(input,1); 
      else 
       numberLookup.put(input, numberLookup.get(input) + 1); 
     } 
     else 
      doContinue = false; 
    } 

    maxOccur = numberLookup.values().max(); 
    System.out.print("These numbers were all entered " + maxOccur + " times:"); 
    Iterator it = numberLookup.entrySet().iterator(); 
    while (it.hasNext()) 
    { 
     (Map.Entry)it.next(); 
     System.out.println(pairs.getKey()); 
    } 
} 

죄송합니다, 저는 C# 인물이며 자바 컴파일러가 없으므로 약간의 조정이 필요할 수 있습니다.

관련 문제