Wie verwende ich Listen

  • Themenstarter Themenstarter Toonfish
  • Beginndatum Beginndatum
T

Toonfish

Gast
Hallo liebe Java-Community,

ich versuche zur Zeit Java zu lernen, und beherrsche die kleinsten Grundlagen, also einfache Programme mit Auswahlanweisungen, Schleifen usw. zu schreiben. Jetzt wollte ich versuchen ein Programm mit Listen zu schreiben, so eine Art Quiz, wo jeweils die Fragen, die Antworten und welche Antwort bei der jeweiligen Frage richtig ist, in Listen stehen (Die Antworten mit dem Index x gehören in dem Fall zum Element mit dem Index X in der Liste mit den Fragen) . Ich hab versucht über diverse Seiten etwas über den Gebrauch von Listen herauszufinden, konnte es aber noch nicht fertig bringen eine funktionierende Liste zu schreiben. Deshalb frage ich euch, ob ihr mir erklären könnt, wie ich eine Liste erstelle, Elemente hinzufügen(Anzahl steht schon fest), und Elemente abfrage. Ich bedanke mich schon mal im Vorraus und wünsche euch ncoh viel Spaß beim Programmieren^^

MfG Toonfish
 
Erzeugen mit new, hinzufügen mit add, auslesen mit get (oder über einen Iterator, das kannst du dir fürm Anfang aber spaaren) und entfernen mit remove.
Zeig lieber mal, was du versucht hast.

Edit: Stimmt. ^^ Und die richtige Antworten-ID war im falschen Block. Schnell mal gefixt, sollte nicht so hetzen. *aufs Koffeein schieb*

Davon abgesehen würde ich den OOP-Weg vorziehen:
 

Anhänge

  • uml.PNG
    uml.PNG
    2,6 KB · Aufrufe: 47
Zuletzt bearbeitet:
Also ich hab mir dieses Galileo Computing nochmal genauer angeschaut und glaube ich alles falsch gemacht ^^"

Naja es funktioniert jedenfalls nicht, ich kriege den Fehler "cannot find symbol" und verstehe nciht ganz warum, hier ist der Quellcode:


import java.util.ArrayList;
import java.util.Iterator;
import java.util.*;

public class quiz
{
public static void main(String[] args)
{

//##################### Vaiablendefinition #####################################

int Spiel = 1;
char Anwort = 'a';
int rand = 1;
int Fragenummer = 0;
int Frage1 = 15;
int Frage2 = 15;
int Frage3 = 15;
int Frage4 = 15;
int Gewinn = 0;

//##################### Listendefinition #######################################

List<String> fragen = new ArrayList<String>();
List<String> anta = new ArrayList<String>();
List<String> antb = new ArrayList<String>();
List<String> antc = new ArrayList<String>();
List<String> antd = new ArrayList<String>();
List<String> antr = new ArrayList<String>();

fragen.add("Der Himmel ist");
anta.add("blau");
antb.add("grün");
antc.add("rosa");
antd.add("braun");


//##################### Frageblock 1-5 #########################################

while(Spiel == 1)
{
while(Fragenummer <= 5)
{
Fragenummer = Fragenummer + 1;
do
{
// rand = (int)Math.floor((Math.random() * 10000) + 1); // hab jetzt erstmal eine frage drin, daher auskommentiert
rand = 0; //hab erst eine Frage drin, daher gleich auf index 0 gesetzt
}
while(rand == Frage1 ||rand == Frage2 ||rand == Frage3 ||rand == Frage4);
Antwort = IO.getChar("" + fragen.get(rand) + "\n" + anta.get(rand) + "\n" + antb.get(rand) + "\n" + antc.get(rand) + "\n" + antd.get(rand) + "\ne Aufhören");
if(Antwort == "e")
{
IO.Show("Schade, Sie haben nur " + Gewinn + "€ gewonnen.");
Spiel = 0;
Fragenummer = 16;
}
else
{
if(Antwort != antr.get(rand))
{
Spiel = 0;
IO.show("Leider falsch, die richtige Antwort war Antwort " + antr.get(Rand) + ".");
IO.show("Schade, Sie haben nichts gewonnen.");
}
else
{
Gewinn = 200 * Fragenummer;
IO.show("Gewonnen");
}

}

}
}

}
}

Ich hoffe mal ihr werdet daraus schlau ^^"
 
Es steht doch GROSS GENUG UND ROT auf der Seite über die Verwendung von Java-Tags :noe:
Darüber hinaus kriegst du doch zu der Fehlermeldung auch eine Zeilenangabe. Es wäre auch nicht verkehrt diese zu posten.
Des weiteren solltest du auf die Namensgebung direkt von Anfang an achten: ichBinEinVariable, IchBinEineKlasse
 
Ach mir fällt grad auf, ich benutze hier Methoden von "IO Informatik on Stick" IO.Show gibt das jeweilige aus, x = IO.getInt speichert den daraufhin vom Benutzer eingegebenen Wert in der Variable x usw.

Hoffentlich ist das jetzt kein zu großes Problem^^
 
Ach das war damit gemeint, okay tut mir Leid, der Fehler war in der Zeile:

Java:
 Antwort = IO.getChar("" + fragen.get(rand) + "\n" + anta.get(rand) + "\n" + antb.get(rand) + "\n" + antc.get(rand) + "\n" + antd.get(rand) + "\ne Aufhören");

Der Fehler sieht folgendermaßen aus:

quiz.java:60:19: cannot find symbol
symbol : variable IO
location: class quiz
Antwort = IO.getChar("" + fragen.get(rand) + "\n" + anta.get(rand) + "\n" + antb.get(rand) + "\n" + antc.get(rand) + "\n" + antd.get(rand) + "\ne Aufhören");
 
Doch habe ich wie oben im Quellcode lesbar. (Char Antwort = 'a')

Aber ich glaube den Fehler gefunden zu haben, anscheinend hat er ein Problem mit den Methode mit "IO", habe grade nochmal ein einfaches Programm geschrieben und auch da bekomme ich den selben Fehler bei den IO Anweisungen. Werde das morgen nochmal auf dem PC ausprobieren, an dem das funktioniert.

Habe ich die Listen ansonsten richtig definiert und abgefragt?
 
Oh, im Programm steht aber "Antwort" bei der Definition, hab's garde nochmal geprüft, es liegt wie gesagt an dem IO.

Ansonsten bedank ich mich bei allen die bis jetzt geholfen haben und entschuldige mich noch einmal für die vergessenen Java tags.
 
Ach so, was mir noch aufgefallen ist, du hast IO nicht importiert. Ich nehme an, das ist eine externe Lib und liegt nicht im selben Package?
 
Eigentlich hat er das immer automatisch gemacht, aber naja es ist jetzt egal, ich bin auf die standart-input-output Funktionen umgestiegen und jetzt funktioniert alles wunderbar, also vielen Dank nochmal für eure Denkanstöße^^
 
Solche Hilfsklassen wie IO waren mal praktisch, inzwischen braucht sowas kein Mensch mehr (außer verkalkte Professoren, die ihre Scripts nicht ändern wollen): Für die Ausgabe gibt es Funktionen, die das Formatieren übernehmen, wie [c]System.out.printf[/c]. Für der Eingabe gibt es die Klasse [c]java.util.Scanner[/c], die [c]nextInt[/c], [c]nextDouble[/c] u.s.w. zur Verfügung stellt.
 
List<String> fragen = new ArrayList<String>();
List<String> anta = new ArrayList<String>();
List<String> antb = new ArrayList<String>();
List<String> antc = new ArrayList<String>();
List<String> antd = new ArrayList<String>();
List<String> antr = new ArrayList<String>();


Das Design für die Fragen und Antworten finde ich nicht gerade optimal. Z.B. Für den Fall, wo es zu einer Frage mehr als 5 Antworten gibt. Zudem gibt es auch Multiple Choice Fragen, wo mehrere Antworten zu einer Frage möglich sind. Was dann?
 
Das ganze wird im Stil von "Wer wird Millionär" gehalten, es gibt also immer nur 4 Antworten und immer nur eine ist richtig.
 
Ähm ja hallo, ich hab hier grad das THema gesehen und dachte mir das passt hier halbwegs rein. Ich wollte gerne wissen, wie ich einfach, also mit wenig Code mehrere Elemente gleichzeitig in eine Liste eintrage. Bisher musste ich das immer mit einer einzelnen .add Anweisung machen was mir doch etws zu unpraktisch wird, könnt ihr mir bitte helfen, wäre sehr nett von euch.

LG Quarksel
 
Also, ich wollte mehrere vordefinierte Informationen in eine Liste eintragen, z.B. möchte ich in die Liste Auto die Elemente "VW", "BWM", "Mercedes" usw. einfügen.
 
Die Daten bleiben konstant, und sollen unmittelbar nach dem Start des Programmes der Liste hinzugefügt werden.
 
Ah Okay, ich hab mri grade dieses "Galileo Computing" von der ersten Seite angeguckt und da den Befehl "Collections.addAll" gefunden, das hat geholfen. Auch wenn es jetzt nicht von dir kam, bedanke ich mich trotzdem bei dir, dass du mir helfen wolltest 🙂
 

Zurück
Oben