Einfaches Quiz (Java-Beispielcode): Unterschied zwischen den Versionen

Aus Byte-Welt Wiki
Zur Navigation springenZur Suche springen
K (2.)
K (3.)
Zeile 162: Zeile 162:
 
pw.println("Rechteckberechnung\n");
 
pw.println("Rechteckberechnung\n");
 
</code=java>
 
</code=java>
Wir haben jetzt ein Stream für die Eingabe, wir brauchen aber noch ein Stream für die Ausgabe, damit wir etwas in der Konsole sehen können. Dafür können wir die Klasse {{API|java/io/PrintWriter|PrintWriter}} verwenden. Wir erstellen eine neue Instanz dieser Klasse und übergeben 2 Parameter. Der erste Parameter ist für die Ausgabe und den zweiten Parameter brauchen wir um den Datenstrom nach jedem println anzustossen, da er sonst die Daten weitersammeln wird ohne die Ausgabe zu generieren. Danach greifen wir mit dem Punktoperator auf die Methoden der Klasse PrintWriter zu. Wir wollen etwas in der Konsole anzeigen, also nehmen wir die println()-Methode.
+
Wir haben jetzt ein Stream für die Eingabe, wir brauchen aber noch ein Stream für die Ausgabe, damit wir etwas in der Konsole sehen können. Dafür können wir die Klasse {{JAPI|PrintWriter}} verwenden. Wir erstellen eine neue Instanz dieser Klasse und übergeben 2 Parameter. Der erste Parameter ist für die Ausgabe und den zweiten Parameter brauchen wir um den Datenstrom nach jedem println anzustossen, da er sonst die Daten weitersammeln wird ohne die Ausgabe zu generieren. Danach greifen wir mit dem Punktoperator auf die Methoden der Klasse PrintWriter zu. Wir wollen etwas in der Konsole anzeigen, also nehmen wir die println()-Methode.
  
 
====4.====
 
====4.====

Version vom 27. April 2014, 19:20 Uhr

Einfaches Quiz

<code=java> import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader;

public class Quiz {

public static void main(String[] args) {

int punkte = 0;

String[] frage1 = { "Wieviel ist 1 + 1?", "<1> Eins", "<2> Zwei", "<3> Drei", "2" };

String[] frage2 = { "Wieviel ist 1 + 2?", "<1> Eins", "<2> Zwei", "<3> Drei", "3" }; String[] frage3 = { "Wieviel ist 2 - 1?", "<1> Eins", "<2> Zwei", "<3> Drei", "1" }; //Fragen werden in einem zweidimensionalen String-Array gespeichert String[][] liste = { frage1,frage2,frage3 }; //Ausgabe von Fragen in der Konsole for(int i=0;i<liste.length;i++) {

System.out.println(liste[i][0]); System.out.println(liste[i][1]); System.out.println(liste[i][2]); System.out.println(liste[i][3]); System.out.println("Bitte Antwort eingeben: ");

//Einlesen von Eingabe BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));

try { String antwort = eingabe.readLine(); System.out.println("Sie haben als Antwort: "+antwort+" eingegeben.");

//Vergleichen von Antworten if(antwort.equals(liste[i][4])) { System.out.println("Sie sind ein Genie!\n"); punkte++; } else { System.out.println("Gehen Sie zurück in die erste Klasse!\n"); }

} catch (IOException e) { System.out.println("Falsche Eingabe!"); } } System.out.println("Sie haben "+punkte+" von 3 Punkten erreicht."); if(punkte==3) { System.out.println("Sie können in die zweite Klasse gehen, gratuliere!"); } else { System.out.println("Sie müssen leider die erste Klasse nochmal wiederholen!"); } }

} </code=java>

Switch-Case und Streams

<code=java> import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter;

public class Flaechenberechnung {

public static void main(String[] args) throws IOException {

double seiteA, seiteB, ergebnis; int auftrag;

InputStreamReader isr = new InputStreamReader( System.in ); BufferedReader br = new BufferedReader( isr );

PrintWriter pw = new PrintWriter( System.out, true); pw.println("Rechteckberechnung\n");

pw.println("Seite A eingeben: "); seiteA = Double.parseDouble( br.readLine() ); pw.println("Seite B eingeben: "); seiteB = Double.parseDouble( br.readLine() ); pw.println("<1> für Flächenberechnung, <2> für Umfangberechnung eingeben:"); auftrag = Integer.parseInt( br.readLine() );

switch ( auftrag ) { case 1: { ergebnis = seiteA*seiteB; pw.println("Die Fläche beträgt "+ergebnis); break; } case 2: { ergebnis = 2*seiteA + 2*seiteB; pw.println("Der Umfang beträgt "+ergebnis); break; } default: pw.println("Leider verstehe ich Ihne eingabe nicht."); } pw.println("Programm wird beendet."); }

} </code=java>

Erklärung

Mit diesem Programm kann man Umfang und Fläche von einem Rechteck berechnen. Ich werde jetzt dieses Programm auseinandernehmen und versuchen zu erklären, wie es funktioniert.

1.

<code=java> public class Flaechenberechnung {

public static void main(String[] args) throws IOException {

double seiteA, seiteB, ergebnis; int auftrag;

</code=java> Wir erstellen hier eine Klasse, die wir Flaechenberechnung nennen. In die main()-Methode setzen wir eine IOException um Fehler, die bei Ein- oder Ausgabe passieren können, abzufangen und uns anzuzeigen. Danach deklarieren wir 4 Variablen, 3 vom Typ double und 1 vom Typ int.

2.

<code=java> InputStreamReader isr = new InputStreamReader( System.in ); BufferedReader br = new BufferedReader( isr ); </code=java> Jetzt erstellen wir neue Instanzen der Klassen InputStreamReader und BufferedReaderund übergeben 2 Parameter, ein mal System.in und dann isr. Wir haben gerade 2 Streams verwendet. Was sind eigentlich Streams? Streams sind Datenströme, die Informationen in jede Richtung übertragen können. Man kann Datenströme manipulieren, was wir gerade gemacht haben. Doch warum haben wir das gemacht? Wir haben einen InputStreamReader verwendet, um die Tasten, die wir eintippen werden, einzulesen, deshalb haben wir als Parameter System.in eingegeben, was für Eingabe steht. Jedoch kann der InputStreamReader nur einzelne Zeichen einlesen, was sehr unbequem für uns ist, deshalb verwenden wir hier einen Puffer, der diese Zeichen als Strings speichert und den Datenstrom so lange offen hält, wie wir es wollen und erst dann die Daten sendet, sobald wir ihm das sagen.

3.

<code=java> PrintWriter pw = new PrintWriter( System.out, true); pw.println("Rechteckberechnung\n"); </code=java> Wir haben jetzt ein Stream für die Eingabe, wir brauchen aber noch ein Stream für die Ausgabe, damit wir etwas in der Konsole sehen können. Dafür können wir die Klasse PrintWriter verwenden. Wir erstellen eine neue Instanz dieser Klasse und übergeben 2 Parameter. Der erste Parameter ist für die Ausgabe und den zweiten Parameter brauchen wir um den Datenstrom nach jedem println anzustossen, da er sonst die Daten weitersammeln wird ohne die Ausgabe zu generieren. Danach greifen wir mit dem Punktoperator auf die Methoden der Klasse PrintWriter zu. Wir wollen etwas in der Konsole anzeigen, also nehmen wir die println()-Methode.

4.

<code=java> pw.println("Seite A eingeben: "); seiteA = Double.parseDouble( br.readLine() ); pw.println("Seite B eingeben: "); seiteB = Double.parseDouble( br.readLine() ); pw.println("<1> für Flächenberechnung, <2> für Umfangberechnung eingeben:"); auftrag = Integer.parseInt( br.readLine() ); </code=java> Erinnern Sie sich, dass unser BufferedReader Strings speichert? Unsere seiteA ist aber vom Typ double! Was können wir jetzt machen? Ganz einfach, wir "parsen". Das bedeutet, dass wir den String in ein double umwandeln müssen. Dafür benötigen wir die Klasse Vorlage:API, die die Klassenmethode parseDouble() besitzt. Als Parameter übergeben wir br.readLine(), also den String, der umgewandelt werden soll. Und dann speichern wir den Wert vom Typ double in die Variable seiteA. Mit seiteB und auftrag machen wir dasselbe, nur daß auftrag vom Typ int ist und wir für das "parsen" die Klasse Vorlage:API benötigen.

5.

<code=java> import java.io.BufferedReader; import java.io.IOException; import java.io.InputStreamReader; import java.io.PrintWriter; </code=java> Wenn wir Klassen verwenden wollen, müssen wir die zunächst importieren.

6.

<code=java> switch ( auftrag ) { case 1: { ergebnis = seiteA*seiteB; pw.println("Die Fläche beträgt "+ergebnis); break; } case 2: { ergebnis = 2*seiteA + 2*seiteB; pw.println("Der Umfang beträgt "+ergebnis); break; } default: pw.println("Leider verstehe ich Ihne eingabe nicht."); } </code=java> Jetzt kommen wir zu switch-case. Haben wir eine Abfrage, z.B: wenn die Farbe rot ist, dann schreibe "rot", sonst schreibe "nicht rot", dann können wir if nehmen. Wenn wir aber 10 Abfragen haben, dann müssten wir 10 mal if schreiben, was sehr unbequem ist. In diesem Fall können wir switch-case verwenden. In den switch-Klammern steht unsere Variable die überprüft wird. Wenn die Variable eine Eins ist, dann wird der Block case 1 ausgeführt, wenn die Variable eine zwei ist, dann wird der Block case 2 ausgeführt, wenn die aber keine eins oder zwei ist, dann wird default Block ausgeführt. Warum haben wir bei case break verwendet? Break bedeutet "brich an dieser Stelle ab und beende switch". Wenn wir break nicht reinschreiben, dann wird das Programm alle case Blöcke durchführen, was wir nicht wollen. Bei default brauchen wir kein break, da switch danach sowieso beendet wird.

Zufällige Begrüßung

<code=java> public class Begruessung {

public static void main(String[] args) {

String[] begruessung = { "Hallo", "Guten Tag", "Guten Morgen", "Guten Abend" };

int zufallszahl = (int)(Math.random()*begruessung.length);

System.out.print(begruessung[zufallszahl]);


}

} </code=java>

Erklärung

Wir haben in diesem Beispiel zuerst ein String-Array erstellt, in das wir verschiedene Strings gespeichert haben. Danach haben wir eine Zufallszahl vom Typ int generiert, indem wir die random()-Methode der Klasse Vorlage:API verwendet haben. Da die random()-Methode double Werte von 0 bis 1 zurückgibt und wir int Werte von 0 bis 3 benötigen (unser Index), müssen wir diese double Werte mit der Länge des String-Arrays multiplizieren. Die random()-Methode nimmt dann eine zufällige Fließkommazahl von 0.0 bis 1.0 und multipliziert sie mit 4. Danach casten wir nach int und schon haben wir die passende Zufallszahl generiert. Dann geben wir unser String-Array aus und geben als Index unsere Zufallszahl ein. Fertig!