Quiz App Problem!!!

  • 4 Antworten
  • Letztes Antwortdatum
N

newperson

Neues Mitglied
1
Hallo.
ich bin noch ein Anfänger und ich wollte mit einer kleinen leichten Übung beginnen. Leider stellt sich fest, das diese leichte Übung eine schwere und steinige ist.
Übung: Ich wollte eine Quiz-App machen mit zwei Button(True & False) und dann noch ein TestView für die Fragen. Leider funktioniert die App nicht wie ich mir sie vorstelle. Also es wird eine Frage gestellt und mit einen Button-druck (True & False) soll ich die Frage richtig beantworten und ein Toast soll dies zeigen.

Mein Problem, ich weiß nicht wie ich mit einer Hashmap die korrekte Frage mit dem richtigen Button-druck zuordne und diese dann auch kontrolliert wird ob dieser Button-druck auch stimmt.

Ich hoffe ihr könnt mir helfen. ;)

Java-Code:
import java.util.HashMap;

import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener{

private TextView question;
private Button bTrue, bFalse;

private int currentQuestion;
private String[] questions = new String[5];
int index;
boolean answer1 = true;
boolean answer2 = false;

@Override
protected void onCreate(Bundle savedInstanceState) {
// TODO Auto-generated method stub
super.onCreate(savedInstanceState);
setContentView(R.layout.main);

bTrue = (Button) findViewById(R.id.bTrue);
bFalse = (Button) findViewById(R.id.bFalse);
bTrue.setOnClickListener(this);
bFalse.setOnClickListener(this);
question = (TextView) findViewById(R.id.tvQuestion);

currentQuestion = -1;

chooseQuestion();
}

private void chooseQuestion() {

questions[index=1] = "Wurde Wolfgang Amadeus Mozart in Österreich geboren?";
questions[index=1] = "Ist die Sonne 5Mrd Jahre alt";
questions[index=2] = "Dürfen Priester heiraten?";
questions[index=2] = "Ist Luxenburg eine Weltmacht?";
questions[index=1] = "Ist Wien die Hauptstadt Österreichs?";

currentQuestion++;
if(currentQuestion == questions.length)
currentQuestion = 0;

// show question
question.setText(questions[currentQuestion]);
}

@SuppressWarnings("unused")
private boolean isHashMap() {
HashMap<String[], Boolean>antwort= new HashMap<String[], Boolean>();

antwort.put(questions, answer1);
antwort.put(questions, answer2);
return true || false;
}

@Override
public void onClick(View view) {
switch (view.getId()){
case R.id.bTrue:
if(isHashMap())
if(index==1 && answer1==true) {

Toast.makeText(this, "Great! Well Done!:)", Toast.LENGTH_SHORT).show();
chooseQuestion();
}else{
Toast.makeText(this, "Wrong! Try again", Toast.LENGTH_SHORT).show();
}
chooseQuestion();
break;

case R.id.bFalse:
if(isHashMap())
if(index==2 && answer2==true) {

Toast.makeText(this, "Great! Well Done!:)", Toast.LENGTH_SHORT).show();
chooseQuestion();
}else{
Toast.makeText(this, "Wrong! Try again", Toast.LENGTH_SHORT).show();
}
chooseQuestion();
break;
}

}

@Override
public boolean onCreateOptionsMenu(Menu menu) {
// Inflate the menu; this adds items to the action bar if it is present.
getMenuInflater().inflate(R.menu.main, menu);
return true;
}
}
 
Erstmal, bitte
HTML:
[CODE][/CODE]
benutzen (dadurch wird es für die anderen einfacher den Code zu lesen und die wahrscheinlichkeit, dass jemand antwortet ist höher)!


Also:
Wa soll das?
Code:
		questions[index = 1] = "Wurde Wolfgang Amadeus Mozart in Österreich geboren?";
		questions[index = 1] = "Ist die Sonne 5Mrd Jahre alt";
		questions[index = 2] = "Dürfen Priester heiraten?";
		questions[index = 2] = "Ist Luxenburg eine Weltmacht?";
		questions[index = 1] = "Ist Wien die Hauptstadt Österreichs?";

Richtig wäre das so:
Code:
		questions[0] = "Wurde Wolfgang Amadeus Mozart in Österreich geboren?";
		questions[1] = "Ist die Sonne 5Mrd Jahre alt";
		questions[2] = "Dürfen Priester heiraten?";
		questions[3] = "Ist Luxenburg eine Weltmacht?";
		questions[4] = "Ist Wien die Hauptstadt Österreichs?";

So wie du das machst, weist du jedes mal der Variablen index einen anderen Wert zu. Zuerst 1 dann noch mal 1 dann 2, usw. Der Index im Array ist dann auch dieser Wert. Also Sieht das Array nacher so aus:

Code:
questions[0] = 
questions[1] = "Ist Wien die Hauptstadt Österreichs?"
questions[2] = "Ist Luxenburg eine Weltmacht?"
questions[3] = 
questions[4] =

Außerdem musst du nicht das ganze nicht jedes mal neu zuweisen; es reicht wenn es in der Funktion onCreate ist.



Deine Funktion isHashMap ist sinnlos, da sie immer true zurückgibt. Entscheident dafür ist das, was hinter return steht, in deinem Fall:
Code:
return true || false;
Wenn dir jetzt nicht klar ist, warum diese Funktion immer true zurückgibt, solltest du dir nochmal die Grundlagen von Java angucken.



Zur onClick-Funktion: Dein switch ist richtig, aber der Aufruf der Funktion chooseQuestion jeweils vor dem break ist falsch, da sie ja nur dann aufgerufen werden soll, wenn die Frage richtig beantwortet worden ist (so habe ich das zumindest verstanden). Korrekt ist dann aber der Aufruf nach deinem Toast, wo ausgegeben wird, dass die Antwort richtig war.

Der Aufruf der Funktion isHashMap sowie die Funktion selber kannst du dir sparen (gibt ja immer true zurück).

So jetzt kommt dein eigentliches Problem: Du willst prüfen, ob die Antwort stimmt. Dafür muss sie aber irgendwo im Code hinterlegt sein. Du wolltest es mit einer HashMap machen. Dafür hast du aber einfach falsch angefangen. Du musst also ein neues Array anlegen, auch mit der Größe 5 und dem Typ boolean, in dem die Antworten stehen. Jetzt musst du nurnoch
Code:
index == 1 && answer1 == true
mit
Code:
answers[currentQuestion]
und
Code:
index == 2 && answer2 == true
mit
Code:
!answers[currentQuestion]
ersetzen und fertig. Dann sollte deine App funktionieren (habe es nicht getestet).



Wenn du irgendwas nicht verstanden hast, warum es so ist oder sonst eine Frage hast, kann ich gerne helfen.


MfG
cheeseburgerohnekaese
 
Hallo,
danke für die Antwort und Verbesserung :)

Ich habe den Code jetzt umgeschrieben, leider lässt sich das Programm jetzt gar nicht mehr starten, aber im Programm selber sind auch keine Warnungen angezeigt.

Ich habe keine Ahnung welchen Fehler ich gemacht habe.

Also ich habe die HashMap weg gelöscht und dann habe ich ein neues Array mit dem Typ Boolean angelegt (array name = answers)
private Boolean[] answers = new Boolean[5];

Als nächstes habe ich noch eine Clase Boolean gemacht
private Boolean[] testQuestion() {
answers[1] = true;
answers[2] = true;
answers[3] = false;
answers[4] = false;
answers[5] = true;

return answers;
}

Diese dann bei onCreate ufgerufen:
testQuestion();

Und dann habe ich noch die Bedingung in der onClick Methode geändert:
public void onClick(View view) {
switch (view.getId()){
case R.id.bTrue:
if(answers[currentQuestion]) {
Toast.makeText(this, "Great! Well Done!:)", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "Wrong! Try again" , Toast.LENGTH_SHORT).show();
}
break;

case R.id.bFalse:
if(!answers[currentQuestion]) {
testQuestion();
Toast.makeText(this, "Great! Well Done!:)", Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(this, "Wrong! Try again" , Toast.LENGTH_SHORT).show();
}
break;
}
}

ich hoffe du kannst helfen, welchen Fehler ich gemacht habe!!
 
Aaah, du hast z.B. was weggemacht, was nicht weg soll. Außerdem hast du immer noch nicht
HTML:
[CODE][/CODE]
benutzt!!

Also: Ich hab nochmal den Code aus dem ersten Post benutzt, die Änderungen aus meiner ersten Antwort angewandt, und siehe da es funktioniert! Ich habe das Gefühl, dass du dein Wissen so noch nicht richtig anwenden kannst, bzw. umsetzen kannst. Guck dir nochmal Java-Tutorials an und probiere damit ei bisschen rumzuspielen. Nur so wirst du sicher und kannst so eine Aufgabe ohne Probleme lösen. Sonst wird du dich nur damit rumquälen.

Trotzdem hier der funktionierende Code. Vielleicht sieht du jetzt, was dein Fehler war. Wenn du aber willst, sowas selber machen zu könenn, schau dir wie schon gesagt weiter Java-Tutorials an.


Code:
import android.app.Activity;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends Activity implements OnClickListener {

	private TextView question;
	private Button bTrue, bFalse;

	private int currentQuestion;
	private String[] questions = new String[5];
	private boolean[] answers = new boolean[5];

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.main);

		bTrue = (Button) findViewById(R.id.bTrue);
		bFalse = (Button) findViewById(R.id.bFalse);
		bTrue.setOnClickListener(this);
		bFalse.setOnClickListener(this);
		question = (TextView) findViewById(R.id.tvQuestion);

		currentQuestion = -1;

		questions[0] = "Wurde Wolfgang Amadeus Mozart in Österreich geboren?";
		questions[1] = "Ist die Sonne 5Mrd Jahre alt";
		questions[2] = "Dürfen Priester heiraten?";
		questions[3] = "Ist Luxenburg eine Weltmacht?";
		questions[4] = "Ist Wien die Hauptstadt Österreichs?";
		answers[0] = true;
		answers[1] = true;
		answers[2] = false;
		answers[3] = false;
		answers[4] = true;
		
		
		chooseQuestion();
	}

	private void chooseQuestion() {
		currentQuestion++;
		if (currentQuestion == questions.length)
			currentQuestion = 0;

		// show question
		question.setText(questions[currentQuestion]);
	}

	@Override
	public void onClick(View view) {
		switch (view.getId()) {
		case R.id.bTrue:
			if (answers[currentQuestion]) {

				Toast.makeText(this, "Great! Well Done!",
						Toast.LENGTH_SHORT).show();
				chooseQuestion();
			} else {
				Toast.makeText(this, "Wrong! Try again", Toast.LENGTH_SHORT)
						.show();
			}
			break;

		case R.id.bFalse:
			if (!answers[currentQuestion]) {

				Toast.makeText(this, "Great! Well Done!",
						Toast.LENGTH_SHORT).show();
				chooseQuestion();
			} else {
				Toast.makeText(this, "Wrong! Try again", Toast.LENGTH_SHORT)
						.show();
			}
			break;
		}

	}

	@Override
	public boolean onCreateOptionsMenu(Menu menu) {
		// Inflate the menu; this adds items to the action bar if it is present.
		getMenuInflater().inflate(R.menu.main, menu);
		return true;
	}
}
 
Danke, für alles ich habe jetzt den Fehler gefunden, den ich gemacht habe Danke nochmals :)

Und ja ich werde noch ein paar Java-Tutorials anschauen, aber ich dachte mal ich mach mal selber ein Projekt und aus Fehlern lernt man, also danke für die Korrekturen.
 

Ähnliche Themen

G
Antworten
0
Aufrufe
132
Gerdchen07
G
G
Antworten
1
Aufrufe
384
Gerdchen07
G
G
Antworten
13
Aufrufe
598
Gerdchen07
G
L
Antworten
2
Aufrufe
554
Lexub
L
migi01
Antworten
26
Aufrufe
1.990
migi01
migi01
Zurück
Oben Unten