Προς το περιεχόμενο

Βοήθεια σε Quiz με Java


Προτεινόμενες αναρτήσεις

Δημοσ.

Το quiz λειτουργεί κανονικά, απλα στη σύγκριση που κάνω μου βγάζει μόνο "wrong". Το πρόβλημα φαίνεται να είναι κάπου στην if απλά δε μπορώ να το βρω.

Είμαι αρχάριος στον προγραμματισμό και είναι η πρώτη προσπάθεια που κάνω στην Java.

public class Category2 extends AppCompatActivity{

    private database2 database2 = new database2();
    private ImageButton imageChoice1,imageChoice2,imageChoice3,imageChoice4;
    ImageView iv_Pic;
    private Button imageAnswerSpace;
    int quizCount = 0;
    int rightAnswerCount = 0;
    private int mAnswer;

    @Override
    protected void onCreate(Bundle savedInstanceState) {

        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_category2);

        iv_Pic = (ImageView) findViewById(R.id.iv_Pic);
        imageChoice1 = (ImageButton) findViewById(R.id.imageview1);
        imageChoice2 = (ImageButton) findViewById(R.id.imageview2);
        imageChoice3 = (ImageButton) findViewById(R.id.imageview3);
        imageChoice4 = (ImageButton) findViewById(R.id.imageview4);

        newQ();  

        imageChoice1.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {    
                if (v.getId() == R.id.imageview1 && (v.getId() == mAnswer)) {
                    Toast.makeText(Category2.this, "correct", Toast.LENGTH_SHORT).show();
                    newQ();
                } else {
                    Toast.makeText(Category2.this, "wrong", Toast.LENGTH_SHORT).show();
                    newQ();
                }
            }
        });

        imageChoice2.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v.getId() == R.id.imageview2 &&  (v.getId()== mAnswer)){
                    Toast.makeText(Category2.this, "correct", Toast.LENGTH_SHORT).show();
                    newQ();
                } else {
                    Toast.makeText(Category2.this, "wrong", Toast.LENGTH_SHORT).show();
                    newQ();
                }
            }
        });

        imageChoice3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v.getId() == R.id.imageview3 && (v.getId()== mAnswer)) {
                    Toast.makeText(Category2.this, "correct", Toast.LENGTH_SHORT).show();    
                    newQ();
                } else {
                    Toast.makeText(Category2.this, "wrong", Toast.LENGTH_SHORT).show();
                    newQ();
                }
            }
        });

        imageChoice4.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v.getId() == R.id.imageview4 && (v.getId()== mAnswer)) {
                    Toast.makeText(Category2.this, "correct", Toast.LENGTH_SHORT).show();
                    newQ();
                } else {
                    Toast.makeText(Category2.this, "wrong", Toast.LENGTH_SHORT).show();
                    newQ();
                }
            }
        });
    }

    public void newQ() {

        iv_Pic.setImageResource(database2.getImages(quizCount));

        ImageView changeImage0 = findViewById(R.id.imageview1);
        changeImage0.setImageResource(database2.getChoice1(quizCount));

        ImageView changeImage1 = findViewById(R.id.imageview2);                    
        changeImage1.setImageResource(database2.getChoice2(quizCount));

        ImageView changeImage3 = findViewById(R.id.imageview3);        
        changeImage3.setImageResource(database2.getChoice3(quizCount));

        ImageView changeImage4 = findViewById(R.id.imageview4);
        changeImage4.setImageResource(database2.getChoice4(quizCount));

        mAnswer = database2.getCorrectAnswer(quizCount);

        if (quizCount < 4) {
            quizCount++;
        } else if (quizCount == 4) {
            quizCount = 0;
        }
    }
}

public class database2 {

    private Integer mImages[] = {
        R.drawable.sad,
        R.drawable.happy,
        R.drawable.fear,
        R.drawable.angry,
    };
    public static int mChoices[] [] = {
        {
           R.drawable.ic_angry,
           R.drawable.ic_sad,
           R.drawable.ic_scared,
           R.drawable.ic_smiling
        }, {
           R.drawable.ic_angry,
           R.drawable.ic_sad,
           R.drawable.ic_scared,
           R.drawable.ic_smiling
       }, {
           R.drawable.ic_angry,
           R.drawable.ic_sad,
           R.drawable.ic_scared,
           R.drawable.ic_smiling
        }, {
           R.drawable.ic_angry,
           R.drawable.ic_sad,
           R.drawable.ic_scared,
           R.drawable.ic_smiling
        }
    };

    private Integer mCorrectAnswer[] = {
        R.drawable.ic_sad,
        R.drawable.ic_smiling,
        R.drawable.ic_scared,
        R.drawable.ic_angry
    };

    public Integer getImages(int a){
        Integer image = mImages[a];
        return image;
    }
    public Integer getChoice1(int a){
        int choice0 = mChoices[a][0];
        return choice0;
    }
    public Integer getChoice2(int a){
        int choice1 = mChoices[a][1];
        return choice1;
    }
    public Integer getChoice3(int a){
        int choice2 = mChoices[a][2];
        return choice2;
    }
    public Integer getChoice4(int a){
        int choice3 = mChoices[a][3];
        return choice3;
    }

    public Integer getCorrectAnswer(int a){
        Integer answer = mCorrectAnswer[a];
        return answer;
    }
}

 

Δημοσ.
1 λεπτό πριν, antbyron είπε

Την mAnswer την αρχικοποιείς κάπου και δεν την βλέπω;

Αυτό εννοείς;

mAnswer = database2.getCorrectAnswer(quizCount);
Δημοσ.

Πάρε ως καλή συμβουλή αυτή του @antbyron

Με μία γρήγορη ματιά, βλέπω ότι το αποτέλεσμα του if else, θα είναι σε κάθε περίπτωση το ίδιο.

Πχ

 imageChoice3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v.getId() == R.id.imageview3 && (v.getId()== mAnswer)) {
                    Toast.makeText(Category2.this, "correct", Toast.LENGTH_SHORT).show();    
                    newQ();
                } else {
                    Toast.makeText(Category2.this, "wrong", Toast.LENGTH_SHORT).show();
                    newQ();
                }
            }

Κάνω λάθος;

Επίσης έχεις γράψει κώδικα, που θα μπορούσες να πετύχεις το ίδιο με λιγότερο γράψιμο.

Δημοσ.
5 ώρες πριν, Lanike71 είπε

Πάρε ως καλή συμβουλή αυτή του @antbyron

Με μία γρήγορη ματιά, βλέπω ότι το αποτέλεσμα του if else, θα είναι σε κάθε περίπτωση το ίδιο.

Πχ


 imageChoice3.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View v) {
                if (v.getId() == R.id.imageview3 && (v.getId()== mAnswer)) {
                    Toast.makeText(Category2.this, "correct", Toast.LENGTH_SHORT).show();    
                    newQ();
                } else {
                    Toast.makeText(Category2.this, "wrong", Toast.LENGTH_SHORT).show();
                    newQ();
                }
            }

Κάνω λάθος;

Επίσης έχεις γράψει κώδικα, που θα μπορούσες να πετύχεις το ίδιο με λιγότερο γράψιμο.

Οχι, δεν κανεις λάθος.

Δηλαδή τι πρέπει να κάνω γιατι ασχολούμε πολλές μέρες και δεν βγάζω άκρη.

Το ένα σκέλος της σύγκρισης θα είναι το mΑnswer, σωστα;

2 ώρες πριν, k33theod είπε

΄Οπως είπε ο Lanike71


if (v.getId() == R.id.imageview3 && (v.getId()== mAnswer))

αυτό λογικά είναι πάντα false και δεν θα εκτελεστεί ποτέ.

Ναι, ακριβώς.

Δημοσ.
10 λεπτά πριν, Dimama είπε

Οχι, δεν κανεις λάθος.

Δηλαδή τι πρέπει να κάνω γιατι ασχολούμε πολλές μέρες και δεν βγάζω άκρη.

Το ένα σκέλος της σύγκρισης θα είναι το mΑnswer, σωστα;

 

Εσύ ξέρεις τι θέλει να κάνει η if else σου.

Για να βγει true η if, πρέπει να είναι true και τα 2 που έχεις μέσα στην if, δηλ. το v.getId() == R.id.imageview3 και v.getId()== mAnswer

Δημοσ. (επεξεργασμένο)
15 ώρες πριν, Dimama είπε

Δηλαδή τι πρέπει να κάνω γιατι ασχολούμε πολλές μέρες και δεν βγάζω άκρη

Κοίταξα λίγο τον κώδικά σου, αλλά δεν έβγαλα άκρη. Μου φάνηκε αρκετά μπερδεμένος. 

Kαλύτερα να περιγράψεις πιο αναλυτικά. Ίσως με screenshots. 

Πάντως μιας και θες να ασχοληθείς με Java, θα σου πρότεινα να αφήσεις (αρχικά) το android και να ασχοληθείς πιο λιτά με τη Java (χωρίς γραφικά). Χάνεις χρόνο χωρίς νόημα και θα τα καταλάβεις καλύτερα.

Αρκεί ένα notepad. Κάνε το quiz αρχικά σε command prompt (αντί για φωτογραφίες, χρησιμοποίησε κείμενο, επιλογές με αριθμούς κ.τ.λ.) ή μπορείς να εξασκηθείς με άλλες ασκήσεις. Κατόπιν μπορείς να ασχοληθείς με GUI (swing) και ίσως (χωρίς να είναι απαραίτητο) να χρησιμοποιήσεις και ένα περιβάλλον ανάπτυξης (π.χ. netbeans).

Αφού τα κάνεις αυτά μπορείς να περάσεις σε android. Όλα θα σου φανούν πιο εύκολα. 

Επεξ/σία από marios28
Δημοσ.

Κατά τη γνώμη μου πρέπει να παιδευτεί κάποιος (αρχικώς) και στα συντακτικά λάθη. Θα τα βλέπει κατά τη μεταγλώττιση. Δε βλέπω πού είναι το πρόβλημα (πάντα κατά την εξάσκηση). 

Είναι το ίδιο με τον ορθογραφικό έλεγχο στους κειμενογράφους. Καλό είναι που υπάρχει, αλλά αν ένας ανορθόγραφος χρησιμοποιεί συνεχώς ορθογραφικό έλεγχο, όταν χρειαστεί να γράψει χειρόγραφα θα υπάρξει πρόβλημα. Θα μου πεις δεν είναι το ίδιο στον προγραμματισμό, γιατί σχεδόν ποτέ δε θα χρειαστεί να γράψει κάποιος κώδικα σε notepad. Δε θα έχεις άδικο, αλλά νομίζω ότι τελικά θα έχει μεγαλύτερη εξοικείωση με τη γλώσσα επιλογής και θα κατανοήσει καλύτερα πώς λειτουργούν τα πράγματα. 

Πάντως δεν είπα να χρησιμοποιεί κάποιος notepad για όλες τις γλώσσες/πλατφόρμες. Αναφέρθηκα συγκεκριμένα στη Java που -κατά τη γνώμη μου- είναι μια γλώσσα που μπορεί κάποιος άνετα να γράψει κώδικα σε κειμενογράφο τύπου notepad (και για τη διαμόρφωση σχετικά απλού γραφικού περιβάλλοντος).  

Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε

Πρέπει να είστε μέλος για να αφήσετε σχόλιο

Δημιουργία λογαριασμού

Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!

Δημιουργία νέου λογαριασμού

Σύνδεση

Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.

Συνδεθείτε τώρα
  • Δημιουργία νέου...