Επισκέπτης Δημοσ. 11 Οκτωβρίου 2018 Δημοσ. 11 Οκτωβρίου 2018 Το 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; } }
antbyron Δημοσ. 11 Οκτωβρίου 2018 Δημοσ. 11 Οκτωβρίου 2018 Την mAnswer την αρχικοποιείς κάπου και δεν την βλέπω;
Επισκέπτης Δημοσ. 11 Οκτωβρίου 2018 Δημοσ. 11 Οκτωβρίου 2018 1 λεπτό πριν, antbyron είπε Την mAnswer την αρχικοποιείς κάπου και δεν την βλέπω; Αυτό εννοείς; mAnswer = database2.getCorrectAnswer(quizCount);
Moderators Kercyn Δημοσ. 11 Οκτωβρίου 2018 Moderators Δημοσ. 11 Οκτωβρίου 2018 Στη Java δεν ελέγχεις αν οι τιμές δυο strings είναι ίδιες με ==. https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java 2
Επισκέπτης Δημοσ. 11 Οκτωβρίου 2018 Δημοσ. 11 Οκτωβρίου 2018 10 λεπτά πριν, Kercyn είπε Στη Java δεν ελέγχεις αν οι τιμές δυο strings είναι ίδιες με ==. https://stackoverflow.com/questions/513832/how-do-i-compare-strings-in-java Αυτά που συγκρίνω όμως δεν είναι strings.
Predatorkill Δημοσ. 12 Οκτωβρίου 2018 Δημοσ. 12 Οκτωβρίου 2018 (επεξεργασμένο) Ακυρο Επεξ/σία 12 Οκτωβρίου 2018 από Predatorkill
antbyron Δημοσ. 12 Οκτωβρίου 2018 Δημοσ. 12 Οκτωβρίου 2018 Γιατί δεν κάνεις debugging να δεις τι τιμές παίρνουν οι μεταβλητές;
Lanike71 Δημοσ. 12 Οκτωβρίου 2018 Δημοσ. 12 Οκτωβρίου 2018 Πάρε ως καλή συμβουλή αυτή του @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(); } } Κάνω λάθος; Επίσης έχεις γράψει κώδικα, που θα μπορούσες να πετύχεις το ίδιο με λιγότερο γράψιμο.
k33theod Δημοσ. 12 Οκτωβρίου 2018 Δημοσ. 12 Οκτωβρίου 2018 ΄Οπως είπε ο Lanike71 if (v.getId() == R.id.imageview3 && (v.getId()== mAnswer)) αυτό λογικά είναι πάντα false και δεν θα εκτελεστεί ποτέ.
Επισκέπτης Δημοσ. 12 Οκτωβρίου 2018 Δημοσ. 12 Οκτωβρίου 2018 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 και δεν θα εκτελεστεί ποτέ. Ναι, ακριβώς.
Lanike71 Δημοσ. 12 Οκτωβρίου 2018 Δημοσ. 12 Οκτωβρίου 2018 10 λεπτά πριν, Dimama είπε Οχι, δεν κανεις λάθος. Δηλαδή τι πρέπει να κάνω γιατι ασχολούμε πολλές μέρες και δεν βγάζω άκρη. Το ένα σκέλος της σύγκρισης θα είναι το mΑnswer, σωστα; Εσύ ξέρεις τι θέλει να κάνει η if else σου. Για να βγει true η if, πρέπει να είναι true και τα 2 που έχεις μέσα στην if, δηλ. το v.getId() == R.id.imageview3 και v.getId()== mAnswer
marios28 Δημοσ. 13 Οκτωβρίου 2018 Δημοσ. 13 Οκτωβρίου 2018 (επεξεργασμένο) 15 ώρες πριν, Dimama είπε Δηλαδή τι πρέπει να κάνω γιατι ασχολούμε πολλές μέρες και δεν βγάζω άκρη Κοίταξα λίγο τον κώδικά σου, αλλά δεν έβγαλα άκρη. Μου φάνηκε αρκετά μπερδεμένος. Kαλύτερα να περιγράψεις πιο αναλυτικά. Ίσως με screenshots. Πάντως μιας και θες να ασχοληθείς με Java, θα σου πρότεινα να αφήσεις (αρχικά) το android και να ασχοληθείς πιο λιτά με τη Java (χωρίς γραφικά). Χάνεις χρόνο χωρίς νόημα και θα τα καταλάβεις καλύτερα. Αρκεί ένα notepad. Κάνε το quiz αρχικά σε command prompt (αντί για φωτογραφίες, χρησιμοποίησε κείμενο, επιλογές με αριθμούς κ.τ.λ.) ή μπορείς να εξασκηθείς με άλλες ασκήσεις. Κατόπιν μπορείς να ασχοληθείς με GUI (swing) και ίσως (χωρίς να είναι απαραίτητο) να χρησιμοποιήσεις και ένα περιβάλλον ανάπτυξης (π.χ. netbeans). Αφού τα κάνεις αυτά μπορείς να περάσεις σε android. Όλα θα σου φανούν πιο εύκολα. Επεξ/σία 13 Οκτωβρίου 2018 από marios28
Lanike71 Δημοσ. 13 Οκτωβρίου 2018 Δημοσ. 13 Οκτωβρίου 2018 @marios28 Ποτέ δεν κατάλαβα τη χρήση notepad από αρχάριους. Συντακτικά και άλλα λάθη πώς θα τα βλέπει δηλαδή;
marios28 Δημοσ. 13 Οκτωβρίου 2018 Δημοσ. 13 Οκτωβρίου 2018 Κατά τη γνώμη μου πρέπει να παιδευτεί κάποιος (αρχικώς) και στα συντακτικά λάθη. Θα τα βλέπει κατά τη μεταγλώττιση. Δε βλέπω πού είναι το πρόβλημα (πάντα κατά την εξάσκηση). Είναι το ίδιο με τον ορθογραφικό έλεγχο στους κειμενογράφους. Καλό είναι που υπάρχει, αλλά αν ένας ανορθόγραφος χρησιμοποιεί συνεχώς ορθογραφικό έλεγχο, όταν χρειαστεί να γράψει χειρόγραφα θα υπάρξει πρόβλημα. Θα μου πεις δεν είναι το ίδιο στον προγραμματισμό, γιατί σχεδόν ποτέ δε θα χρειαστεί να γράψει κάποιος κώδικα σε notepad. Δε θα έχεις άδικο, αλλά νομίζω ότι τελικά θα έχει μεγαλύτερη εξοικείωση με τη γλώσσα επιλογής και θα κατανοήσει καλύτερα πώς λειτουργούν τα πράγματα. Πάντως δεν είπα να χρησιμοποιεί κάποιος notepad για όλες τις γλώσσες/πλατφόρμες. Αναφέρθηκα συγκεκριμένα στη Java που -κατά τη γνώμη μου- είναι μια γλώσσα που μπορεί κάποιος άνετα να γράψει κώδικα σε κειμενογράφο τύπου notepad (και για τη διαμόρφωση σχετικά απλού γραφικού περιβάλλοντος).
Προτεινόμενες αναρτήσεις
Δημιουργήστε ένα λογαριασμό ή συνδεθείτε για να σχολιάσετε
Πρέπει να είστε μέλος για να αφήσετε σχόλιο
Δημιουργία λογαριασμού
Εγγραφείτε με νέο λογαριασμό στην κοινότητα μας. Είναι πανεύκολο!
Δημιουργία νέου λογαριασμούΣύνδεση
Έχετε ήδη λογαριασμό; Συνδεθείτε εδώ.
Συνδεθείτε τώρα