int Variable aus Class1 in Class2 abrufen

  • Antworten:12
Parasite
  • Forum-Beiträge: 56

25.06.2018, 16:46:36 via Website

Hallo,
Erstmal, ich entwickel eine App mit Android Studios(Java).

Jetzt ist mein Problem das ich eine int Variable aus meiner MainActivity in meiner Class2 abrufen möchte.

Class2 ist eine Arraylist mit Fragen, die App wird ein Quiz.

Ich möchte halt Fragen blockieren/removen wenn man sie richtig beantwortet hat.

Das der die Fragen removed geht schonmal aber der macht das nur einmal und das liegt glaub ich daran das er die int Variable in Class2 nicht aktualisiert.

Es könnte auch daran liegen das er nachdem er remove die list.add verschiebt, weil ja eins fehlt und alle die unter den object sind, das removed wurde, einen nach oben verschoben werden?

Ich bin bisschen am verzweifeln hoffentlich könnt ihr helfen, hier noch ein Teil des Codes:

Das sind die int Variablen aus der MainActivity:

static int right1 = MainActivity.right;
static int aktuelleFrage1 = MainActivity.aktuelleFrage;

Hier soll die int Variable right1 mit right aus Mainactivity aktualisiert werden, halt bevor er removed. Ich hab getestet, in der MainActivity wird right aktualisiert aber right1 in Class2 nicht.

    if (right1 > 1) {
        String[] frame;
        frame = GeoFrage.get(aktuelleFrage);
        GeoFrage.remove(frame);

    }

Wenn ihr einen anderen Lösungvorschlag habt, immer her damit :)

Vielen Dank im voraus
MfG

Parasite

Kommentieren
Parasite
  • Forum-Beiträge: 56

25.06.2018, 16:51:38 via Website

Fehler!!!!!!!!!!!!!!!!!!!!!!sry :)
Das sind die int Variablen aus der MainActivity: Fehler!!!!

So stehen sie in Class2:

static int right1 = MainActivity.right;
static int aktuelleFrage1 = MainActivity.aktuelleFrage;

In der MainActivity stehen sie so:

static int right = 1;
static int aktuelleFrage = 0;

Hilfreich?
Kommentieren
Pascal P.
  • Admin
  • Forum-Beiträge: 11.286

25.06.2018, 17:12:51 via App

Hallo Parasite,
Herzlich willkommen hier im Forum :)

schau dir mal besser die Objektorientierte Programmierung und Datenaustausch zwischen Activities an
Mit Statischen Variablen erreicht du zwar die Funktion, sollte aber auf gar keinen Fall so verwendet werden.

LG Pascal //It's not a bug, it's a feature. :) ;)

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

25.06.2018, 21:01:01 via Website

Hallo

Zu dem hier

if (right1 > 1) {
String[] frame;
frame = GeoFrage.get(aktuelleFrage);
GeoFrage.remove(frame);

Kann nicht gehen frame ist ein String Array eckige Kammern.
Du hast zwar die Variable bekannt gemacht aber Speicher hast du noch keinen reservirt. Der Compiler weiss auch nicht wie viel Elemente geben soll.
String[] frame = new String[10]; z.B.

Du behandelst die variable als wäre sie eine einfache String variable.
Ist aber ein String Array.

Beim Zugriff auf ein Element eines Arrays wird in der eckigen klammern der indext angegeben.
Aber wie gesagt hast du noch keinen Speicher reserviert.

Für das was du machen willst ist eine Liste besser geeignet.
Die kannst du dynamisch verwalten. Ein Array ist statisch und zur Laufzeit schwer zu verändern. Auch wird da beim löschen nicht automatisch verschonen.

Schaue dir also an was Listen und Arrays in Java sind.

http://www.java-programmieren.com/listen-java.php

— geändert am 25.06.2018, 21:17:37

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

26.06.2018, 10:00:26 via Website

Kann ich den in einer List auch einem Listitem mehrere Punkte zuweisen wie hier?

String[] frage1 = new String[5];
frage1[0] = "Welches ist das am häufigsten vorkommende Mineral der Erdkruste?";
frage1[1] = "Plagioklas";
frage1[2] = "Quarz";
frage1[3] = "Biotit";
frage1[4] = "Amphibol";

Ich hab halt jetzt hinbekommen das er die int Variable rüber zieht, jedes mal wen in der MainActivity erhöht wird und zwar mit Static int und z.B. {{Klass2 zu Klass1=} Klass1.aktuelleFrage++; oder halt von {Klass1 zu Klass2 =} Klass2.aktuelleFrage2++;} bzw.--;

und das er löscht hab ich jetzt mit

if (right1 > 1) {

        GeoFrage.remove(aktuelleFrage);     //aktuelleFrage ist int Variable wo er in der Arraylist gerade ist.

        right1--;
        MainActivity.right--;

    }

right ist die Integer Variable die ++ wird wenn man richtig getippt hat.

Mein Problem ist jetzt das er die so komisch verschiebt wenn er eins löscht.

    GeoFrage.add(0, frage1);
    GeoFrage.add(1, frage2);
    GeoFrage.add(2, frage3);
    GeoFrage.add(3, frage4);
    GeoFrage.add(4, frage5);
    GeoFrage.add(5, frage6);

Wenn ich davon eins Remove, was passiert dann? das hab ich noch nicht so ganz verstanden.
Ich weiß auch nicht ganz genau ob wenn er ne neue Frage abfragt, wieder die komplette Liste füllt und die removten wieder dazu kommen.

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

26.06.2018, 12:12:53 via Website

Ich möchte halt nicht umbedingt von Array ine ne list umachreiben oder geht das schnell? Weil ich hab über 180 Fragen dort in verschiedenen Arrays.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

26.06.2018, 15:43:24 via Website

Hi was ist eigentlich GeoFrage das ist doch eine liste. Zeige mal die Definition.
Verstehe ich das richtig du hast ca 180 Arrays vom Typ String frage1[4] bis frage180[4]

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

27.06.2018, 08:46:50 via Website

GeoFrage ist ne Arraylist und das sieht so aus.

String[] frage = new String[5];
frage[0] = "Frage?";
frage[1] = "Richtige Antwort";
frage[2] = "Falsche Antwort";
frage[3] = "Falsche Antwort";
frage[4] = "Falsche Antwort";

String[] frage2 = new String[5];
frage2[0] = "Frage?";
frage2[1] = "Richtige Antwort";
frage2[2] = "Falsche Antwort";
frage2[3] = "Falsche Antwort";
frage2[4] = "Falsche Antwort";

GeoFrage.add(index:0, frage1)
GeoFrage.add(indec:1, frage2)

Und so weiter, davon dann 90 Stück.

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

27.06.2018, 09:10:36 via Website

Hallo

Wenn ich davon eins Remove, was passiert dann? das hab ich noch nicht so ganz verstanden.
Ich weiß auch nicht ganz genau ob wenn er ne neue Frage abfragt, wieder die komplette Liste füllt und die removten wieder dazu kommen.

dann wird es aus der Liste gelöscht und die unteren rutschen nach.
du musst auch nicht die pos beim adden angeben das element reicht.
GeoFrage.add( frage1);
wird einfach an das ende gehangen.

ich kann deinem grundproblem nicht folgen.

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

27.06.2018, 09:28:58 via Website

Also mein Grundproblem ist, das ich möchte das wenn eine Frage 1 oder 2x richtig beantwortet wurde, das die gesperrt wird. Bis ich das spiel Neustarte, oder einen Button drücke und die gesperrten Fragen wieder dazu kommen. Dabei besteht nur immer das Problem das er nicht die richtige Frage läd, das ist denke ich weil aktuelleFrage nicht den richtigen Wert hat. Und ich denke schon das ich die Indexzahlen brauche, der soll die Fragen ja abrufen.

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

27.06.2018, 09:30:19 via Website

Vergesst diese Nachricht hier, man kann ja auch irgendwie nicht löschen bissle kacke.

— geändert am 27.06.2018, 09:36:31

Hilfreich?
Kommentieren
Jokel
  • Forum-Beiträge: 1.530

27.06.2018, 09:48:40 via Website

nein die Index Zahlen brauchst du beim erstellen nicht legt er selber an.
Du darfst die Liste am anfang des Spiels nur einmal laden.
Beim abfragen der Liste brauchst du den Index ist klar.
Die Liste muss global sein. Über das gesamte Spiel erhalten bleiben .
ab fragen der Fragen etweder der reihe nach oder Per zufall und vor dem abfragen eines Item aus der Liste prüfen wie viele Items noch in der Liste sind. Auch deinen Zufallsgenerator mit der Anzahl der Items laden damit nicht die zahl 100 kommt und es nur noch 99 einträge gibt.
Ist eine Frage richtig beantwortet kanste die aus der liste Löschen.

Glaube den Ansatz ist bissel kacke.

— geändert am 27.06.2018, 09:50:34

Hilfreich?
Kommentieren
Parasite
  • Forum-Beiträge: 56

27.06.2018, 09:59:56 via Website

Danke, ich glaube das hat geholfen, ich überprüfe das später und meld mich dann ob es geklappt hat, ich glaube ich weiß jetzt wo mein Fehler liegt :)

Hilfreich?
Kommentieren