Meest voorkomende waarde uit een arraylist weergeven

  • Onderwerp starter Onderwerp starter sun
  • Startdatum Startdatum
Status
Niet open voor verdere reacties.

sun

Nieuwe gebruiker
Lid geworden
31 okt 2009
Berichten
4
Hallo,

Ik moet uit een arraylist van alle waarden(double), de meest voorkomende waarde(dus een waarde die het vaakst voorkomt in die arraylist) moet worden gereturned.
Mijn vraag is of iemand mij misschien kan helpen dit op te lossen. Ik gebruik het programma bluej.
Ik hoop dat iemand mij zsm kan helpen.
Alvast bedankt.
 
Laatst bewerkt:
Ik heb de methode om alle waarden in een array te krijgen, maar ik weet niet hoe ik nu verder moet.
Wat ik dus heb is wel zeker goed:

Code:
public double getModes()
   {
     double[] a = new double[1480];
        for (Temp m : wd.getAllBla())
        {
           for(int index = 0; index < a.length; index++){
             
                a[index] = m.getCode();
            
            }
        
        }    
        
   }

Maar nu heb ik de waarde nodig wat het meest voorkomt in de array. Om het duidelijk te maken heb ik de modus nodig.
Ik hoop dat iemand me verder kan helpen.
 
Ik heb nu het volgende bedacht:

Code:
    public double getModas()
   {
     double[] a = new double[1480];
        for (Temp m : ws.getAllBla())
        {
           for(int index = 0; index<a.length; index++){
                a[index] = m.getCode();
            
            if(a[index] == a[index]){
                double b = (a[index]);
            //    System.out.println(b);
            
           
            }
        }
        }
    }
Ik heb gecontroleerd dat ik met System.out.println(b) meerdere waardes krijg met dezelfde inhoud. Maar nu moet ik tellen hoeveel waardes er zijn met dezelfde inhoud en de meest voorkomende getal moet worden weergegeven. Hoe kan ik nu tellen hoeveel dezelfde waardes er zijn? Ik hoop dat iemand dat mij kan uitleggen.
 
Is het geen idee, om iets te gebruiken van int i = 0; i = i++;
dat je eerst een variabele i = 0 maakt en er dan steeds 1 bij optelt als iets waar is
Code:
if( De waarde hetzelfde is ) {
i++; 
}
het is maar een idee :)
 
Laatst bewerkt:
Bedankt voor je reactie!
Als ik dat doe met i++ krijg ik een hele grote waarde i?
Maar ik moet dus uit een array de meest voorkomende getal laten returnen.
Ik hoorde van iemand dat ik een Map moet gebruiken in java, die dit kan doen.
Weet iemand misschien hoe ik zo'n Map kan gebruiken hiervoor?
 
Volgens mij bedoel je een Hashmap ( http://java.sun.com/j2se/1.3/docs/api/java/util/HashMap.html )

trouwens als je het in het engels in google typt vind je genoeg forums waarop deze vraag is gesteld. Je bent niet de enige met het probleem. http://www.google.nl/#hl=nl&q=the+m...the+mode+of+an+array+java&fp=8b5dc20de4ccd027

voorbeelden:
http://www.java-forums.org/new-java/11551-finding-mode-array.html
http://answers.yahoo.com/question/index?qid=20080512144032AAF2zpY

misschien heb je er wat aan, zelf heb ik niet zo een oplossing.
 
Een manier is inderdaad mbv een Map.

Een Map is verzameling van Key en Value elementen. In jou geval zal de map dus moeten bevatten Key = de waarde uit de array en als Value het aantal keer dat je deze Key bent tegen gekomen.

In een Map kan je alleen Objecten plaatsen, dus geen double of int!
Maar gelukkig kan je een double wel eenvoudig omzetten naar het object Double (dus met hooffdletter).. Double d = Double.valueOf(1.09112);

succes,

ps heb de code niet getest....

Code:
	Map<Double,Integer> map = new HashMap<Double,Integer>();
		
		for (...) { // hier je lus over al je elementen. 
			Double d = Double.valueOf(waarde); //maak een Double object aan.   
			if (map.containsKey(d)) {  //waarde is zit al in de map, dus aantal keer met 1 verhogen..
				Integer aantalKeer = map.get(d);  
				aantalkeer = Integer.valueOf(aantalKeer.intValue() + 1); //Integer kan je niet met 1 verhogen, dus moet je een nieuwe Integer aanmaken. 
				map.put(d, aantalKeer);  //omdat je een nieuwe Integer hebt gekregen, moet je dit object weer oplaan in de map.
			} 
			else {
				map.put(d, Integer.valueOf(1));
			}
		}
		
		//
		Set<Map.Entry<Double, Integer>> entries = map.entrySet();  // entries is verzameling van je Key,Value pairs. 
		
		Map.Entry<Double,Integer> max = null;     
		for (Map.Entry<Double, Integer> entry : entries) {  //hier gaan we door alle entries heen, en bewaren de hoogste..
			if (max == null || max.getValue().intValue() < entry.getValue().intValue()) {  //
				max = entry;
			}
		}
 
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan