Arraylist/For Schleife/Scanner

diyatenim47

Mitglied
Hallo Leute,
und zwar habe ich folgendes Problem. Wie kann ich bei einer Arraylist in einem Eintrag (....) Strings als verschieden Dinge deklarien z.B also in der arraylist steht dann blabla.add("Frage","antwort1","antwort2"...,korrekt antwort "int"). Vielleicht kann mir etwas mit this machen. Und was ich noch machen möchte ist, dass ich die Arraylist mit einem Input verbinden möchte uns es jenach input also tasteneingabe am Terminal das dann outprinted. Also gebe ich die korrekte Antwort im Terminal ein z.B int=4 So führe mich zur nächsten Arraylist Eintrag bzw Frage.

Habs jetzt kurz und knapp formuliert stehe unter zeitdruck.
Bad German i know =)
 

Gucky

Top Contributor
Vorab muss ich mich über JavaMeister und seine kontinuierlichen Versuche das Forenklima in Richtung eisig mit Aussicht auf Shitsorms zu verschieben, aufregen.

Nachdem dies geschehen ist, kann ich mich nun dem TO widmen:
Die Zauberwörter in dem Fall heißen, denke ich mal, HashMap und Containerklasse, auch wenn ich den letzten Teil nicht so ganz verstanden habe. ;)
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Ich kann mich nur anschließen ,deine Frage ist equivalent zu :

Code:
Es waren einmal zwei Kamele, eines davon war Lila, wieviel wiegt der Sand  wenn es Dunkel ist ?

aber du könntest sowas ( Frage / Antwort ) entweder mit einer Map oder einem Set realisieren, oder du schreibst eine eigene Klasse welche dir diese Funktionalität liefert, insofern das was man dem Text entnehmen konnte ansatzweise an das drankommt was du vorhast :)
 

diyatenim47

Mitglied
Oh Gott xD
Bin für Beleidigungen offen. Ihr kennt mich nicht und ich euch nicht.Also es geht mir auf gut Deutsch am Po vorbei. Wie dem auch sei. Ich bin tod müde von der Arbeit und werde genauere Details morgen bzw. übermorgen preisgeben. Was ich jetzt schon mal sagen ist, dass es eine Art Wer wird Millionär ? Spiel werden soll. Also in einem Arraylist Eintrag wären Frage Antworten und richtige Antwort(als Zahl) enthalten.

So weit bis morgen.

Danke trotzdem für eure Aufmerksamkeit
 

JavaMeister

Gesperrter Benutzer
Vorab muss ich mich über JavaMeister und seine kontinuierlichen Versuche das Forenklima in Richtung eisig mit Aussicht auf Shitsorms zu verschieben, aufregen.

Man kann sich natürlich auch im Forum mit drittklassigen Halbwissen Antworten hevortun ;) Aber was solls ^^ Gibt immer Menschen, die es niemals verstehen werden.

Und wer Kritik mit Shitstorm gleichsetzt, der sollte sich überlegen, ob derjenige in Foren aktiv sein möchte ;D. Aber ich bin mir sicher, dass Gucky auch hierfür eine Antwort parat hat. Möchte das Thema aber nicht weiter vertiefen.

---

Fachlich ist natürlich die ANtwort einer Hashmap nicht falsch. Jedoch könnte man auch hier genauso sagen "Löse es mit einer Datenstruktur, die 1 auf die Lösung abbildet und einen weiterne Eintrag y hat, der die nächste Frage beantwortet."

Ich persönlich bleibe bei meiner Aussage: Frage enthält unzureichend viele Informationen, um eine richtige Antwort zu geben.
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Bin für Beleidigungen offen.

Das war keineswegs beleidigend gemeint , nur hast du a.) den Text in einem derart kryptischen Satzbau gestaltet das man ihm kaum entnehmen kann was genau du willst,

und b.) kommt es immer drauf an was genau du vorhast, nun wissen wir das es eine Art 'Wer wird Millionär' werden soll.

Da kommt mir doch immer gleich dir Frage hoch , wie weit deine Kenntnisse in OOP reichen , ich kann nämlich immer nicht verstehen wie immer gleich alle ohne auch nur eine Grundlage zu kennen, anfangen müssen irgendwelche Spiele umzusetzen und dann kotzen wenn es schon an der Syntax scheitert ;)

[EDIT]
Ich persönlich bleibe bei meiner Aussage: Frage enthält unzureichend viele Informationen, um eine richtige Antwort zu geben.

Dem stimme ich voll und ganz zu.
[/EDIT]



Also ist es keineswegs böse gemeint.
 
Zuletzt bearbeitet:

diyatenim47

Mitglied
Es wird als Klausur bewertet mein Freund ;).Wie dem auch sei.

Also ich habe 3 Klassen erstellt. Die erst soll ein "Questionpool" werden, die zweite("Question") die Arraylist Einträge wie soll ich sagen spezifizieren. Also, das was ich oben schon erwähnt habe. Die Dritten Klasse, nenn wir sie "Game", soll das ganze zum laufen bringen. Hier mein jetztiger Fortschritt.

Also erstmal "Questionpool":
import java.util.ArrayList;
import java.util.Random;

public class QuestionPool {

private ArrayList<Question> e;

public QuestionPool()
{
e = new ArrayList<Question>();
}

public void populateEasy()
{
e.add(new Question("BLA BLA ?","Bla","Bla", "", "", 3));
e.add(new Question("FA AD AS?","WDWAD","awdawdawdw", "", "", 4));
e.add(new Question("What is the colour of an green apple?","yellow","green","red","blue",2));
}

public void populateMedium()
{
e.add(new Question("BLA BLA ?","Bla","Bla", "", "", 3));
e.add(new Question("FA AD AS?","WDWAD","awdawdawdw", "", "", 4));
}

public void populateHard()
{
e.add(new Question("BLA BLA ?","Bla","Bla", "", "", 3));
e.add(new Question("FA AD AS?","WDWAD","awdawdawdw", "", "", 4));
}

public int sizeOfE() {
return e.size();
}

public Question getE(int i) {
return e.get(i);
}

}

...................

"Question" :
public class Question
{
private String displayText;
private String answer1;
private String answer2;
private String answer3;
private String answer4;
private int correct; // between 1 and 4

public Question(String displayText, String answer1, String answer2, String answer3, String answer4, int correct) {
this.displayText = displayText;
this.answer1 = answer1;
this.answer2 = answer2;
this.answer3 = answer3;
this.answer4 = answer4;
this.correct = correct;
};
public Question String;
{
System.out.println();
}

}
..................
und "Game" wobei ich HIER NOCH GAR NICHT WEITERGEKOMMEN ALSO KANN MAN ES IGNORIEREN

import java.util.Scanner;

public class Game
{
private Scanner reader;
private Question question;
private QuestionPool questionpool;

public Game()
{
reader= new Scanner(System.in);
}

public void populateEasy();
{

easy= new QuestionPool();
medium = new QuestionPool();
hard= new QuestionPool();
easy.populateEasy();
medium.populateMedium();
hard.populateHard();
}
}

Also ich wär euch sehr verbunden, wenn ihr mich zu Threads oder Websites weiterleiten könnt, welche mir bei meinem Problem bzw. Sachverhalten etwas helfen könnten. Also her mit den Links oder sprecht :D bitte
 

Gucky

Top Contributor
Erstmal bitte, wie es über jedem Beitrageditierkasten dick und fett in rot steht Java Code in Java-Tags!

Zu den Threads: google mal nach Java ist auch eine Insel Threads.
 

kaoZ

Top Contributor
Es wird als Klausur bewertet mein Freund .Wie dem auch sei.

Nichts des so trotz ist eine ArrayList, insofern ihr diese nicht als feste Vorgabe habt die Falsche Datenstruktur für deinen Anwendungsfall !

WENN ihr explizit eine ArrayList zur Datenhaltung verwenden müsst , leg eine an welche z.B Frage und Antwort als String enthält, getrennt durch einen Separator like
Code:
;

sprich

Code:
"Was macht das ?";"Das leuchtet Blau."

schreibe dir eine Methode die diese Einträge des Arrays entgegen nimmt, daraus Frage und Antwort durch trennung am Separator generiert, die Frage ausgibt, die Antwort mit der Antwort im Tupel vergleicht, und bei einer Korrekten Antwort dementsprechend darauf reagiert :)

Hier mal ein schnell geschriebes Beispiel was genau ich meine ( hier ohne GameLoop ! )

Java:
import java.util.HashMap;
import java.util.Map.Entry;
import java.util.Scanner;

public class Question {
	
	static HashMap<Integer, Question> map = new HashMap<>();
	static int ID = 0;

	private String question;
	private String answer;
	
	public Question(String question, String answer) {
	    this.question	 = question;
	    this.answer		 = answer;
	    map.put(ID++, this);
    }
	
	public static Question getQuestionAtIndex(int id){
		
		Question quest = null;
		
		for (Entry<Integer, Question> entry : map.entrySet()) {
			if(entry.getKey() == id){
				quest = entry.getValue();
			}
        }
		
		return quest;
	}
	
	public String getQuestion(){
		return this.question;
	}
	
	public String getAnswer(){
		return this.answer;
	}
	
	public void printQuestion(){
		System.out.println(this.question);
	}
	
	public void printAnswer(){
		System.out.println(this.answer);
	}
	
	public static void main(String[] args) {
	    new Question("Was ist die richtige Datenstruktur ?", "Eine HashMap");
	    new Question("Was ist Blau und dreht sicht?", "Ein Planet, Muhaha !");
	    
	    Question one = Question.getQuestionAtIndex(0); // nur zur verdeutlichung
	    one.printQuestion();
	    
	    
	    //Question.getQuestionAtIndex(0).printQuestion();  <<-- Equivalent zu obriger ausführung !
	    
	 
	    String answer = new Scanner(System.in).nextLine(); // Resource leak !
	    
	    if(answer.equals(Question.getQuestionAtIndex(0).getAnswer())){
	    	System.out.println("YEAH ! That's right !");
	    }
	    else{
	    	System.out.println("OH NO ! Try Again");
	    }
	    
    }
}

Die Ausgabe dazu bei Richtiger , und bei falscher Antwort:

Code:
Was ist die richtige Datenstruktur ?
Eine HashMap
YEAH ! That's right !

Code:
Was ist die richtige Datenstruktur ?
Eine ArrayList
OH NO ! Try Again

Wie du sehen kannst lege ich hier eine Statische HashMap an , welche alle erstellten Fragen mit den dazu gehörenden Antworten enthält, diese werden bei Objekterzeugung direkt im Konstruktor schon der Map übergeben, zudem wird der Identifier (ID) mit jeder erstellten Frage hoch inkrementiert !

So kannst du bequem über
Code:
Question.getQuestionAtIndex(int i){...}
auf die angelegten Fragen zugreifen.


und kannst einfach über Referenzlose Objekte immer wieder neue Fragen hinzufügen :

Code:
new Quesiton("Ist das Leben nicht schön?", "Hallo Welt ?!");

Das abgleichen der Einträge in der Map mit den eingegebene Antworten wäre dann Aufgabe deiner Spiellogik , und du würdest dies dann z.B in einer compare() methode ausführen.

Mann KANN das ganze wie gesagt auch in einer ArrayList machen , ist allerdings "wesentlich" aufwendiger da du dann Frage und Antwort vorher trennen müsstest.
 
Zuletzt bearbeitet:

kaoZ

Top Contributor
Man könnte sogar noch einen Schritt Weiter gehen , und die Antwort wiederrum in eine Separate Klasse auslagern, dann würde die Klasse Question als Attribut eine Referenz auf eine Answer halten . usw... usw...
 

diyatenim47

Mitglied
Danke erstmal vielmals. Meine Frage lautet nun kalt hast du bei deinem Beispiel Code berücksichtigt , dass es 4 Antworten geben soll , welche dann am Terminal zusammen mit der Frage angezeigt werde sollen (println). Also nur damit ich bescheid weiss. Wie gesagt hab vor 3 Monaten angefangen mit Java und habe vorher noch nie irgend etwas mit Informatik zu tun gehabt
 

Harry Kane

Top Contributor
Also die Aussage das eine ArrayList die falsche Datenstruktur ist, würde ich so nicht unterschreiben. Ich sehe keinen wirklichen Nachteil gegenüber dem Vorschlag von Kaoz.
Als interne Datenstruktur in einer Question-Klasse ist sie nicht sinnvoll, aber als Datenstruktur zur Organisation von Question-Objekten IMHO die erste Wahl, so wie du es ja schon mit deinem QuestionPool umgesetzt hast.
Der Rest dürfte nicht weiter schwierig sein:
Du gehst der Reihe nach durch deine Question-Objekte durch und zeigst die Frage sowie die vier Antworten an. Dann fragst du eine Zahl zwischen 1-4 (oder einen Buchstaben zwischen A und D ab) und vergleichst die Usereingabe mit dem Wert, der in der Question für die richtige Antwort hinterlegt ist. Natürlich muss an dieser Stelle die Eingabe eines Index ausreichen und nicht, wie in Kaoz Lösung, der exakte Wortlaut der richtigen Antwort.
Falls korrekt, nächstes Question-Objekt. Falls falsch: Spiel zuende.
Funktionen wie das Festlegen des Gewinnbetrags etc. könntest du ebenso in deiner QuestionPool-Klasse hinterlegen.
 

kaoZ

Top Contributor
Recht hast du, ich hatte vergessen mich auf die interne Datenhaltung zu beziehen, es spricht natürlich nichts dagegen alle Fragen wie in seinem QuestionPool dann einfach in einer Arraylist zu speichern, auch die interne Datenhaltung ist natürlich in dieser Art einer Collection, wie schon erwähnt, durchaus möglich.
Die Frage ist letzten Endes wie er die Umsetzung des Vergleiches/der Auswertung von richtigen Antworten zu der passenden Frage lösen möchte.
 

diyatenim47

Mitglied
Ich hab es nun geschaftt es zum laufen zu bekomen. Nun hätte ich eine weiter Frage. Wie denkt ihr, könnte ich die typischen Jokers (50:50, Publikum etc.) einbauen. Also wonach sollte ich googeln bzw. recherchieren ? Links wären nett.

Und nochmal danke, dass ich euch Zeit für mich genommen habt...alle ihr seid klasse ^^

Gruß
 

kaoZ

Top Contributor
Würde ich eine Abstrakte Basisklasse für definieren , dann in Spezialisierungen unterteilen, welche als Attribut z.b einen counter
enthalten, welcher nach Nutzung dekrementiert wird.

so kannst du je Spezialisierung festlegen wie viele welcher Joker, wie oft verwendet werden können .

Dann fügst du deiner Spielklasse einfach als Attribut ein Array von Jokern hinzu und diesem dann die jeweiligen Spezialisierungen, was die einzelnen Joker für Funktionen haben definierst du in den einzelnen Spezialisierungen, ebenso wie oft diese genutzt werden können etc.
 
Zuletzt bearbeitet:

Java20134

Bekanntes Mitglied
Du kannst doch mit Zufallszahlen ändern. (Zufallszahl zwischen 1-10:)
Java:
            int zufallszahl = Math.random()*10+1
 

Gucky

Top Contributor
Den Publikumsjoker würde ich so einbauen, dass ein Zufallsgenerator vielleicht 1000 Werte erzeugt und diese auf die Antworten vertelt werden. Die richtige Antwort hat dir höchste Wahrscheinlichkeit. Die Anderen unterschiedliche (auch per Zufall).
50:50 kannst du so machen, dass einfach zwei der falschen Antworten gelöscht werden. Wieder Zufällig.
 

kaoZ

Top Contributor
Hier nochmal ein Beispiel zu dem was ich meinte :

Wie du es letztendlich implementiert ist dann ganz dir überlassen , dies ist nur ein OO Lösungsansatz

Java:
public abstract class Joker {

	public Joker() {}
	
	
	class PublikumsJoker extends Joker{
		
		public PublikumsJoker(int anzahlZuschauer) {
	        // TODO Auto-generated constructor stub
        }
	}
	
	class TelefonJoker extends Joker{
		
		public TelefonJoker(String personName, String number) {
	        // TODO Auto-generated constructor stub
        }
	}
	
	class FifyFiftyJoker extends Joker{
		
		public FifyFiftyJoker(Questions[] questions) {
	        // TODO Auto-generated constructor stub
        }
	}
}
 
Zuletzt bearbeitet:

diyatenim47

Mitglied
Also wie ich verstanden habe soll ich die Joker mit im Endeffekt mit einem Zufallsgenerator machen. Nun ich weiss aber nicht wo ich anfangen soll. Kaoz deinen Ansatz verstehe ich überhaupt nicht. Also per random werte erzeugen und dann beim e.g Publikumsjoker zufällig verteilen und eine Bekommt halt den größten Wert .
Ich weiss immer noch nicht wie ich anfangen soll. Zur Zeit suche ich auf google.
Habt Geduld mit mir :D

Gruß
 

kaoZ

Top Contributor
Mein Ansatz behandelt Joker wie man es in der OOP auch machen sollte als Objekte, hier eben vom Typ Joker, welche Eigenschaften die einzelnen Joker haben wird in ihren Spezialisierungen festgelegt.

So wie du bei deinem Spiel Fragen in Form von Objekten definierst kannst du es eben auch mit Jokern machen, die Joker haben dann wie auch die Fragen bestimmte Eigenschaften und Methoden.
 
Zuletzt bearbeitet:

diyatenim47

Mitglied
Ok Kaoz soweit verstanden. Müsste dein Gehirn noch für was anderes anzapfen. Also, ich habe zur Zeit nur 1 Fragepool als seperate Klasse. Nun möchte ich 2 verschiedene hinzufügen (Für jeden Schwierigkeitsgrad einen Fragepool/klasse): einfach,medium,hard). Also nachdem mein erster Fragepool 5 Fragen zufällig rausgepickt hat, soll er auf eine anderen Fragen pool wechseln. Ich hab es mit der For Schleife versucht, bekomme es aber nicht gebacken.

Hier mein Fragepool:
[JAVA=42]
public class Fragen{
int zufall;
String fragen[] = new String[7];
static String frage;

String Fragenmedium[];

public Fragen(){

fragen[1] = "What is the capital city of Germany?$Frankfurt$München$Hamburg$Berlin$4";
fragen[2] = "Who is the main character in the cartoon `Micky Mouse`?$Donald Duck$Pluto$Micky Mouse$Spongebob$3";
fragen[3] = "Who is the CEO of Apple?$Brad Pitt$Tim Cook$Michelle Citchen$Bill Gates$2";
fragen[4] = "Who was the first president in the USA?$Barack Obama$Gerd Schröder$George Washington$George W. Bush$3";
fragen[5] = "In what city did the famous `Tea Party` occur to protest the British East India Company?$Miami$New York $Philadelphia$Boston$4";
fragen[6] = "The FC Bayern Munich is a professionel football team in which league?$Bundesliga$Oberliga$Championsleague$Regional Liga$1";

frage = fragen[zufall(1,7)];

}

public int zufall(int min,int max){
zufall = (int)((max-min)*Math.random()+min);

return zufall;


//hier habe ich versuchst die Schleife zu platzieren, also for (zufall int==5){
Fragenmedium(); }




}


}

[/code]

Könntest du mir weiter helfen Kaoz ?
 

diyatenim47

Mitglied
[Java=42]
import java.awt.*;
import javax.swing.*;
import java.awt.event.ActionListener;
import java.awt.event.ActionEvent;

public class Quiz_Fenster implements ActionListener {
Dimension dim = Toolkit.getDefaultToolkit().getScreenSize();

JLabel frage;
JButton ant[] = new JButton[4];
JFrame w1;
JProgressBar b;

int lösung,richtig;

public static void main (String[] args) {
new Quiz_Fenster();
}

public Quiz_Fenster(){

{
w1 = new JFrame();
w1.setSize(400,300);
w1.setLocation((int) (dim.getWidth()-400/2),(int)(dim.getHeight()-300/2));
w1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
w1.setVisible(true);
w1.setLayout(null);


ant[0] = new JButton(" ");
ant[0].setBounds(52,90,120,40);
ant[0].addActionListener(this);

w1.add(ant[0]);

ant[1] = new JButton(" ");
ant[1].setBounds(52,160,120,40);
ant[1].addActionListener(this);

w1.add(ant[1]);

ant[2] = new JButton(" ");
ant[2].setBounds(220,90,120,40);
ant[2].addActionListener(this);

w1.add(ant[2]);

ant[3] = new JButton(" ");
ant[3].setBounds(220,160,120,40);
ant[3].addActionListener(this);

w1.add(ant[3]);

frage = new JLabel("HIer steht die Frage!");
frage.setBounds(52,15,250,40);
w1.add(frage);

b = new JProgressBar(0,100);
b.setBounds(120,220,140,25);
b.setValue(0);
b.setStringPainted(true);
w1.add(b);

}}

public void actionPerformed(ActionEvent e){
if(e.getSource() == ant[0]){
if (lösung == 1){
Nachricht("Right","Keep it up...");
Prozent();
frage_change.neueFrage();

}
else{
Nachricht("Wrong answer","Not correct...");
System.exit(0);
}}



if(e.getSource() == ant[1]){
if (lösung == 2){
Nachricht("Right","Keep it up...");
Prozent();
frage_change.neueFrage();

}
else{
Nachricht("Wrong answer","Not correct");
System.exit(0);
}}




if(e.getSource() == ant[2]){
if (lösung == 3){
Nachricht("Right","Keep it up...");
Prozent();
frage_change.neueFrage();

}
else{
Nachricht("Wrong answer","Not correct");
System.exit(0);
}}



if(e.getSource() == ant[3]){
if (lösung == 4){
Nachricht("Right","Keep it up...");
Prozent();
frage_change.neueFrage();

}
else{
Nachricht("Wrong answer","Not correct");
System.exit(0);
}}


}

public void ChangeButtonText(int button,String text){
ant[button-1].setText(text);
}

public void ChangeLabelText(String text){
frage.setText(text);

}

public void Nachricht(String Aussage,String info){
Object[] options = { "OK"};
JOptionPane.showOptionDialog(null, Aussage, info, JOptionPane.DEFAULT_OPTION, JOptionPane.PLAIN_MESSAGE, null, options, options[0]);

}

public void Prozent(){
if(richtig <= 7){
richtig+=1;
Prozentrechnung(richtig,8);
}
else{
Nachricht("Super !","You are a millionair now. Congratulatio! ");
System.exit(0);

}
}

public void Prozentrechnung(int zahl,int gesamt){
b.setValue((int) 100/gesamt*zahl);

}


}

[/code]
 

diyatenim47

Mitglied
[JAVA=42]
class frage_change {

static String ri_frage = null;
static String op1 = null;
static String op2 = null;
static String op3 = null;
static String op4 = null;
static int lösung = 0;

static Quiz_Fenster quiz;
static Fragen frage_klasse;
static String akt_Frage;



public frage_change(){

quiz= new Quiz_Fenster();
neueFrage();

}

public static void neueFrage(){
frage_klasse = new Fragen();
akt_Frage = Fragen.frage;

parser();
aendereText();

}

public static void parser(){

String[] frage = akt_Frage.split("\\$");

for(int x = 0;x< frage.length;x++){

switch(x){

case 0 :
ri_frage = frage[x];
break;

case 1:
op1 = frage[x];
break;

case 2:
op2 = frage[x];
break;

case 3:
op3 = frage[x];
break;

case 4:
op4 = frage[x];
break;

case 5:
lösung = Integer.parseInt(frage[x]);
break;

}}
}

public static void aendereText(){

quiz.ChangeLabelText(ri_frage);
quiz.lösung = lösung;
quiz.ChangeButtonText(1, op1);
quiz.ChangeButtonText(2, op2);
quiz.ChangeButtonText(3, op3);
quiz.ChangeButtonText(4, op4);

}

}
[/code]

Das wars eigentlich was ich bisher erreichen konnte. Wie gesagt müsste ich es irgendwie in 3 Arrays aufteilen. Wobei nach 5 Fragen aufs andere Array zugegriffen wird. Also 5 Fragen von der einfachen Klasse ("Fragen") dann wechsel zur anderen etc... Zudem müsste ich noch eine Schleife irgenwo in diesem Morast von Code implementieren, welche nach jeder richtigen Antwort, das bis dahin gewonnen Geld ausgibt. Beispielsweise nach 5 richtigen antworten hat man 1000 Euro gewonnen.
 

kaoZ

Top Contributor
Ich würde mir ggf. schon Früher gedanken darum machen, fangen wir mal bei der Klasse an die eine Frage Repräsentiert

Hier mal rein fiktiv ohne Antwort etc.... nur zum Verständnis

Java:
public class Question {
	
	static final int SIMPLE = 1;
	static final int MIDDLE = 2;
	static final int HARD 	= 3;
	
	private String quest;
	private int type;
	
	public Question(String quest, int type) {
		this.quest = quest;
	}
	
	public String getQuestion() {return this.quest;}
	
	public int getType() {return this.type;}

}

und die Klasse die nachher die Fragen als eine Art Sammlung enthalten soll

Java:
import java.util.ArrayList;


public class QuestionPool {

	static ArrayList<Question> simplePool = new ArrayList<>();
	static ArrayList<Question> midPool = new ArrayList<>();
	static ArrayList<Question> hardPool = new ArrayList<>();
	
	public QuestionPool() {}
	
	public void addQuestions(Question...quest){
		for (int i = 0; i < quest.length; i++) {
	        if (quest[i].getType() == Question.SIMPLE) {
	            simplePool.add(quest[i]);
            }
	        if (quest[i].getType() == Question.MIDDLE) {
	            midPool.add(quest[i]);
            }
	        if (quest[i].getType() == Question.HARD) {
	            hardPool.add(quest[i]);
            }
        }
	}
	
	public Question[] getRandomQuestions(int count){
		
		Question[] q = new Question[count];
		
		// implement all stuff here
		
		return q;
		
	}

}

Hier ein Beispiel :

Java:
public class Test {

	
	public static void main(String[] args) {
	    Question a = new Question("Was ist Java?", 1);
	    Question b = new Question("Warum ist das so?", 2);
	    
	    QuestionPool.addQuestions(a,b);
	    
	    System.out.println(QuestionPool.simplePool.size());
	    System.out.println(QuestionPool.midPool.size());
	    System.out.println(QuestionPool.hardPool.size());
    }
}

Die Ausgabe macht hier schon sichtbar das hier schon nach Typ der Fragen kategorisiert wird, und die Fragen in der jeweiligen Liste landen.
Code:
1
1
0

Nun kannst du hergehen und anhand deiner Vorstellungen die Implementierung der Methode getRandomQuestions()
so implementieren wie du sie haben möchtest, es wird dir dann z.B eine Array mit einer von dir gewählten anzahl an leichten, mittleren und schweren Fragen zurückgeliefert, welche du dann einfach an deine Gameklasse übergibst.

Hier ist mal eine Beispielimplementierung :

Java:
public static Question[] getRandomQuestions(){
		
		Random rdm = new Random();
		
		Question[] q = new Question[15];
		
		for (int i = 0; i < q.length; i++) {
	        if (i <= 5) {
	            q[i] = simplePool.get(Math.abs(rdm.nextInt() % 5));
            }
	        if (i > 5) {
	            q[i] = new Question("default", 3);
            }
        }
		
		return q;
		
	}

Die Ausführung :

Java:
public class Test {

	
	public static void main(String[] args) {
	    Question a = new Question("Was ist Java?", 1);
	    Question b = new Question("Warum ist das so?", 1);
	    Question c = new Question("Wieso nur?", 1);
	    Question d = new Question("Wie war die Frage?", 1);
	    Question e = new Question("Was ist Blaues Licht?", 1);
	    
	    QuestionPool.addQuestions(a,b,c,d,e);
	    
	    System.out.println(QuestionPool.simplePool.size());
	    System.out.println(QuestionPool.midPool.size());
	    System.out.println(QuestionPool.hardPool.size());
	    
	    Question[]  pool = QuestionPool.getRandomQuestions();
	    
	    System.out.println(pool.length);
	    System.out.println(pool[0].getQuestion());
	    System.out.println(pool[1].getQuestion());
	    System.out.println(pool[2].getQuestion());
	    System.out.println(pool[3].getQuestion());
    }
}

Die Ausgabe dazu :

Code:
5
0
0
15
Warum ist das so?
Was ist Java?
Wie war die Frage?
Was ist Blaues Licht?

Hier könnte man jetzt noch mit der Klasse
Code:
BitSet
in verbindung mit .
Code:
nextInt();
der Klasse
Code:
Random
verhindern das gleiche fragen den einzelnen Listen hinzugefügt werden.
 
Zuletzt bearbeitet:

diyatenim47

Mitglied
Hmm danke wiedermal, dass du dir Zeit genommen hast. Nun...verstehen du echt deinen größtenteils. Jedoch ist die sehr schwierig für mich es zu implementieren. Ich bin wirklich neu und nach deinen Post denke ich, dass du dich schon ein weilchen mit Java beschäftigst. Ich habe leider keine Zeit mehr um großartige Veränderungen durch zunehmen und für jede kleine Veränderung die ich vornehme brauche ich schon eine gewisse Zeit.
Deshalb frage ich dich Kaoz...kannst du mir bei meinem jetztigen Stand vom Spiel helfen also wo ich genau was ändern soll. Wenn es nicht geht auch nicht schlimm, muss ich halt mit leben :/

Jedenfalls danke ich dir für die ganzen Hilfe während des Threads.

Gruß
diyatenim
 

turtle

Top Contributor
Nun gebe ich Dinge zu Protokoll, die mir aufgefallen sind:

Du solltest einen Layout-Manager bemühen und NICHT dich um die Positionierung der Elemente kümmern Ich nehme immer den jGoodies-Formlayout, der auch vom WindowBuilder in Eclipse unterstützt wird.
Du solltest das DRY-Prinzip beachten. DRY=Don't Repeat Yourself. Also schreibe Code nur einmal. Diesen Code-Abschnitt sehe ich mehrmals und solltest du vermeiden.
Java:
				Nachricht("Right", "Keep it up...");
				Prozent();
				// frage_change.neueFrage();

			} else {
				Nachricht("Wrong answer", "Not correct");
				System.exit(0);
			}
Methoden werden lowerCamelCase geschrieben und beginnen mit einem Verb. Also heissen deine Methoden vielleicht besser zeigeNachricht, zeigeFortschritt und berechneProzent und so weiter.

Ich habe mal, da ich heute meinen Grosszügigen habe :)D) mal das Programm umgeschrieben.
Ist zwar kein Klon vom Millionärsspiel, aber zumindest eine Frage kann man beantworten und zwar mehrmals falsch, wie man an der Progressbar sieht. Ist sicher nicht perfekt, zeigt aber wohin deine Reise gehen sollte;)

Java:
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.JPanel;
import javax.swing.JProgressBar;
import javax.swing.SwingConstants;

import com.jgoodies.forms.factories.FormFactory;
import com.jgoodies.forms.layout.ColumnSpec;
import com.jgoodies.forms.layout.FormLayout;
import com.jgoodies.forms.layout.RowSpec;

import java.awt.Font;

import javax.swing.AbstractAction;
import javax.swing.Action;

@SuppressWarnings("serial")
public class Quiz_Fenster extends JPanel {

	private JLabel frage;
	private JButton btnAntwort1;
	private JButton btnAntwort2;
	private JButton btnAntwort3;
	private JButton btnAntwort4;
	private JProgressBar progressBar;
	private FrageAntwort frageAntwort;
	private int n = 0;

	public static void main(String[] args) {
		JFrame w1 = new JFrame();
		w1.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Quiz_Fenster quiz_Fenster = new Quiz_Fenster();
		w1.getContentPane().add(quiz_Fenster);
		FrageAntwort frageAntwort = new FrageAntwort("Wie heisst die Hauptstadt von Deutschland?", "Frankfurt",
				"München", "Hamburg", "Berlin", "Berlin");
		quiz_Fenster.stelleFrage(frageAntwort);
		w1.pack();
		w1.setVisible(true);
	}

	private void stelleFrage(FrageAntwort frageAntwort) {
		this.frageAntwort = frageAntwort;
		frage.setText(frageAntwort.getFrage());
		btnAntwort1.setText(frageAntwort.getAntwort1());
		btnAntwort2.setText(frageAntwort.getAntwort2());
		btnAntwort3.setText(frageAntwort.getAntwort3());
		btnAntwort4.setText(frageAntwort.getAntwort4());
	}

	public Quiz_Fenster() {
		setLayout(new FormLayout(new ColumnSpec[] { ColumnSpec.decode("center:300px"), }, new RowSpec[] {
				RowSpec.decode("20dlu"), FormFactory.DEFAULT_ROWSPEC, FormFactory.RELATED_GAP_ROWSPEC,
				RowSpec.decode("fill:default"), FormFactory.UNRELATED_GAP_ROWSPEC, }));
		frage = new JLabel("Hier steht die Frage!");
		frage.setFont(new Font("Tahoma", Font.PLAIN, 14));
		frage.setHorizontalAlignment(SwingConstants.CENTER);
		frage.setBounds(52, 15, 250, 40);
		add(frage, "1, 2, center, top");

		JPanel panel = new JPanel();
		add(panel, "1, 4, fill, fill");
		panel.setLayout(new FormLayout(
				new ColumnSpec[] { FormFactory.DEFAULT_COLSPEC, FormFactory.RELATED_GAP_COLSPEC,
						ColumnSpec.decode("center:default:grow"), ColumnSpec.decode("50dlu"),
						ColumnSpec.decode("center:default:grow"), FormFactory.RELATED_GAP_COLSPEC,
						FormFactory.DEFAULT_COLSPEC, }, new RowSpec[] { RowSpec.decode("50dlu"),
						FormFactory.RELATED_GAP_ROWSPEC, FormFactory.DEFAULT_ROWSPEC, RowSpec.decode("20dlu"),
						FormFactory.DEFAULT_ROWSPEC, RowSpec.decode("20dlu"), FormFactory.DEFAULT_ROWSPEC, }));

		btnAntwort1 = new JButton("Antwort1");
		btnAntwort1.addActionListener(new ButtonListener(btnAntwort1));
		panel.add(btnAntwort1, "3, 3");

		btnAntwort2 = new JButton("Antwort2");
		btnAntwort2.addActionListener(new ButtonListener(btnAntwort2));
		panel.add(btnAntwort2, "5, 3");

		btnAntwort3 = new JButton("Antwort3");
		btnAntwort3.addActionListener(new ButtonListener(btnAntwort3));
		panel.add(btnAntwort3, "3, 5");

		btnAntwort4 = new JButton("Antwort4");
		btnAntwort4.addActionListener(new ButtonListener(btnAntwort4));
		panel.add(btnAntwort4, "5, 5");

		progressBar = new JProgressBar();
		progressBar.setMinimum(0);
		progressBar.setMaximum(3);
		panel.add(progressBar, "3, 7, 3, 1");

	}

	protected void stelleAntwort(String antwort) {
		if (antwort.equals(frageAntwort.getRichtigAntwort())) {
			JOptionPane.showMessageDialog(null, "Richtig");
		} else {
			progressBar.setValue(++n);
			if (n == 3) {
				JOptionPane.showMessageDialog(null, "Sie haben leider verloren");
			}
		}
	}

	class ButtonListener implements ActionListener {
		private JButton btnAntwort;

		public ButtonListener(JButton btnAntwort) {
			this.btnAntwort = btnAntwort;
		}

		public void actionPerformed(ActionEvent e) {
			stelleAntwort(btnAntwort.getText());
		}
	}

	public FrageAntwort getAktuelleFrage() {
		return frageAntwort;
	}

}

class FrageAntwort {
	private String frage;
	private String antwort1;
	private String antwort2;
	private String antwort3;
	private String antwort4;
	private String richtigAntwort;

	public FrageAntwort(String frage, String antwort1, String antwort2, String antwort3, String antwort4,
			String richtigAntwort) {
		this.frage = frage;
		this.antwort1 = antwort1;
		this.antwort2 = antwort2;
		this.antwort3 = antwort3;
		this.antwort4 = antwort4;
		this.richtigAntwort = richtigAntwort;
	}

	public String getFrage() {
		return frage;
	}

	public void setFrage(String frage) {
		this.frage = frage;
	}

	public String getAntwort1() {
		return antwort1;
	}

	public void setAntwort1(String antwort1) {
		this.antwort1 = antwort1;
	}

	public String getAntwort2() {
		return antwort2;
	}

	public void setAntwort2(String antwort2) {
		this.antwort2 = antwort2;
	}

	public String getAntwort3() {
		return antwort3;
	}

	public void setAntwort3(String antwort3) {
		this.antwort3 = antwort3;
	}

	public String getAntwort4() {
		return antwort4;
	}

	public void setAntwort4(String antwort4) {
		this.antwort4 = antwort4;
	}

	public String getRichtigAntwort() {
		return richtigAntwort;
	}

	public void setRichtigAntwort(String richtigAntwort) {
		this.richtigAntwort = richtigAntwort;
	}
}
 
Zuletzt bearbeitet:

diyatenim47

Mitglied
Erstmal dir auch ein herzliches Danke schön Schildkröte :D. Bekomm es aber nicht zum laufen. Error Meldung "package com.jgoodies.forms.factories does not exist" . Hab gegoogelt und hab mir dann auch jgoodiesforms runtergeladen. Weiss aber nicht wohin ich das entpacken soll. Im Ordner vom Projekt geht es nicht und weiss auch nicht wohin genau im BlueJ Ordner.

Gruß
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
A Collections Array-Elemente in ArrayList kopieren ohne Schleife Allgemeine Java-Themen 7
J Verschiedene Klassen als "Object" in ArrayList und dann in for-Schleife erzeugen!? Allgemeine Java-Themen 2
S Endlos-Schleife bei Ausgabe von ArrayList Allgemeine Java-Themen 6
M ArrayList oder LinkedList Allgemeine Java-Themen 10
C Sortieren und Selektieren einer ArrayList<Point3D> Allgemeine Java-Themen 6
A Einzelne Objekte und Unterobjekte einer ArrayList ausgeben Allgemeine Java-Themen 53
T Remove bei ArrayList funktioniert nicht Allgemeine Java-Themen 2
B Type mismatch: cannot convert from Graph.Edge to ArrayList<Graph.Edge> Allgemeine Java-Themen 21
R ArrayList Allgemeine Java-Themen 4
G jToggleButton in Array/ArrayList Allgemeine Java-Themen 12
J ArrayList, ganze Zeilen löschen oder überspringen Allgemeine Java-Themen 4
L ArrayList sortieren Allgemeine Java-Themen 2
C ArrayList Problem Allgemeine Java-Themen 3
O Datentypen Wie kann ich den Typ einer ArrayList abfragen ? Allgemeine Java-Themen 7
S Best Practices CopyConstrutor mit ArrayList Allgemeine Java-Themen 1
S ArrayList Design Allgemeine Java-Themen 4
S Array dynamisieren oder ArrayList verwenden? Allgemeine Java-Themen 17
L ArrayList mit String Arrays in ein Array umwandeln Allgemeine Java-Themen 1
H Elemente aus ArrayList in Array speichern Allgemeine Java-Themen 8
MiMa Person in einer Arraylist hinzugügen mit Prüfung ? Allgemeine Java-Themen 6
X Adjazenzliste ohne ArrayList Allgemeine Java-Themen 6
X Output von ArrayList Allgemeine Java-Themen 3
H Stream in ArrayList umwandeln Allgemeine Java-Themen 2
H Mehrere Datentypen in einer Arraylist speichern Allgemeine Java-Themen 9
H Arraylist mit anderer ArrayList überschreiben Allgemeine Java-Themen 17
MiMa ArrayList sortieren?? Allgemeine Java-Themen 5
Curtis_MC Pointer mit ArrayList vergleichen Allgemeine Java-Themen 6
F ArrayList`s in Klassen mit Getter/Setter Allgemeine Java-Themen 8
W Array vs. ArrayList vs. HashMap Allgemeine Java-Themen 20
F Arraylist vollständig abspeichern und laden Allgemeine Java-Themen 1
R Arraylist in andere Klasse leiten und bearbeiten Allgemeine Java-Themen 10
D ArrayList Indexlänge ändern Allgemeine Java-Themen 2
E Elemente innerhalb einer ArrayList vergleichen Allgemeine Java-Themen 33
K ursprüngliche ArrayList ändert sich bei Übergabe in Methode Allgemeine Java-Themen 18
N Mehrdimensionale ArrayList mischen Allgemeine Java-Themen 10
S JTable - mehrere ausgewählte Rows in ArrayList Allgemeine Java-Themen 5
MiMa Date aus einer ArrayList<Date> holen ?? Allgemeine Java-Themen 5
MiMa ArrayList Rückgabewerte aus einer Funktion Allgemeine Java-Themen 15
L CSV File lesen, in ArrayList speichern und ausgeben Allgemeine Java-Themen 3
M Was geschieht mit Java-Klasse, die aus ArrayList entfernt wird? Allgemeine Java-Themen 10
M Methoden Generische Methode für ArrayList Allgemeine Java-Themen 7
T Collections ArrayList Sortieren Allgemeine Java-Themen 4
P GUI: ArrayList anzeigen funktioniert nicht Allgemeine Java-Themen 5
H ArrayList: Leere Elemente finden? Allgemeine Java-Themen 2
GreenTeaYT Verständnisprobleme zur Arraylist Allgemeine Java-Themen 1
T Methoden Methode zum durchsuchen einer ArrayList Allgemeine Java-Themen 8
K ArrayList sortieren Allgemeine Java-Themen 16
A Bestimmte Inhalte aus ArrayList 1 in ArrayList 2 kopieren Allgemeine Java-Themen 6
S Mehrdimensionales ArrayList ins HashSet Allgemeine Java-Themen 10
C ArrayList Allgemeine Java-Themen 8
Streeber Probleme mit AWT-EventQueue: ArrayList Elemente hinzufügen Allgemeine Java-Themen 1
F Methoden Arraylist weiterverwenden nach methoden Aufruf Allgemeine Java-Themen 2
Z NullPointerException beim Schreiben einer ArrayList in eine Datei Allgemeine Java-Themen 6
L Von ArrayList abgeleitete Klasse nur mit bestimmten Objekten füllen Allgemeine Java-Themen 1
K Array in ArrayList Allgemeine Java-Themen 16
Paul15 2D Arraylist in Jtable Allgemeine Java-Themen 1
Paul15 Arraylist 2D Allgemeine Java-Themen 8
B ArrayList in ein Objekt legen Allgemeine Java-Themen 1
Neumi5694 Datentypen ArrayList vs TreeMap Allgemeine Java-Themen 6
F ArrayList Allgemeine Java-Themen 11
X ArrayList will nicht so wie ich will. Hilfe Allgemeine Java-Themen 8
N ArrayList in eigenem Object nicht richtig serialisierbar Allgemeine Java-Themen 14
M ArrayList mit verschiedenen Datentypen in String konvertieren Allgemeine Java-Themen 10
Z Elemente einer ArrayList von rechts wegnehmen Allgemeine Java-Themen 5
W Arraylist Text Suchen und Datei löschen Allgemeine Java-Themen 5
R ArrayList und HashMap Allgemeine Java-Themen 7
T ArrayList zeilenumbruch entfernen Allgemeine Java-Themen 13
E ArrayList Anzahl der gleichen Elemente Allgemeine Java-Themen 4
Doopy ArrayList plötzlich leer Allgemeine Java-Themen 2
D Arraylist eigener Klasse an iReport übergeben Allgemeine Java-Themen 7
L ArrayList Inhaltstyp. Allgemeine Java-Themen 5
Z Klassen ArrayList selbst machen Allgemeine Java-Themen 5
J Arraylist speichern und laden? Allgemeine Java-Themen 5
C Generics Objekt in ArrayList Allgemeine Java-Themen 2
D ArrayList index auf gültigkeit prüfen Allgemeine Java-Themen 12
M ArrayList<String> Frage Allgemeine Java-Themen 7
O ArrayList kaputt?! Allgemeine Java-Themen 5
M ArrayList<Foo> in ein Foo[] konvertieren? Allgemeine Java-Themen 8
Bananabert Abstract ArrayList Allgemeine Java-Themen 4
O ArrayList - Serialisierungs-Problem Allgemeine Java-Themen 11
M JTable + ArrayList Allgemeine Java-Themen 3
M Datentypen ArrayList in Integer konvertieren Allgemeine Java-Themen 3
O Collections ListIterator gibt Inhalt von ArrayList nicht aus Allgemeine Java-Themen 3
Madlip Variablen 3 Werte aus ArrayList und weiter ... Allgemeine Java-Themen 4
S arraylist nach n. Eintrag numerisch Sortiren Allgemeine Java-Themen 5
O Problem beim Auslesen einer Arraylist von JComboBoxen Allgemeine Java-Themen 2
R Threads korrekte Synchronisation bei Vector und ArrayList Allgemeine Java-Themen 6
M Kovariante Rückgabewerte mit ArrayList Allgemeine Java-Themen 3
H LinkedList<LinkedList<String>> nach ArrayList<ArrayList<String>> ? Allgemeine Java-Themen 9
E NetBeans Vector durch ArrayList ersetzen Allgemeine Java-Themen 4
Maxim6394 Problem mit ArrayList Allgemeine Java-Themen 5
E Berechnung in Arraylist Allgemeine Java-Themen 10
E ArrayList mit unbekannter Größe Allgemeine Java-Themen 8
V Fork Join bei Arraylist Allgemeine Java-Themen 6
H Fehler in Arraylist Allgemeine Java-Themen 2
S Datensätze in eine ArrayList<Movie> speichern Allgemeine Java-Themen 13
S Alle Kombinationen aus ArrayList - Potenzmenge Allgemeine Java-Themen 7
V ArrayList vergleichen mit .equals? Allgemeine Java-Themen 13
J ArrayList-Problem Allgemeine Java-Themen 16
S Von einer ArrayList in die andere schreiben? Allgemeine Java-Themen 6

Ähnliche Java Themen

Neue Themen


Oben