2016-05-20 3 views
-1

Ich bin relativ neu in der Programmierung und ich habe an einem Java-Projekt für etwa 2 Tage, die zehn Zahlen liest und zeigt die Häufigkeit des Auftretens jeder Nummer, während mein Code gut aussieht und es läuft , es funktioniert nicht zwei Zahlen scheinen zu können, zählen, die weit voneinander entfernt, auch nach der Sortierung sind, bitte ich aus Ideen laufen und bin offen für VorschlägeFrequenz der Elemente in einem Array

Hier ist mein Code:

public static void sortarray(int [] tennumbersarray){ 
    for(int i =0 ;i<9;i++){ 
     int currentmin = tennumbersarray[i]; 
     int currentminindex = i; 
     for(int j=i+1;j<10;j++){ 
      if(currentmin>tennumbersarray[j]){ 
       currentmin= tennumbersarray[j]; 
       currentminindex = j; 
      } 
     } 
     if(currentminindex!=i){ 
      tennumbersarray[currentminindex]=tennumbersarray[i]; 
      tennumbersarray[i]=currentmin; 
     } 
    } 
} 
public static void main(String[] args) { 
    int tennumbersarray [] = new int[10]; 
    for (int i =0 ;i<10;i++){ 
     String tennumbersstring = JOptionPane.showInputDialog("enter a number :"); 
     tennumbersarray [i] = Integer.parseInt(tennumbersstring); 
    } 

    sortarray (tennumbersarray); 

    for (int i=0;i<10;i++){    
     int count =1; 
     for (int j=i+1;j<10;j++) 
     { 
      if(tennumbersarray[i]==tennumbersarray[j]) 
      { 
       count++; 
      } 
      else{ 
       break; 
      } 
     } 
     String output = ""+tennumbersarray[i] +"----> "+count; 
     JOptionPane.showMessageDialog (null,output); 
     i+=count; 
    } 
} 
} 
+1

bitte den Code und entfernen irrelevant Methode des Codes formatieren/indent, so können wir sehen, schneller, wo mögliche Ursachen befinden sich in .... –

+0

Auch Verwenden Sie camelCase für Variablennamen, damit es einfacher zu lesen ist: 'tennumbersarray' =>' tenNumbersArray' –

Antwort

-1

diesen Code versuchen stattdessen :

public int[] frequency(int[] tennumbers){ 
int[] frequency = new int[100]; 
for(int i=0; i< tennumbers.length ; i++){ 
frequency[tennumbers[i]]++; 
} 
return frequency; 
} 

Auf diese Weise können Sie die Frequenz von beispielsweise '60' durch Zugriff auf den 60. Index Ihres Frequenzarrays ermitteln. wie folgt aus:

int[] freq=frequency(tennumbers); 
int sixtyFrequency=frequ[60]; 
+0

direkte Adressierung? Was ist, wenn eine Nummer in 'tennumbers''> = 100' ist? –

+0

Dies ist nur ein Beispiel für einen Ansatz, ich dachte, es ist immer noch weniger komplex als sein Original –

1

denke, mit ich HashMap Sie bequem die Frequenz der Zahl finden können.

Ex:

int tenNumbersArray[] = new int[10]; 

tenNumbersArray[0] = 10; 
tenNumbersArray[1] = 20; 
tenNumbersArray[2] = 30; 
tenNumbersArray[3] = 10; 
tenNumbersArray[4] = 10; 
tenNumbersArray[5] = 40; 
tenNumbersArray[6] = 50; 
tenNumbersArray[7] = 60; 
tenNumbersArray[8] = 70; 
tenNumbersArray[9] = 70; 

HashMap<Integer, Integer> numberAndItsOcuurenceMap = new HashMap<Integer, Integer>(); 

for (int num : tenNumbersArray) { 
    Integer frequency = numberAndItsOcuurenceMap.get(num); 
    numberAndItsOcuurenceMap.put(num, frequency != null ? frequency + 1 : 1); 
} 

OUTPUT:

{50 = 1, 70 = 2 20 = 1, 40 = 1, 10 = 3 60 = 1, 30 = 1}

Um die Häufigkeit des bestimmten zu erhalten übergeben Sie einfach den Schlüssel an die Karte. Ex:

numberAndItsOcuurenceMap.get(10); 

OUTPUT

0

Sie eine Karte

public static void main(String[] args) { 
    int tennumbersarray[] = new int[10]; 
    for (int i = 0; i < 10; i++) { 
     String tennumbersstring = JOptionPane.showInputDialog("enter a number :"); 
     tennumbersarray[i] = Integer.parseInt(tennumbersstring); 
    } 
    Map<Integer, Integer> frequences = new HashMap<Integer, Integer>(); 

    for(int number : tennumbersarray) 
     if(frequences.get(number) == null) 
      frequences.put(number, 1); 
     else 
      frequences.put(number, frequences.get(number) + 1); 

    for(Entry<Integer, Integer> entry : frequences.entrySet()) 
     JOptionPane.showMessageDialog(null, entry.getKey() + "----> " + entry.getValue()); 
} 
0

Zurückgreifen auf die Sortierung der Array verwenden können, um die Frequenz ihrer Objekte zu zählen ist eine Idee, die funktioniert, aber es ist nicht notwendig. Zum Beispiel würde ich diesen Ansatz verwenden, wenn mir gesagt würde, dass es eine Datei (auf einem Unix-Computer) mit tausenden von Zahlen gäbe und ich gefragt wurde, wie oft jede Nummer in dieser Datei erscheint, ohne Java-Code zu schreiben:

cat file | sort -n | uniq -c

Aber da du mit dem Schreiben eines Ihrer ersten Java-Programme beauftragt sind, stelle ich Ihnen die Idee einer Hash-Tabelle. Eine solche Hash-Tabelle wird in Java unter Verwendung einer HashMap realisiert, wobei Schlüssel Ganzzahlen sind und Werte auch Ganzzahlen (für Starter) sind. Jedes Mal, wenn Sie eine ganze Zahl auftreten, erhöhen Sie seine Zählung:

public static Map<Integer, Long> count(int[] ints) { 
    Map<Integer, Integer> counter = new HashMap<>(); 
    for (int i : ints) { 
     if (counter.containsKey(i)) 
      counter.put(i, counter.get(i) + 1); 
     else 
      counter.put(i, 1); // initialize 
    } 
    return counter; // here, we'll have each number mapped to 
        // how many times it appears in ints {1: 23, 3: 2} ... 
} 
Verwandte Themen