Java :: Aufgabe #26
4 Lösungen

Zahlen Raten - Fortgeschrittener
Fortgeschrittener - Java
von zayc_
- 28.12.2012 um 14:00 Uhr
Das zu programmierende Programm soll eine Zufallszahl (integer, der User soll nach dem Bereich gefragt werden) generieren.
Der User soll diese erraten. Nach jedem Versuch soll der User darüber informiert werden, der wie vielte Versuch es war, ob er richtig oder falsch liegt, und wenn er falsch liegt ob die gesuchte Zahl grösser oder kleiner als die vom User eingegebene ist.
Zusatz für Fortgeschrittene:
Bei Falscheingaben (Buchstaben, Sonderzeichen, etz.) soll der User darüber informiert werden.
Bei den Versuchen >10 soll eine führende Null mit ausgegeben werden (also statt 1,2,3 soll 01, 02 ,03 ausgegeben werden.)
Bei der wiederholten Eingabe einer Zahl soll der User darüber informiert werden.
Der User soll den Bereich in dem die Zufallszahl liegen soll, selbst definieren.
Der User soll informiert werden, wenn sein Versuch ausserhalb des definierten Bereichs liegt.
Beispiel einer Konsolenausgabe:
Der User soll diese erraten. Nach jedem Versuch soll der User darüber informiert werden, der wie vielte Versuch es war, ob er richtig oder falsch liegt, und wenn er falsch liegt ob die gesuchte Zahl grösser oder kleiner als die vom User eingegebene ist.
Zusatz für Fortgeschrittene:
Bei Falscheingaben (Buchstaben, Sonderzeichen, etz.) soll der User darüber informiert werden.
Bei den Versuchen >10 soll eine führende Null mit ausgegeben werden (also statt 1,2,3 soll 01, 02 ,03 ausgegeben werden.)
Bei der wiederholten Eingabe einer Zahl soll der User darüber informiert werden.
Der User soll den Bereich in dem die Zufallszahl liegen soll, selbst definieren.
Der User soll informiert werden, wenn sein Versuch ausserhalb des definierten Bereichs liegt.
Beispiel einer Konsolenausgabe:
Konsolenausgabe:
Bitte die Untergränze wählen: 20
Bitte die Obergränze wählen: 60
Bitte erraten sie die gesuchte Zahl, sie befindet sich zwischen 20 und 60.
Ihr 01. Versuch: 5
Die eingegebene Zahl befindet sich ausserhalb des von ihnen definierten Bereich.
Ihr 02. Versuch: halloooo
Bitte nur Z A H L E N eingeben.
Ihr 03. Versuch: 55
Die gesuchte Zahl ist kleiner.
Ihr 04. Versuch: 25
Die gesuchte Zahl ist grösser.
Ihr 05. Versuch: 55
Mit dieser Zahl haben Sie es schon einmal versucht!
Ihr 06. Versuch: 40
Glückwunsch die von Ihnen eingegebene Zahl ( 40 ) stimmt mit der gesuchten Zahl überein.
Lösungen:

package de.lordsidius.zahlenraten; import java.util.ArrayList; import java.util.Iterator; import java.util.List; import java.util.Random; import java.util.Scanner; public class ZahlenRatenFortgeschritten { public int spielerEingabe, computerZahl, versuche, bereichMin, bereichMax; public Scanner scan; public List<Integer> eingegebeneZahlen; public static void main(String[] args) { Random rand = new Random(); boolean running = true; ZahlenRatenFortgeschritten game = new ZahlenRatenFortgeschritten(); game.scan = new Scanner(System.in); game.eingegebeneZahlen = new ArrayList<Integer>(); game.versuche = 0; System.out.print("Bitte die Untergrenze waehlen: "); game.bereichMin = game.scan.nextInt(); game.scan.nextLine(); System.out.print("Bitte die Obergrenze waehlen: "); game.bereichMax = game.scan.nextInt(); game.scan.nextLine(); // zufallszahl generieren game.computerZahl = rand.nextInt(game.bereichMax - game.bereichMin + 1) + game.bereichMin; System.out.println("\nBitte erraten Sie die gesuchte Zahl, sie befindet sich zwischen " + game.bereichMin + " und " + game.bereichMax + " (inklusive)\n\n"); do { game.getEingabe(); if (game.eingegebeneZahlen.contains(game.spielerEingabe)) { System.out.println("Mit dieser Zahl haben Sie es schon einmal versucht!\n"); } else if (game.spielerEingabe < game.bereichMin || game.spielerEingabe > game.bereichMax) { System.out.println("Die Zahl liegt nicht im Bereich (" + game.bereichMin + " bis " + game.bereichMax + ")!\n"); game.eingegebeneZahlen.add(game.spielerEingabe); } else if (game.spielerEingabe > game.computerZahl) { System.out.println("Die gesuchte Zahl ist kleiner.\n"); game.eingegebeneZahlen.add(game.spielerEingabe); } else if (game.spielerEingabe < game.computerZahl) { System.out.println("Die gesuchte Zahl ist groesser.\n"); game.eingegebeneZahlen.add(game.spielerEingabe); } else { System.out.println("Glueckwunsch, die von Ihnen eingegebene Zahl ( " + game.spielerEingabe + " ) " + "stimmt mit der gesuchten Zahl ueberein!"); running = false; game.eingegebeneZahlen.add(game.spielerEingabe); } } while (running); game.scan.close(); } public void getEingabe() { boolean running = true; do { try { versuche++; String strVersuch = ""; if (versuche < 10) { strVersuch = "0"; } System.out.print("Ihr " + strVersuch + versuche + ". Versuch: "); spielerEingabe = scan.nextInt(); scan.nextLine(); // return-zeichen "verschlucken" running = false; } catch (Exception e) { System.out.println("Bitte nur Z A H L E N eingeben.\n"); scan.nextLine(); } } while (running); } }

/** * @author ElPapito * @date 08.05.2015 */ import java.util.Scanner; public class Zahlenraten { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); System.out.print("Bitte die Untergrenze waehlen: "); int min = scanner.nextInt(); System.out.print("Bitte die Obergrenze waehlen: "); int max = scanner.nextInt(); int random = (int) (min + Math.random() * (max - min + 1)); int count = 0; System.out.println("Bitte erraten Sie die gesuchte Zahl, " + "sie befindet sich zwischen 1 und 100."); int tipp = 0; while (tipp != random) { count++; System.out.print("Ihr "); if(count < 10) { System.out.print("0"); } System.out.print(count + ". Versuch: "); String input = scanner.next(); try { tipp = Integer.parseInt(input); } catch(NumberFormatException e) { System.out.println("Bitte nur ZAHLEN eingeben."); continue; } if (tipp == random) { System.out.println("Glueckwunsch die von Ihnen eingegebene Zahl" + " (" + tipp + ") " + "stimmt mit der gesuchten Zahl ueberein."); } else if (tipp < min || tipp > max) { System.out.println("Die eingegebene Zahl befindet sich ausserhalb " + "des von Ihnen definierten Bereichs."); } else if (tipp < random) { System.out.println("Die gesuchte Zahl ist groesser."); } else if (tipp > random) { System.out.println("Die gesuchte Zahl ist kleiner."); } } scanner.close(); } }

package spielereien; import java.util.Random; import java.util.Scanner; public class Spielereien { static int u = 0, o = 0, zufall = 0, i = 0, zaehler = 0; static int[] arr = new int [20]; public static void main(String[] args) { for (int i = 0; i<20; i++) { arr[i] = 0; } System.out.print("Bitte die Untergränze wählen: "); u = eingabe(); System.out.print("Bitte die Obergränze wählen: "); o = eingabe(); zufall = zufZahl(u,o); System.out.println("Bitte erraten sie die gesuchte Zahl, sie befindet sich zwischen "+u+" und "+o+"."); do { int pruef = 0; zaehler++; meldung(zaehler); Scanner sc = new Scanner(System.in); String s = sc.next(); try { i = Integer.parseInt(s); }catch(Exception e) { System.out.println("Bitte nur Z A H L E N eingeben"); pruef = 1; } if((i<u || i>o) && pruef==0) { System.out.println("Die eingegebene Zahl befindet sich ausserhalb des von ihnen definirten bereichs"); }else if(kontr(i) && pruef == 0) { System.out.println("Mit dieser Zahl haben sie es schon einmal versucht"); }else if(i<zufall && pruef==0) { System.out.println("Die gesuchte Zahl ist grösser."); }else if(i>zufall && pruef==0) { System.out.println("Die gesuchte Zahl ist kleiner."); }else if(i==zufall) { System.out.println("Glückwunsch die von Ihnen eingegebene Zahl ("+zufall+") stimmt mit der gesuchten überein"); } if(zaehler<19) { arr[zaehler] = i; }else { int z =zaehler%20; arr[z] = i; } }while(zufall != i); System.exit(0); } public static void meldung(int i) { if(i<10){ System.out.print("Ihr 0"+i+". Versuch: "); }else { System.out.print("Ihr "+i+". Versuch: "); } } public static int zufZahl(int a, int b) { boolean w = true; int zufallsZahl = 0; do { zufallsZahl = new Random().nextInt(b); if(zufallsZahl >= a) { w = false; } }while(w); return zufallsZahl; } public static int eingabe() { Scanner sc = new Scanner(System.in); String s = sc.next(); int i = Integer.parseInt(s); return i; } public static boolean kontr(int j) { boolean b = false; for(int i = 0; i < 20; i++) { if(arr[i] == j) { b = true; } } return b; } }
Da ich gerade leider keine Java Entwicklungsumgebung zur Hand habe, habe ich die Aufgabe mal in C# gelöst.
C#-Code

namespace Zahlen_Raten { class Program { static void Main(string[] args) { bool end = false; while (!end) { Console.Clear(); int max = 0; int min = 0; bool bothLimits = false; while (!bothLimits) { bool bMin = false; while (!bMin) { Console.Write("Bitte Untergrenze wählen: "); if (!Int32.TryParse(Console.ReadLine(), out min)) Console.WriteLine("Falsche Eingabe!"); else bMin = true; } bool bMax = false; while (!bMax) { Console.Write("Bitte Obergrenze wählen: "); if (!Int32.TryParse(Console.ReadLine(), out max)) Console.WriteLine("Falsche Eingabe!"); else if (max <= min) Console.WriteLine("Die Obergrenze muss größer als die Untergrenze sein!"); else bMax = true; } Console.WriteLine("\n\nUntergrenze: " + min + " Obergrenze: " + max + "\nWollen Sie diese Grenzen benutzen? y/n"); if (Console.ReadLine() == "y") bothLimits = true; Console.Clear(); } Console.WriteLine("Bitte erraten Sie die gesuchte Zahl!\n\nDie Grenzen sind " + min + " und " + max); bool won = false; int RandomInt = 0; Random rnd = new Random(); RandomInt = rnd.Next(min, max); int iTrys = 0; List<int> trys = new List<int>(); while (!won) { if (iTrys < 10) Console.Write("Das ist Ihr 0" + iTrys + ". Versuch: "); else Console.Write("Das ist Ihr " + iTrys + ". Versuch: "); int Try = 0; if (!Int32.TryParse(Console.ReadLine(), out Try)) Console.WriteLine("Falsche Eingabe!"); else if (trys.Contains(Try)) { Console.WriteLine("Mit dieser Zahl haben sie es Bereits versucht!"); iTrys++; } else if (Try < min || Try > max) Console.WriteLine("Ihre Eingabe ist nicht innherhalb der Grenzen!\nDie Grenzen sind " + min + " und " + max); else if (Try != RandomInt) { Console.WriteLine("Leider nicht richtig!"); trys.Add(Try); iTrys++; } else won = true; } Console.WriteLine("Glückwunsch! Die gesuchte Zahl war: " + RandomInt + "\nSie haben " + iTrys++ + " Versuche gebraucht!\n\nWollen sie das Programm beenden? y/n"); if (Console.ReadLine() == "y") end = true; } } } }