absolute Häufigkeit

Status
Nicht offen für weitere Antworten.
G

Guest

Gast
ich habs noch mal in nem extra thread getan, weil der alte eigentlich nicht relevant dafür ist. (Projektarbeit - problem)

AUfgabe:
Eine Tabelle mit den absoluten Häufigkeiten der Returncodes.

also, wenn ich mir das mal so vorstell, muss da nachher eine Tabelle stehen, die wie folgt aussieht:

Returncode|Häufigkeit
-------------|------------
xxx | 2
xxxx | 5
xxxxxxx | 1

so ungefähr...


d.h. das programm muss sich die returncodes nehmen, gucken was das für einer ist (ihn quasie mit den anderen vergleichen) und zählen wie oft er vorkommt.

zur allgemeinen erklärung noch mal, das programm ließt am anfang logfiles ein und zerstückelt die in die einzelnen informationen (z.b. returncode).

ich wüsst ja, wie ichs machen könnt, wenn es nur returncodes gebe die mir bekannt sind. dann würd ich die einfach durch if abfragen durchgehen. aber das is nicht der fall, also mir sind die verschiedenen returncodes nicht bekannt.

kann mir da vielleicht wieder jemand einen tip begeben?
 

function

Bekanntes Mitglied
du musst ja nicht alle codes kennen. du könntest dir ja ein 2dim array erstellen(das ausreichend groß ist) in dem du die return codes auflistest. wenn du einen ausgelesen hast überprüfst du ob er exisitert wenn ja dann den counter erhöhen, wenn nein dann dann hinten eintragen. is bestimmt nicht die schönste lösung, aber was besseres fällt mir grad nciht ein


[edit]Hab mir dein Problem nochmal durch gelesen, ich würde dir eine Hashmap empfehlen, ist wesentlich flexibler. Da kannst du dann deine Returncodes als key festlegen und dann incrementieren[/edit]
 

Joker

Bekanntes Mitglied
hab jetzt nur kurz deinen Einführungspost im anderem Thread gelesen. Musste sowas ähnliches auch mal machen, war aber wohl etwas umfangreicher (Logdateien verschiedener Server wurden in eine DB auf einem Logserver per Daemon mit inotify in Echtzeit eingetragen, etc...).

Logfiles können teilweise ziemlich groß werden, da wäre es vielleicht sogar zu überlegen ob du das ganze nicht beim Einlesen in eine Datenbank einträgst (lokal mit http://java.sun.com/developer/technicalArticles/J2SE/Desktop/javadb/ ). Das würde die Auswertung wesentlich vereinfachen, deine Returncodetabelle hättest du ja zum Beispiel mit einem einfachem

select code, count(*) from tabelle group by(code);

und ist, je nach größe der Logfiles, sehr viel performanter.
 

ARadauer

Top Contributor
mach dir eine hashmap mit dem returncode als key und der anzahl als wert.

du iterierst über deine glesenen zeilen drüber
ist ein code als key in der hashmap vorhanden, incrementierust du den wert und gibst ihn wieder rein
ist er nicht vorhanden fügst du eine 1 als wert mit dem code als key ein
 
G

Guest

Gast
@ joker:

da wirst du wohl recht haben. aber sowas wollen die als ergebnis garnet haben und ich glaube das programm wird in der praxis eh nie eingesetzt....

aber vielen dank.


@ARadauer:

ok, danke, ich werd mir mal was über diese hashmap druchlesen und es ausprobieren.
 

ARadauer

Top Contributor
ich hab die hashmap lösung schnell ausprogrammiert.

fall du probleme damit hast kannst du von mir ein beispiel haben.
bzw wir könnens ja später vergleichen
 
G

Guest

Gast
ist gut, ich bin grad dabei mir was darüber durch zulesen, wie das geht und so. versuch es dann und dann stell ichs hierein und frag dich halt gegebenenfalls *g*
vielen dank schon mal
 
G

Guest

Gast
Code:
public HashMap<String,Number> getErgebnisHaeufigkeit(){
    	
    	 
    	for(LogFileZeileErg zeile: logFileZeilen){
  			HashMap<String,Number> test = new HashMap<String,Number> ();  
  	    	test.put (zeile.getReturncode(),new Integer(+1));
    	}
    	System.out.println(test);
    	return test;
     }

also, das hab ich jetzt bisher, es stimmt aber nicht. bei dem System.out wollt ich die einfach mal testweise ausgeben lassen, aber das scheint nicht so einfach zu funktionieren oder?
und bei return unterstreicht der mir das test auh rot.

der gedanke von dem was ich geschrieben hab, ist der:
also ich hab gelesen das man mit put() etwas in die hashmap speichert. wenn aber der selbe returncode schon drin ist wird der wert (also die integer zahl) überschrieben, aus dem grund hat ich +1, aber wenn ich mir das so echt überleg kann das ja auch net funktionieren.
ginge das mit ner if?
also if (zeile.getReturncode() == zeile.getReturncode()) {
// soll der den wert irgendwie nicht überschreiben sondern erhöhen
}
else {
test.put (zeile.getReturncode(),new Integer(+1));
}


???
ich guck auch noch mal weiter im internet
 
G

Guest

Gast
ah, ich bin echt blöd, ich hab schon mal die fehler gefunden, also weshalb das test bei return unterstrichen ist und weshalb die ausgabe nicht ging.
 

ARadauer

Top Contributor
wenn du die hashmap innerhalb der for schleife erstellst, überchreibst du sie dir immer wieder und sie ist ausserhalb nicht mal sichtbar. und du musst schon überprüfen ob schon ein element mit dem schlüssel in der map ist.

also du hast einen container, in dem du objekte (value) anhand eines schlüssels (key) einordnen (put) und wieder finden (get) kannst. der schlüssel ist eindeutig. in diesem fall ist dein schlüssel der code und das Objekt die Anzahl in Form von Integer.

Wenn du zwei Objekte mit dem selben Schlüssel einordnest, wird das alte objekt überschrieben.

schau dir das mal an und versuche, das nachzuvollziehen:

Code:
import java.util.HashMap;
import java.util.Set;


public class Test{
	public static void main(String[] args) {
		HashMap<String, Integer> map = new HashMap<String, Integer>();
		
		String[] keys = {"404", "500", "404", "500", "404", "Bier"};
		
		//map aufbauen
		for (String key : keys) {
			Integer value = map.get(key);
			if(value!=null){
				map.put(key, (value.intValue()+1));				
			}else{
				map.put(key, 1);
			}
		}
		
		//anzeigen
		Set<String> keys2 = map.keySet();
		for(String key : keys2){
			System.out.println(key+":"+map.get(key));
			
		}		
	}
}

for (String key : keys) {
ist nichts anderes als

for(int i = 0; i < keys.length;i++){
String key = keys;
 
G

Guest

Gast
ok, leuchtet ein, ich hatte meins in der zwischenzeit auch nochmal verändert. hab nur eine frage:
map.put(key, (value.intValue()+1));

was ist dieses value, bzw. dann value.intValue() ??

Code:
  public HashMap<String,Number> getErgebnisHaeufigkeit(){
    	
    	HashMap<String,Number> test = new HashMap<String,Number> (); 
    	for(LogFileZeileErg zeile: logFileZeilen){
    		if(!test.containsKey(zeile.getReturncode())){
    		   test.put(zeile.getReturncode(), new Integer(1));
    		}
    		else {
    			test.put(zeile.getReturncode(), //fehlt noch);
    		}
  			
  			
    	}
    	Set<String> erg = test.keySet();
        for(String zeile.getReturncode() : erg){
           System.out.println(zeile.getReturncode()+ ":"+test.get(zeile.getReturncode()));
    	return test;
     }

ach und bei der ausgabe hab ich glaub ich was flasch umgesetzt grad, aber da schau ich selbst grad noch mal, wollt dir nur mal zeigen wie ichs jetzt hab
 
S

SlaterB

Gast
> was ist dieses value, bzw. dann value.intValue() ??
?

kurz davor steht doch
Integer value = map.get(key);

was soll dann die Frage?
und Integer.intValue() ist auch in der API erklärt falls du dir nicht denken kannst, was der intValue() eines Integers wohl ist :bae:

---------

> for(String zeile.getReturncode() : erg){

ist kein Java-Code
 
G

Guest

Gast
habs zum laufen bekommen. vielen dank noch mal.
verstehs jetzt auch, nach einigem selbst rumprobieren...
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
U Absolute path funktioniert nicht Java Basics - Anfänger-Themen 5
O Absolute Pfade in mehrere Klassen verwenden Java Basics - Anfänger-Themen 3
L Manifest und absolute Pfade Java Basics - Anfänger-Themen 5
T Aufrufen von get-Methode aus anderer Klasse (absolute Anfängerfrage) Java Basics - Anfänger-Themen 2
B Relative/Absolute Pfadangabe. Wie unterscheiden? Java Basics - Anfänger-Themen 4
H Absolute null ersetzen Java Basics - Anfänger-Themen 2
L absolute beginner . wie klassen strukturieren Java Basics - Anfänger-Themen 2
P Absolute Verzweiflung: Linux + Java + CLASSPATH Java Basics - Anfänger-Themen 8
C Absolute Cursor Position oder doch relative? Java Basics - Anfänger-Themen 4
S Wie bekomme ich absolute Werte (Betrag einer Zahl)? Java Basics - Anfänger-Themen 5
M Häufigkeit von Wörtern zählen Java Basics - Anfänger-Themen 6
Kiki01 Wie würde eine geeignete Schleife aussehen, die die relative Häufigkeit für jeden Charakter in einem Text bestimmt? Java Basics - Anfänger-Themen 3
Poppigescorn Häufigkeit einer zahl zählen Java Basics - Anfänger-Themen 5
H Häufigkeit von Zahlen ermitteln Java Basics - Anfänger-Themen 23
B Häufigkeit einzelner Zahlen in einem Array Java Basics - Anfänger-Themen 6
O FilterStream häufigkeit der Buchstaben Java Basics - Anfänger-Themen 43
B Array - die Häufigkeit der Zahl zählen Java Basics - Anfänger-Themen 9
B generische LinkedList nach Häufigkeit der Elemente füllen Java Basics - Anfänger-Themen 6
H Klassen varibale einer klasse in einer anderen klasse aufrufen und häufigkeit ausgeben Java Basics - Anfänger-Themen 22
F Häufigkeit von Buchstaben Java Basics - Anfänger-Themen 7
J Array nach häufigkeit sortieren Java Basics - Anfänger-Themen 4
J Zufallszahlen Häufigkeit Java Basics - Anfänger-Themen 8
P Hashtabelle-Häufigkeit von String zählen Java Basics - Anfänger-Themen 2
M Methoden String methoden ,Häufigkeit einm wort in der Zeichenkette Java Basics - Anfänger-Themen 14
Bastie Strings nach häufigkeit sortieren -aber wie? Java Basics - Anfänger-Themen 10
G Häufigkeit der Elemente in einer ArrayList zählen Java Basics - Anfänger-Themen 2
G Häufigkeit der Wörter einer Webseite zählen Java Basics - Anfänger-Themen 7
G Häufigkeit d. Auftritts eines Wertes im Array Java Basics - Anfänger-Themen 7
E relative häufigkeit berechnen funktioniert nicht Java Basics - Anfänger-Themen 7

Ähnliche Java Themen

Neue Themen


Oben