1. Mitglieder surfen ohne Werbung auf Android-Hilfe.de! ✔ Jetzt kostenlos Mitglied in unserer Community werden.
  1. falkenauge05, 28.08.2018 #1
    falkenauge05

    falkenauge05 Threadstarter Neuer Benutzer

    Ich habe bei meiner App ein Problem. Und zwar habe ich verschiedene Buttons, die zufällig verschiedene Hintergrundfarben erhalten, genau wie ein ImageView. Dabei soll überprüft werden, ob irgendein Button die selbe Farbe hat wie das ImageView. Ist dies nicht der Fall, so sollen neue Zufallswerte ausgegeben werden. Bei einem Klick auf einen Button wird seine Farbe entweder weiß, wenn der Button die gleiche Farbe hat wie das ImageView oder grau, wenn das nicht der Fall ist. Hat man nun auf alle Buttons geklickt, die dieselbe Farbe wie das ImageView haben, sollen wieder neue Zufallswerte vergeben werden. Und hier liegt der Hund begraben. Probiere ich meinen Code mit einem Emulator aus, so funktioniert das Ganze meistens, aber manchmal habe ich alle richtigen Buttons gedrückt und es werden trotzdem keine neuen Zufallszahlen ausgegeben.


    //Die Methode wird bei jedem ButtonKlick ausgeführt
    public void ueberpruefeFarben(){
    ColorDrawable sd=(ColorDrawable) showColor.getBackground();
    int colorId=sd.getColor();
    ColorDrawable cdBtnEins= (ColorDrawable) btnEins.getBackground();
    ColorDrawable cdBtnZwei= (ColorDrawable) btnZwei.getBackground();
    ColorDrawable cdBtnDrei= (ColorDrawable) btnDrei.getBackground();
    ColorDrawable cdBtnVier= (ColorDrawable) btnVier.getBackground();
    ColorDrawable cdBtnEins2= (ColorDrawable) btnEins2.getBackground();
    ColorDrawable cdBtnZwei2= (ColorDrawable) btnZwei2.getBackground();
    ColorDrawable cdBtnDrei2= (ColorDrawable) btnDrei2.getBackground();
    ColorDrawable cdBtnVier2= (ColorDrawable) btnVier2.getBackground();
    ColorDrawable cdBtnEins3= (ColorDrawable) btnEins3.getBackground();
    ColorDrawable cdBtnZwei3= (ColorDrawable) btnZwei3.getBackground();
    ColorDrawable cdBtnDrei3= (ColorDrawable) btnDrei3.getBackground();
    ColorDrawable cdBtnVier3= (ColorDrawable) btnVier3.getBackground();
    ColorDrawable cdBtnEins4= (ColorDrawable) btnEins4.getBackground();
    ColorDrawable cdBtnZwei4= (ColorDrawable) btnZwei4.getBackground();
    ColorDrawable cdBtnDrei4= (ColorDrawable) btnDrei4.getBackground();
    ColorDrawable cdBtnVier4= (ColorDrawable) btnVier4.getBackground();
    int btnEinsColor=cdBtnEins.getColor();
    int btnZweiColor=cdBtnZwei.getColor();
    int btnDreiColor=cdBtnDrei.getColor();
    int btnVierColor=cdBtnVier.getColor();
    int btnEins2Color=cdBtnEins2.getColor();
    int btnZwei2Color=cdBtnZwei2.getColor();
    int btnDrei2Color=cdBtnDrei2.getColor();
    int btnVier2Color=cdBtnVier2.getColor();
    int btnEins3Color=cdBtnEins3.getColor();
    int btnZwei3Color=cdBtnZwei3.getColor();
    int btnDrei3Color=cdBtnDrei3.getColor();
    int btnVier3Color=cdBtnVier3.getColor();
    int btnEins4Color=cdBtnEins4.getColor();
    int btnZwei4Color=cdBtnZwei4.getColor();
    int btnDrei4Color=cdBtnDrei4.getColor();
    int btnVier4Color=cdBtnVier4.getColor();
    while(colorId != btnEinsColor && colorId != btnZweiColor && colorId != btnDreiColor && colorId != btnVierColor && colorId != btnEins2Color && colorId != btnZwei2Color &&
    colorId != btnDrei2Color && colorId != btnVier2Color && colorId != btnEins3Color && colorId != btnZwei3Color && colorId != btnDrei3Color && colorId != btnVier3Color &&
    colorId != btnEins4Color && colorId != btnZwei4Color && colorId != btnDrei4Color && colorId != btnVier4Color){

    setRandomNumbers();
    setzeFarben();
    sd=(ColorDrawable) showColor.getBackground();
    colorId=sd.getColor();
    cdBtnEins= (ColorDrawable) btnEins.getBackground();
    cdBtnZwei= (ColorDrawable) btnZwei.getBackground();
    cdBtnDrei= (ColorDrawable) btnDrei.getBackground();
    cdBtnVier= (ColorDrawable) btnVier.getBackground();
    cdBtnEins2= (ColorDrawable) btnEins2.getBackground();
    cdBtnZwei2= (ColorDrawable) btnZwei2.getBackground();
    cdBtnDrei2= (ColorDrawable) btnDrei2.getBackground();
    cdBtnVier2= (ColorDrawable) btnVier2.getBackground();
    cdBtnEins3= (ColorDrawable) btnEins3.getBackground();
    cdBtnZwei3= (ColorDrawable) btnZwei3.getBackground();
    cdBtnDrei3= (ColorDrawable) btnDrei3.getBackground();
    cdBtnVier3= (ColorDrawable) btnVier3.getBackground();
    cdBtnEins4= (ColorDrawable) btnEins4.getBackground();
    cdBtnZwei4= (ColorDrawable) btnZwei4.getBackground();
    cdBtnDrei4= (ColorDrawable) btnDrei4.getBackground();
    cdBtnVier4= (ColorDrawable) btnVier4.getBackground();
    btnEinsColor=cdBtnEins.getColor();
    btnZweiColor=cdBtnZwei.getColor();
    btnDreiColor=cdBtnDrei.getColor();
    btnVierColor=cdBtnVier.getColor();
    btnEins2Color=cdBtnEins2.getColor();
    btnZwei2Color=cdBtnZwei2.getColor();
    btnDrei2Color=cdBtnDrei2.getColor();
    btnVier2Color=cdBtnVier2.getColor();
    btnEins3Color=cdBtnEins3.getColor();
    btnZwei3Color=cdBtnZwei3.getColor();
    btnDrei3Color=cdBtnDrei3.getColor();
    btnVier3Color=cdBtnVier3.getColor();
    btnEins4Color=cdBtnEins4.getColor();
    btnZwei4Color=cdBtnZwei4.getColor();
    btnDrei4Color=cdBtnDrei4.getColor();
    btnVier4Color=cdBtnVier4.getColor();
    }
    }

    Ich würde mich über eventuelle Hilfe sehr freuen, da ich wirklich keine Ahnung habe, wieso der Vorgang manchmal funktioniert und manchmal nicht.
    Herzliche Grüße,
    Falkenauge

    PS: Ich weiß nicht, ob das der richtige Thread ist, aber das ist ja sozusagen ein Codeschnipsel ;)
     
    Zuletzt bearbeitet: 28.08.2018
  2. ashleyjones, 30.08.2018 #2
    ashleyjones

    ashleyjones Neuer Benutzer

    Actually your code is looks ok , that's why it is run successfully, there is other thing that for sometime only :p
    But I think there is a problem with below method

    setRandomNumbers ();

    What does it do? Please double check if the word random is responsible for your error or not.
     
  3. swa00, 30.08.2018 #3
    swa00

    swa00 Moderator Team-Mitglied

    Hello Ashely,

    welcome in our community and thank you for your answer.
    Pls note : We are a native speaken german community and pls write in german .

    Thx a lot
     
  4. ashleyjones, 30.08.2018 #4
    ashleyjones

    ashleyjones Neuer Benutzer

    @ swa00

    Hi,
    I think our web site or may be browser will translate my english into german automatically.
    If no, it's ok, I will make my future answers in german only.
     
    markus.tullius bedankt sich.
  5. swa00, 30.08.2018 #5
    swa00

    swa00 Moderator Team-Mitglied

    That would be great :)
     
  6. falkenauge05, 03.09.2018 #6
    falkenauge05

    falkenauge05 Threadstarter Neuer Benutzer

    @ashleyjones
    public void setRandomNumbers(){
    for(int i=0; i<17; i++) {
    rand = (int) (Math.random()*7);
    }
    }
    Das ist die Methode. Sie erzeugt einfach 16 Zufallszahlen, die in einem Array gespeichert werden und dabei wird dann durch die Methode setzeFarben die Buttonfarbe zugewiesen:
    public void setzeFarben(){
    intZuFarbe(btnEins, rand[0]);
    intZuFarbe(btnZwei, rand[1]);
    intZuFarbe(btnDrei, rand[2]);
    intZuFarbe(btnVier, rand[3]);
    intZuFarbe(btnEins2, rand[4]);
    intZuFarbe(btnZwei2, rand[5]);
    intZuFarbe(btnDrei2, rand[6]);
    intZuFarbe(btnVier2, rand[7]);
    intZuFarbe(btnEins3, rand[8]);
    intZuFarbe(btnZwei3, rand[9]);
    intZuFarbe(btnDrei3, rand[10]);
    intZuFarbe(btnVier3, rand[11]);
    intZuFarbe(btnEins4, rand[12]);
    intZuFarbe(btnZwei4, rand[13]);
    intZuFarbe(btnDrei4, rand[14]);
    intZuFarbe(btnVier4, rand[15]);
    showColor.setImageResource(R.drawable.png);
    intZuImageFarbe(rand[16], showColor);
    }
    Also irgendwie kann es daran doch nicht liegen, oder?
    Ich würde mich über eine Antwort freuen ;)
    Herzliche Grüße,
    Falkenauge
     
  7. jogimuc, 03.09.2018 #7
    jogimuc

    jogimuc Android-Hilfe.de Mitglied

    Hallo eigentlich müsste es in der for schleife so aus sehen.

    Code:
    rand[i] = (int) (Math.random()*7); 

    So wie du das machst ist rand kein Array sondern nur ein int den du 16 mal einen wert zuweist macht keinen Sinn.

    Irgend wie kann ich deiner Spiel Logik nicht folgen. Erkläre mal was du willst oder was es machen soll.

    So wie ich das sehe soll die While schleife durchlaufen werden wenn die Frage gefunden wurde. Nur wo fragst du ab ob alle Button geklickt wurden?
    Was macht eigentlich setzefarben? Wenn das die Farbe der Button auf weiss setzen soll wieso fürst du es Nur bei erkannte richtiger Farbe aus und erstellst auch gleich neue Farben?

     
    Zuletzt bearbeitet: 03.09.2018
  8. falkenauge05, 04.09.2018 #8
    falkenauge05

    falkenauge05 Threadstarter Neuer Benutzer

    @jogimuc
    Beim Code kopieren ist anscheinend irgendein Fehler aufgetreten, es ist eigentlich rand [ i];)
    Du hast in der App 1 ImageView und darunter 16 Buttons, die alle zufällige Farben annehmen sollen. Die Aufgabe des Users soll nun sein, alle Buttons, die die gleiche Farbe wie das ImageView haben, zu drücken. Für jeden richtig gedrückten Button bekommt er einen "Punkt", wenn man so will. Wird ein richtiger Button gedrückt, soll die Hintergrundfarbe weiß werden, wird ein falscher gedrückt, soll sie grau werden.
    //wird bei jedem Buttonklick ausgeführt
    public void ermittleKorrektheit(Button button){
    ColorDrawable sd=(ColorDrawable) showColor.getBackground();
    int colorId=sd.getColor();
    ColorDrawable cdBtn= (ColorDrawable) button.getBackground();
    int btn=cdBtn.getColor();
    if(colorId!=btn){
    if(btn!=0){
    button.setBackgroundColor(Color.GRAY);
    }
    }else{
    button.setBackgroundColor(0);
    }
    }
    Danach wird bei jedem Buttonklick die Methode ueberpruefeFarben (siehe oben) ausgeführt, die überprüfen soll, ob noch irgendein Button die selbe Farbe wie das ImageView hat. Denn wenn man alle richtigen Buttons gedrückt hat, sollen logischerweise neue zufällige Farben ausgegeben werden.

    Die while-Schleife wird nur ausgeführt, wenn kein Button mehr die selbe Farbe wie das ImageView hat und sie wird so lange ausgeführt, bis irgendein Button die selbe Farbe wie das ImageView hat.
    setzeFarben weist jedem Button seine zufällige Hintergrundfarbe zu.
     
  9. jogimuc, 05.09.2018 #9
    jogimuc

    jogimuc Android-Hilfe.de Mitglied

    Hallo ich kann da jetzt auch keinen direkten Fehler erkennen. Beschreibe mal wie der Fehler aussieht oder welches fehlverhalten entsteht. Vor allen bei welcher Situation.

    -- Dieser Beitrag wurde automatisch mit dem folgenden Beitrag zusammengeführt --
    Ich bin der Meinung das in der if Abfrage der Fehler steckt. Wenn der Button nicht die Farbe hat solte es gehen.
    Nur wenn er die richtige Farbe hat wird er wohl nicht gefärbt.
    Da du bei der ersten verneinen if Abfrage ja nicht in den Block zur zweiten if Abfage kommst.
    Du müsstest für die erste if auch einen Else Zweig benutzen und dort die Farbe auf weiß setzen, und Punkte zählen.

    Wenn ich den Code richtig durch denke kann der Button eigentlich nie weiß werden.

    Ich hätte das etwas anders gemacht
    Ich würde positiv fragen also ist der Button gleich der farbe?
    Ja: setze hin weiß Punkte zählen.
    Nein: neue Frage ist er nicht weiss?
    Ja setze hin grau kein Punkt


    Code:
    if(colorId == btn){
        button.setBackgroundColor(Color.WHITE);
        // Pukte Zählen
    } else {
    
        if(btn != 0){
            button.setBackgroundColor(Color.GRAY);
            // kein Punkt
        }
        else {
            // Ausgabe an User Button schon geklickt, Punkte abziehen
            // denn else zweig kannst du auch weg lassen wenn du keine ausgabe machen willst
    
        }
       
    }

    -- Dieser Beitrag wurde automatisch mit dem folgenden Beitrag zusammengeführt --
    Zu den Zufallsfarben ist es sicher das die Button und das Image nicht die Farbe Weiß oder Grau zugewiesen bekommen können?
    Denn du erstellst Zufallzahlen zwischen 0 - 6.
    Wenn das nicht sicher ist, wie sieht die Methode intZuFarbe und intZuImageFarbe aus?
     
  10. Jaiel, 05.09.2018 #10
    Jaiel

    Jaiel Android-Lexikon

    Ich würde ebenfalls noch mal den code neu strukturieren und die Logik verändern da würde ich auch anders angehen von der Archtiektur aus. Ich würde auch eher Test-Driven da ran rangehen und erstmal TestCases schreiben und dann dagegen programmieren bis sie durchlaufen, natürlich muss man dafür erstmal den Ablauf wissen. Dein Code sieht nicht sehr elegant aus kann man bestimmt besser machen ist aber nicht so schlimm das passiert nun mal wenn man drauf los programmeirt sowas ändert sich mit Erfahrung aber.

    Ich möchte nicht viel Code schreiben sondern auch einfach nur mal ne Vorgehensweise geben:

    • Farben sind vorgespeichert im Array FARBEN, in Zahlen von 0-7, also 7 verschieden Farben, z.B. 1=Blau, 2=Grün usw
    • Buttons in einem Array BUTTONS
    • Random zahl X erzeugen zwischen 2 und 5(oder so) um zu ermitteln wieviele Buttons die gleiche gesuchte Ziel-Farbe wie das ImageView haben werden
    • Random zahl Y ezeugen um die Ziel-Farbe auszuwählen (1 bis 7)
    • Imageview mit Farbe Y setzen
    • Button Array BUTTONS durchlaufen per Zufall bis man X elemente in BUTTONS mit der Farbe Y hat
    • Beim setzen der Zielfarbe setzt man auch einen onClickListener() callback methode mit der man die Punktezahl um 1 erhöht und den Button auf Weiß stellt, falls der Button nicht schon weiß ist
    • Den Rest der Buttons ohne bisher gesetzte Ziel-Farbe Y gibt man eine Random Farbe(die natürlich nicht der Ziel-Farbe entspricht) und setzt einen onClicklistener() callback in dem man die Farbe auf Grau stellt
    • sollte der User dann X punkte haben dann ist die Runde vorbei denn er hat ja X mal einen Button gedrückt der die Ziel-Farbe hat

    ... so in etwa
     
Die Seite wird geladen...
Ähnliche Themen Forum Datum
Methode fürs Verlinken von Variablen mit IDs? Android App Entwicklung 27.08.2018
Java oder Kotlin? Android App Entwicklung 15.08.2018
Android Studio richtig installieren Android App Entwicklung 10.07.2018
methoden holen geht nicht mehr. Android App Entwicklung 30.06.2018
Daten speichern in einer Datei auf der jede Aktivität zugreifen kann Android App Entwicklung 12.05.2018
Classen Methoden ,deren Aufruf und meine Anfänger Probleme. HILFE !!! Android App Entwicklung 18.04.2018
App-Aktualisierungen richtig testen und an den User bringen. Android App Entwicklung 03.03.2018
Notification beenden wenn ein übergebener Intent ausgeführt wird. Android App Entwicklung 02.03.2018
Du betrachtest das Thema "Java Methode manchmal richtig ausgeführt, manchmal nicht" im Forum "Android App Entwicklung",
  1. Android-Hilfe.de verwendet Cookies um Inhalte zu personalisieren und dir den bestmöglichen Service zu gewährleisten. Wenn du auf der Seite weitersurfst stimmst du der Cookie-Nutzung zu.  Ich stimme zu.