Aggregieren von Daten

Status
Nicht offen für weitere Antworten.

Paat

Aktives Mitglied
Hi Leute,

ich möchte mit einer Funktion Werte aus einer Datenbank zusammenfassen. Also aus 5. Minuten Durchschnittswerten, stündliche Durschschnittswerte machen.

Die Werte kommen in einem selbst definierten Datentyp an:

Java:
public class ResultList {
	
	private double value;
	private String hour;
	private String minute;
	private String second;
	private String day;
	private String mounth;
	private String year;

.....
}

davon bekommen ich nur ein ganzes Array
Mit der Methode toHour() möchte ich dieses Array nun ausdünnen und alle Werte, die in der selben Stunde angelegt wurden zusammen addieren und einen Durchschnitt ausrechnen.

Java:
public ResultList[] toHour(ResultList[] rs){
		
		
		int j = 0;
		double counter = 0.00;
		int check;
		check = Integer.valueOf(rs[0].getHour());
		
		double sum = 0.00;
		
//Groesse des neuen Arrays bestimmen
		for(int i=0;i < rs.length;i++){
			if(check != Integer.valueOf(rs[i].getHour())){		
				j++;
				check = Integer.valueOf(rs[i].getHour());
			}
		}
		
		
		check = Integer.valueOf(rs[0].getHour());
		rsNew = new ResultList[j];
		j = 0;
		
		// Werte in das neue Arry einfuegen
		for(int i=0;i < rs.length;i++){

			if(check == Integer.valueOf(rs[i].getHour())){
				sum+=rs[i].getValue();
				counter++;
		
			}else{
				System.out.println(rs[i].getHour());
				rsNew[j].setValue(sum/counter);
				rsNew[j].setHour(rs[i-1].getHour());
				rsNew[j].setMounth(rs[i-1].getMounth());
				rsNew[j].setDay(rs[i-1].getDay());
				rsNew[j].setYear(rs[i-1].getYear());
				counter = 0.00;
				sum = 0.00;
				j++;
				check = Integer.valueOf(rs[i].getHour());
				sum+=rs[i].getValue();
				counter++;
			}
		}
		
		return rsNew;
	}

Nur leider funzt das irgendwie nicht.

Ich vergleiche quasi die Stunde und alle Werte die innerhalb einer Stunde angelegt wurden werden addiert.

Achja das Array kommt schon sortiert an.

Danke und Grüße
 
ich wuerde des verstaendis schon auf Date umsteigen statt alle attribute einzeln aufzaehlen...
 
Hallo Paat,

dann wird wohl die entsprechende Objekt-Referenz nicht belegt sein.
Schau mal die Zeile an, in der die Exception fliegt.

Vermutlich in Zeile 33.
rsNew[j].setValue(sum/counter)

Du erzeugst zwar das Feld rsNew, aber kein neues Objekt ResultList deren Methode du aufrufen kannst.

Gruss, hiti
 
Hallo Paat,

dann wird wohl die entsprechende Objekt-Referenz nicht belegt sein.
Schau mal die Zeile an, in der die Exception fliegt.

Vermutlich in Zeile 33.
rsNew[j].setValue(sum/counter)

Du erzeugst zwar das Feld rsNew, aber kein neues Objekt ResultList deren Methode du aufrufen kannst.

Gruss, hiti

Huhu vielen Dank für deine Antwort.
Das Objekt war angelegt und zwar oben in der Klasse als public Objekt. Das ist also leider nicht der Fehler
 
Zeitberechnungen sind so eine Sache, und Java's "Bordmittel" nicht gerade Spitzenklasse (oder deutlicher ausgedrückt: Ich würde java.util.Date zur schlechtesten Klasse der Java-API küren). Quasi-Standard ist Joda-Time, das wesentlich ausgereifter ist und mit dem auch leichter zu rechnen ist.
 
ahh jetzt ist es mir wie schuppen von den augen gefallen

ich habe ja nur das Array der Objekte angelegt, jedoch nicht die Objekte instanziiert.

Ich muss in der Schleife natürlich noch die Objekte des Array rsNew anlegen.
 
Gut mit Date mache ich ja nichts. Die Zeit habe ich ja atomar abgespeichert.

"atomar" klingt wirklich hübsch. Aber zum Vergleichen und Rechnen sind nun mal richtige Datumsobjekte praktischer. Wie willst du dich sonst dagegen absichern, dass dir jemand den 29. Februar 2009 aufs Auge drückt? Selber programmieren?
 
Status
Nicht offen für weitere Antworten.

Zurück
Oben