Collections Maps

matthias(:

Mitglied
Hallo,

ich muss folgendes lösen:

Ich habe eine List<Integer> mit vielen Zahlen. Diese sollen jetzt nach den letzten beiden Ziffern (zahl%100) gezählt werden. Also in einer Map<Integer, Integer> soll als Schlüssel die Anzahl und als Key die Zahl stehen. Bis jetzt habe ich das und komm net weiter:

Java:
package bsp03;

import java.util.ArrayList;
import java.util.List;
import java.util.Map;
import java.util.TreeMap;

public class Bsp03 {
    
    private List<Integer> zahlen;
    
    public static void main(String[] args) {
        
        Bsp03 b = new Bsp03();
        b.statistik();
        
    }
    
    public Map<Integer, Integer> statistik() {
        
        zahlen = new ArrayList<Integer>();
        Map<Integer, Integer> m = new TreeMap<Integer, Integer>();
                
        zahlen.add(293873);
        zahlen.add(293873);
        zahlen.add(123626);
        zahlen.add(476836);
        
        for(Integer in : zahlen) {
            
        }
        
        System.out.println(m);
        
        return m;
    }
}
 
G

Gast2

Gast
Wo ist dein Problem genau?
Weißt du nicht wie du den Key berechnest?
Code:
in % 100
ist der Key den du suchst. Dann musst du nur noch schauen ob die Zahl schon in der Map ist, wenn ja, dann erhöhst du dessen Value um eins. Wenn der Wert noch nicht in der Map ist, dann legst du den mit dem Value 1 in die Map.
 

matthias(:

Mitglied
wenn ichs so mache geht er nie in die if rein
versteh ich net :(

Java:
for(Integer in : zahlen) {
          
            if(m.containsKey(in % 100)) {
                int x = m.get(in % 100);
                m.put(in % 100, x++);
            }
            
            m.put(in % 100, 1);
            
        }
 
G

Gast2

Gast
Er geht schon in die if Abfrage rein, aber überschreibt den Wert danach wieder direkt mit 1. Die Anweisung nach dem if gehört in einen else block.
 

faetzminator

Gesperrter Benutzer
1. Du überschreibst es immer wieder
2. [c]x++[/c] führt das inkrement erst später aus, also müsste es [c]++x[/c] sein.

Ich würds so machen:
Java:
for(Integer in : zahlen) {
    if(!m.containsKey(in % 100)) {
        m.put(in % 100, 0);
    }
    m.put(in % 100, m.get(in % 100) + 1);
}
Natürlich könnte man da noch [c]in % 100[/c] als [c]Integer[/c] zwischenspeichern. Wenn man immer nur auf die Performance setzen will, dann kann man auch [c]1[/c] putten und den Rest in ein [c]else[/c] packen - aber ich würde es so bevorzugen ;)
 

Ähnliche Java Themen

Neue Themen


Oben