2012-04-06 5 views
0

Das ist, was ich will:
Lassen Sie den Benutzer so viele Nummern eingeben, wie sie wollen, bis eine Nicht-Nummer eingegeben wird (Sie können davon ausgehen, dass es weniger als 100 Nummern geben wird). Finde die am häufigsten eingegebene Nummer. (Wenn gibt es mehr als eine, alle von ihnen drucken.)
Beispiel Ausgang:
Input: 5
Input: 4
Input: 9
Input: 9
Input: 4
Input: 1
Eingabe: a
Am häufigsten: 4, 9
Ich bin an den Punkt in meinem Code, wo ich es geschafft habe herauszufinden, welche die häufigsten Zahlen sind. Ich möchte jedoch nicht immer wieder die gleiche Nummer ausdrucken; Beispiel von oben: Am häufigsten: 4, 9, 9, 4
Was ist zu tun?Wie kann ich die Wiederholung derselben Nummer vermeiden?

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

Die Lösung gefunden!

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

Sind das Hausaufgaben? –

+0

yeap, Entschuldigung vergessen, das Tag hinzuzufügen. Ich habe nur gelernt, Funktionen, Arrays, für & While-Loops – user1215225

Antwort

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

und zeigt die Werte in der Menge

+0

Könnten Sie erklären, ich bin nicht vertraut mit einem Satz. Gibt es noch andere Möglichkeiten, dies zu tun? – user1215225

+0

Es ist logisch am besten zu verwenden Set Sie finden das Set-Tutorial [hier] (http://docs.oracle.com/javase/tutorial/collections/interfaces/set.html). Hinweis: Sie müssen einen Iterator verwenden. –

+0

Es wird nicht empfohlen, ohne Set zu arbeiten, und alles, was mir einfällt, ist, dass Sie jede gedruckte Nummer in einem Array der Größe "size/maxoccur" speichern und die Zahlen in diesem Array hinzufügen müssen. Vor dem Drucken müssen Sie alle Elemente auf Duplizierung überprüfen. Aber wieder werde ich dich mit einem Set empfehlen. –

0

können Sie einen Set verwenden und die Werte speichern, bereits gedruckt.

1

könnten Sie die Hash-Tabelle verwenden hierfür die frequenceis zu speichern, wie die Grenze sehr geringer ist, dh weniger als 100 Pseudo-Code aussehen würde:
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

Was ist so etwas wie das?

Entschuldigung, ich bin ein C# -Personal und habe keinen Java-Compiler auf mich, so dass dies einige Anpassungen benötigen könnte.

Verwandte Themen