ArrayList verarbeiten

  • Antworten:15
  • OffenNicht stickyNicht beantwortet
  • Forum-Beiträge: 75

04.07.2013 22:35:00 via Website

Hallo ich wollte nun in meiner kleinen App die Noten berechnet und speichert den Durchschnitt ausgeben (live aktualisiert) also ohne extra Button.

Ein normales Array ist dazu ja erst einmal nicht zu gebrauchen, da ich nicht weiß wie viele Einträge jemand "erstellt". Außer ich setzte die Größe absurd hoch.

Dann bin ich über die ArrayList gestolpert.

1ArrayList<Double> avg_arrayList = new ArrayList<Double>();
in der ich bei jedem berechnen das Ergebnis reinschreibe.
1//onClick Button calc
2avg_arrayList.add(note_rounded);

Global habe ich einmal
1int lineCountNotenHistory = mNotenHistory.getLineCount();
2//und die ArrayList
Berechnet werden soll natürlich entweder ein Double den er mir zurück gibt, oder direkt ein String das ich ihn direkt an eine TextView ausgeben kann.
Je nachdem was sinniger ist.

Mein Problem ist nun das ich ja aus den Werten der ArrayList ein Produkt bilden muss das ich dann durch den LineCount teile.
Kann man die ArrayList direkt verarbeiten oder muss man es erst in ein Array verwandeln mit toArray()?
Aktuell sieht es so aus.
1public double calc_avg()
2 {
3 double avg = 0;
4
5 int i;
6 for (i=0, i<= lineCountNotenHistory, i++)
7 {
8 avg = avg + avg_arrayList.get(i);
9 }
10 double avg_result = avg / lineCountNotenHistory;
11
12 return avg_result;
13 }

Zwischen Frage, warum mecker der Compiler wenn ich for (int i = 0 etc.) schreibe? Er sagt i is already defined in the scope und außer dem bringt er mir noch nach ...i++) eine rote Linie mit ";" expected.


Danke und Gruß
  • Forum-Beiträge: 307

04.07.2013 23:08:06 via Website

Hi Philipp,


Kann man die ArrayList direkt verarbeiten oder muss man es erst in ein Array verwandeln mit toArray()?
Hast es einfach mal ausprobiert?


Zwischen Frage, warum mecker der Compiler wenn ich for (int i = 0 etc.) schreibe? Er sagt i is already defined in the scope und außer dem bringt er mir noch nach ...i++) eine rote Linie mit ";" expected.

Weil die Syntax deiner for-schleife falsch ist.

1for(int i = 0; i < y; i++){ //.... }

— geändert am 04.07.2013 23:08:19

www.apps-mit-web.de

  • Forum-Beiträge: 75

05.07.2013 14:29:34 via Website

Christian Hempe
Hi Philipp,


Kann man die ArrayList direkt verarbeiten oder muss man es erst in ein Array verwandeln mit toArray()?
Hast es einfach mal ausprobiert?


Zwischen Frage, warum mecker der Compiler wenn ich for (int i = 0 etc.) schreibe? Er sagt i is already defined in the scope und außer dem bringt er mir noch nach ...i++) eine rote Linie mit ";" expected.

Weil die Syntax deiner for-schleife falsch ist.

1for(int i = 0; i < y; i++){ //.... }

Ja ok die if frage ziehe ich zurück :*)

Aber das mit dem Testen ist ein bisschen schwierig wenn die App nicht startet :D.
Laut LogCat ne NullPointer aber wo kA.


Danke Gruß
  • Forum-Beiträge: 307

05.07.2013 14:40:09 via Website

Hi Philipp,


Laut LogCat ne NullPointer aber wo kA.
Also die LogCat sagt dir eigentlich immer wo dein Fehler ist.
Kannst du die Fehlerausgabe hier mal posten?

Mfg Christian

www.apps-mit-web.de

  • Forum-Beiträge: 75

05.07.2013 14:45:12 via Website

Christian Hempe
Hi Philipp,


Laut LogCat ne NullPointer aber wo kA.
Also die LogCat sagt dir eigentlich immer wo dein Fehler ist.
Kannst du die Fehlerausgabe hier mal posten?

Mfg Christian

Ja man müsste Sie halt lesen können :D


07-05 14:26:40.766 26359-26359/com.qpaApp.its_calc E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.RuntimeException: Unable to instantiate activity ComponentInfo{com.qpaApp.its_calc/com.qpaApp.its_calc.MainActivity}: java.lang.NullPointerException
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2228)
at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2362)
at android.app.ActivityThread.access$600(ActivityThread.java:156)
at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1250)
at android.os.Handler.dispatchMessage(Handler.java:99)
at android.os.Looper.loop(Looper.java:137)
at android.app.ActivityThread.main(ActivityThread.java:5229)
at java.lang.reflect.Method.invokeNative(Native Method)
at java.lang.reflect.Method.invoke(Method.java:525)
at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:799)
at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:566)
at dalvik.system.NativeStart.main(Native Method)
Caused by: java.lang.NullPointerException
at com.qpaApp.its_calc.MainActivity.<init>(MainActivity.java:40)
at java.lang.Class.newInstanceImpl(Native Method)
at java.lang.Class.newInstance(Class.java:1319)
at android.app.Instrumentation.newActivity(Instrumentation.java:1054)
at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2219)
... 11 more

public void calc_avg()
{
double avg = 0;

int i;
for (i=0; i<= lineCountNotenHistory; i++)
{
avg = avg + avg_arrayList.get(i);
}
double avg_result = avg / lineCountNotenHistory;
String string_avg = String.valueOf(avg_result);
mNotenAvg.setText(string_avg);

//return avg_result;
}
Gelöschter Account
  • Forum-Beiträge: 115

05.07.2013 14:52:01 via Website

Hallo Phillipp,

hast du das ganze mal ohne dein calc_avg() getestet? Ansonsten guck mal hier.

Grüße

Teste dein IT-Wissen! - IT Quiz

  • Forum-Beiträge: 75

05.07.2013 14:54:20 via Website

Chrisdroid
Hallo Phillipp,

hast du das ganze mal ohne dein calc_avg() getestet? Ansonsten guck mal hier.

Grüße

Jaja davor lief alles einwandfrei.
Gelöschter Account
  • Forum-Beiträge: 115

05.07.2013 14:57:51 via Website

Hast du das findViewById bei mNotenAvg vergessen?

Grüße

Teste dein IT-Wissen! - IT Quiz

  • Forum-Beiträge: 307

05.07.2013 14:59:52 via Website

Alaso laut Log ist der Fehler in zeile 40.


at com.qpaApp.its_calc.MainActivity.<init>(MainActivity.java:40)

Was steht da?

EDIT:

Steht das so in im kopf deiner Klasse:
int lineCountNotenHistory = mNotenHistory.getLineCount();
Also noch vor der oncreate()?

— geändert am 05.07.2013 15:01:27

www.apps-mit-web.de

  • Forum-Beiträge: 75

05.07.2013 18:20:08 via Website

Christian Hempe

EDIT:

Steht das so in im kopf deiner Klasse:
int lineCountNotenHistory = mNotenHistory.getLineCount();
Also noch vor der oncreate()?

Jetzt steht es wo anders(in der avg methode), ist ja klar das es vor der oncreate nicht geht.....
Jetzt startet sie zumindest wieder.

07-05 18:11:09.462 32183-32183/com.qpaApp.its_calc E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at com.qpaApp.its_calc.MainActivity.calc_avg(MainActivity.java:134)
at com.qpaApp.its_calc.MainActivity.onClick(MainActivity.java:163)
at android.view.View.performClick(View.java:4204)
at android.view.View$PerformClick.run(View.java:17355)
[...]

Hab es jetzt so gemacht das mir die Methode ein String zurück gibt und ich beim Button Click
1String set_avg = calc_avg();
2mErgebnis.setText(set_avg);
  • Forum-Beiträge: 1.793

06.07.2013 11:30:10 via App

Hast du dir die Fehlermeldung durchgelesen?
Philipp K.

07-05 18:11:09.462 32183-32183/com.qpaApp.its_calc E/AndroidRuntime: FATAL EXCEPTION: main
java.lang.IndexOutOfBoundsException: Invalid index 1, size is 1
at java.util.ArrayList.throwIndexOutOfBoundsException(ArrayList.java:251)
at java.util.ArrayList.get(ArrayList.java:304)
at com.qpaApp.its_calc.MainActivity.calc_avg(MainActivity.java:134)
at com.qpaApp.its_calc.MainActivity.onClick(MainActivity.java:163)
at android.view.View.performClick(View.java:4204)
at android.view.View$PerformClick.run(View.java:17355)
[...]

Steht doch alles wichtige drin.

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

  • Forum-Beiträge: 75

09.07.2013 20:52:03 via Website

Ja nur warum oO

Ich erstelle die ArrayList (Size: x / Index: x)
1ArrayList<Double> avg_arrayList = new ArrayList<Double>();

Füge auf Button onClick() ein Wert hinzu (Size: 1 / Index: 0)
1avg_arrayList.add(note_rounded);

Rufe dann die Methode auf.
1String set_avg = calc_avg();

Die Schleife holt sich beim ersten durchlaufen da i = 0 den Wert an Stelle Index = 0?
1for (int i=0; i<= avg_arrayList.size(); i++)
2 {
3 avg = avg + avg_arrayList.get(i);
4 }
Abbruch.

Where is the poop.

Auch wenn ich innerhalb der Methode, die ArrayList in ein Array ziehe. Selber Fehler sieht halt nur anders aus. length=1; index=1
1Double [] ArrayListArray = new Double [avg_arrayList.size()];
2 Double [] returnedArray = avg_arrayList.toArray(ArrayListArray);


Sehe da keinen Unterschied zu anderen Beispielen die ich im Netz zur ArrayList gefunden habe.

Sorry falls ich das hier nicht posten darf.
5) Retrieving Item from arrayList in a loop


Danke und Gruß
  • Forum-Beiträge: 1.793

09.07.2013 21:00:03 via App

Kurze Kostprobe?

1for (int i=0; i<= avg_arrayList.size(); i++)
2 {
3 avg = avg + avg_arrayList.get(i);
4 }
Sagen wir, 1 Element wird gespeichert, size(): 1
i = 0; i <= size/1: Ja
>>get(0)
i = 1; i <= size/1: Ja
>>get(1) <<< FEHLER

Richtig muss es heißen
...;i<size();...

Gruß

Liebe Grüße impjor.

Für ein gutes Miteinander: Unsere Regeln
Apps für jeden Einsatzzweck
Stellt eure App vor!

  • Forum-Beiträge: 75

09.07.2013 21:20:43 via Website

Dafür wieder keine Entschuldigung :P

Kannst du mir noch sagen warum bzw wann man eine solche List zu einem Array konvertiert?
  • Forum-Beiträge: 182

09.07.2013 22:04:45 via Website

So:
1String[] array = arrayliste.toArray(new String[arrayliste.size()]);
Du musst natürlich Datentyp und Variablennamen evtl. anpassen.

Sichern Sie Ihr Smartphone gegen Diebstahl und erhöhen Sie die Chance, es wiederzufinden. Jetzt neu: Guardian - Anti-Diebstahl Guardian - Anti-Diebstahl Pro https://play.google.com/store/apps/details?id=de.tapps.guardian.pro Guardian - Anti-Diebstahl Trial https://play.google.com/store/apps/details?id=de.tapps.guardian.free