summe von aufeinander folgenden floats eines arrays

JensMander

Bekanntes Mitglied
Hallo Forum,
nachdem ich bis dato all meine Probleme durch bereits erörterte Aufgaben lösen könnte, komme ich nicht ohne einen eigenen Eintrag drumherum.

Und zwar folgendes: ich habe eine ArrayListe in der feste Arrays gespeichert sind. Die Arraywerte sind alles floats. Nun ist es so das ich ab einem bestimmten Array der ArrayListe einige Werte zusammenrechnen möchte bist ein bestimmter Wert erreicht ist. Sollte der Wert nicht erreicht werden so mit den Werten des darauffolgenden Arrays weitergemacht werden.

z.B.

ArrayList=([1,3,5,4,6],[2,3,6,5,4],[4,7,5,4,5]......)

nun möchte ich das beginnenden beim ersten Array (arraylist.get(0)) angefangen wird die berechnung zu starten und zwar von jedem array der zweite, dritte und vierte werte
for ( int i=1; i<=3;i++){summe = summe+array}

wenn die summe 15 erreicht hat, soll hier schluss sein, wenn die summe aber noch unter 15 ist soll das nächste Array aus der Arrayliste mit einbezogen werden und das solange bist 15 erreicht wird.

Habt ihr da eine schöne Idee?

mit freundlichen Grüßen
Jens
 
Java:
public static void bilde15erSummen(ArrayList<float[]> arrayList) {
	Iterator<float[]> iterator = arrayList.iterator();
	float summe = 0;
	while (iterator.hasNext()) {
		float[] currentArray = iterator.next();
		for (int i = 0; i < currentArray.length; i++) {
			summe = summe + currentArray[i];
			if (summe >= 15) {
				System.out.println("Summe: " + summe);
				summe = 0;
			}
		}
	}
}
 
vielen Dank für deine Antwort, magst du mir das Prinzip des Iterators an diesem Beispiel(ich steige da leider noch nicht ganz durch) erklären?
vielen Dank
 
Zuletzt bearbeitet:
vergiss lieber das mit dem Iterator... nutz die erweiterte for schleife
Java:
for(float[] f : arrayList) {
 // hier dann weiter mit f arbeiten
}
 
das ist ja das problem ich weiß nicht genau wie ich dann weiter machen soll. habe die richtige stelle in meinem netten Inselbuch auch noch nicht gefunden.

also mein problem ist was mache ich wenn ich erst mit dem 5ten oder xten array anfangen will die berechnung zu starten?
 
Zuletzt bearbeitet:
Dann kannst Du an meinem Lösungsvorschlag 2 kleine Änderungen vornehmen:

1. die Methoden-Signatur ändern zu bilde15erSummen(ArrayList<float[]> arrayList, int beginIndex)
2. den Iterator über folgende Methode holen: arrayList.listIterator(beginIndex);

Und das war's.

Zum Prinzip des Iterators: den kannst Du Dir als einen Zeiger vorstellen, der über eine Liste iteriert. Mit hasNext() kannst Du abfragen, ob es ein nächstes Element gibt und mit .next() holst Du's. Sobald .next() aufgerufen wurde, zeigt der Iterator auf das darauf folgende Element oder auf nichts mehr, wenn er die Liste durch hat.
 
Zuletzt bearbeitet:
nun habe ich das problem, das eclipse folgendes nicht erkennt"ArrayList<float[]>" liegt das daran das ich aktueller oder zu alt aufgestellt bin, was das sdk betrifft?
 
Hallo, ich habe die Methode nun ersteinmal eingefügt und an meine Gegebenheiten angebpasst, doch sie funktioniert bei mir definitv nicht.

Java:
public static void entwicklungL1(ArrayList<String[]> arrayList,int beginIndex) {
	    ListIterator<String[]> iterator = arrayList.listIterator(beginIndex);
	    float summe = 0;
	    while (iterator.hasNext()) {
	        String[] currentArray = iterator.next();
	        for (int i = 25; i <= 48; i++) {
	            summe = summe + Float.valueOf(currentArray[i]).floatValue()/100;
	            if (summe >= 15) {
	                System.out.println("Summe: " + summe+" "+beginIndex);

	            }
	        }
	    }
	}

Eventuell habe ich vergessen zu sagen, das er beim erreichen des bestimmten Wertes (im Beispiel 15) aufhören soll.
vielen Dank für eure hilfe
 
Zunächst mal ist der Zusatz <float[]> nicht notwendig. Dieser gibt an, dass ArrayList ausschliesslich Arrays vom Typ float aufnehmen kann (Type safety). Wenn ich mich recht erinnere, ist das mit Java 5 eingeführt worden.
Aber dass es mit String[] gehen soll, aber nicht mit float[] kommt mir spanisch vor. Wie lautet denn die Fehlermeldung?

Und wieso greifst Du bei Dir auf die Array-Felder 25 bis 48 zu?
Und wieso teilst Du den Wert noch durch 100?
Und wieso setzt Du summe nicht auf 0 zurück, wenn 15 erreicht worden ist?

Edit: Hab erst jetzt gesehen, dass Du nach dem Code noch eine Frage stellst. Der Grund, warum er nicht aufhört ist, dass Du summe nicht auf 0 zurücksetzt (Frage 3).
Meine beiden ersten Fragen sind ja eigentlich nur Verständnis-Fragen und müssen nicht unbedingt beantwortet werden, wenn Du das genau so in Deinem Code beabsichtigt hast.
 
Zuletzt bearbeitet:
Guten Morgen Lowpass,
ersteinmal vielen Dank für deine Hilfe und ich denke auch ich verstehe die ganze Thematik um den Iterator relativ gut. Jetzt geht es nur noch um die Handhabung.
Ersteinmal zu deinen Fragen:
a) weil ich aus dem Array nur die Werte betrachten will
b) weil das Format der Werte noch nicht dem Ausgabeformat entsprach wurde durch 10 geteilt
c) das war nur ein kurzer Testversuch, habe ich vergessen beim posten wieder reinzumachen

was ich aber wirklich meine ist, die Methode scheint ja mit dieser Funktion für jedes Array die Berechnungen durchzuführen. Ich brauche das aber nur für/ab einem bestimmten Array aus der Arrayliste.
Mit beginnindex funktioniert das ansteuern des Startarrays ja schon traumhaft.
Nun möchte ich einfach für das bestimmte Array berechnen wann dder gewünschte Wert erreicht ist.

freundliche Grüße Jens

so ich mache noch mal ein beispiel:

ArrayList aus Arrays:

ArrayList x = ({0,1,2,3,4,1},{3,3,1,7,4,1},{0,1,1,7,8,5},{10,23,1,2,6,1}....)

nun starten wir deine Funktion funktion summe15(x, 1) x die Liste und mit 1 das wir nicht gleich das erste Array berücksichtigen.

jetzt beginnt die berechnung:

für das erste zu berücksichtigende array, werden die werte 3,4,5 aufsummiert
es wird ausgegeben array2 (also index 1 +1) und die summe also 8,
wenn die 15 noch nicht erreicht wurde gehe bitte zum nächsten array
und das ganze spiel bis die 15 erreicht wird. Nachdem erreichen der 15 soll, also Schluss sein.

wenn ich in der aktuellen Version die Methode aufrufe erhalte ich jede menge zahlen und kann überhaupt nicht verstehen, warum soviele ausgegeben werden.
 
Zuletzt bearbeitet:
Ich glaube ich habe die Lösung "selber" gefunden.

Habe einfach im Vorfeld die Summe verglichen und dann nicht mehr auf null zurückgesetzt. vielen Dank für die Grundmethode(von der ja das meiste übrig ist).

Java:
public static void entwicklungL1(ArrayList<String[]> arrayList,int beginIndex) {
	    ListIterator<String[]> iterator = arrayList.listIterator(beginIndex);
	    float summe = 0;
	    int g = 0;
	    while (iterator.hasNext() && summe < 1) {
	        String[] currentArray = iterator.next();
	        for (int i = 25; i <= 48 && summe < 1; i++) {
	            summe = summe + Float.valueOf(currentArray[i]).floatValue()/100;
	            if (summe >= 1) {
	            	g++;
	                System.out.println(i+"Summe: " + summe+" "+beginIndex+" "+g);
	            }
	        }
	    }
	}

eine abschließende frage hätte ich dann doch noch:
iterator.next() spricht der den ersten verfügbaren wert/das erste verfügbare array der arrayliste an oder überspringt die methode das erste array???
 
Zuletzt bearbeitet:

Zurück
Oben