Ahoi,
Ich arbeite mich gerade durch das Buch Java von Kopf bis Fuß. Ich habe den Code für die Deluxe Variante des DotCom Spiels nach mehrmaligem Überarbeiten haargenau (bis auf kleine Abänderungen im System.out.println-Bereich) so wie im Buch. Der Code lässt sich auch brav komplieren aber irgendetwas stimmt trotzdem nicht. Sobald ich den Code ausführe fordert mich das Spiel wie erwartet auf eine Zelle auszuwählen. Sobald ich aber etwas eingebe springt der Code nur in die nächste Zeile ohne mir ein Ergebnis zu liefern, geschweige denn eine Fehlermeldung. Es sieht so aus als würde das Programm in irgendeiner Schleife feststecken.
Anbei meine 3 Klassen SpielHelfer, DotCom und DotComVersenken.
'Tschuldige für die lange Codewüste und damit den ellenlangen Post, gäbe es eine Möglichkeit das irgendwie zu kürzen hätt ich's getan :/
Danke für alle Antworten schonmal im Voraus!
Ich arbeite mich gerade durch das Buch Java von Kopf bis Fuß. Ich habe den Code für die Deluxe Variante des DotCom Spiels nach mehrmaligem Überarbeiten haargenau (bis auf kleine Abänderungen im System.out.println-Bereich) so wie im Buch. Der Code lässt sich auch brav komplieren aber irgendetwas stimmt trotzdem nicht. Sobald ich den Code ausführe fordert mich das Spiel wie erwartet auf eine Zelle auszuwählen. Sobald ich aber etwas eingebe springt der Code nur in die nächste Zeile ohne mir ein Ergebnis zu liefern, geschweige denn eine Fehlermeldung. Es sieht so aus als würde das Programm in irgendeiner Schleife feststecken.
Anbei meine 3 Klassen SpielHelfer, DotCom und DotComVersenken.
Java:
import java.io.*;
import java.util.*;
public class SpielHelfer {
private static final String alphabet = "abcdefg";
private int rasterLänge = 7;
private int rasterGröße = 49;
private int [] raster = new int[rasterGröße];
private int dotComAnzahl = 0;
public String getBenutzereingabe(String prompt){
String eingabeZeile = null;
System.out.println(prompt + " ");
try{
BufferedReader is = new BufferedReader(new InputStreamReader(System.in));
eingabeZeile = is.readLine();
if(eingabeZeile.length() == 0){
return null;
}
}catch (IOException e) {
System.out.println("IOException: " + e);
}
return eingabeZeile.toLowerCase();
}
public ArrayList<String> platziereDotCom(int dotComGröße){
ArrayList<String> alphaZellen = new ArrayList<String>();
String temp = null;
int[] koordinaten = new int[dotComGröße];
int versuche = 0;
boolean erfolg = false;
int ort = 0;
dotComAnzahl++;
int inkrement = 1;
if((dotComAnzahl % 2) ==1){
inkrement = rasterLänge;
}
while(!erfolg & versuche++ <200){
ort = (int) (Math.random() * rasterGröße);
int x = 0;
erfolg = true;
while (erfolg && x <dotComGröße){
if (raster[ort] == 0){
koordinaten[x++] = ort;
ort += inkrement;
if (ort >= rasterGröße){
erfolg = false;
}
if (x>0 & (ort % rasterLänge == 0)){
erfolg = false;
}else{ erfolg = false;
}
}
}
}
int x = 0;
int zeile = 0;
int spalte = 0;
while(x <dotComGröße){
raster[koordinaten[x]] = 1;
zeile = (int) (koordinaten[x] / rasterLänge);
spalte = koordinaten[x] % rasterLänge;
temp = String.valueOf(alphabet.charAt(spalte));
alphaZellen.add(temp.concat(Integer.toString(zeile)));
x++;
}
return alphaZellen;
}
}
Java:
import java.util.ArrayList;
public class dotComVersenken {
private SpielHelfer helfer = new SpielHelfer();
private ArrayList<DotCom> dotComListe = new ArrayList<DotCom>();
private int anzahlVersuche = 0;
public void spielEinrichten(){
DotCom eins = new DotCom();
eins.setName("Haustiere.com");
DotCom zwei = new DotCom();
zwei.setName("BioWare.com");
DotCom drei = new DotCom();
drei.setName("FragMich.com");
dotComListe.add(eins);
dotComListe.add(zwei);
dotComListe.add(drei);
System.out.println("Ihre Aufgabe ist es 3 Dot-Coms zu versenken.");
System.out.println("Haustiere.com, BioWare.comm FragMich.com");
System.out.println("Versuchen Sie es mit so wenig Versuchen wie möglich, Viel Glück");
for(DotCom aktuellesDotCom : dotComListe){
ArrayList<String> neuerOrt = helfer.platziereDotCom(3);
aktuellesDotCom.setZellorte(neuerOrt);
}
}
public void beginneSpiel(){
while(!dotComListe.isEmpty()){
String rateversuch = helfer.getBenutzereingabe("Geben Sie einen Rateversuch ein");
prüfeRateversuch(rateversuch);
}
beendeSpiel();
}
public void prüfeRateversuch(String rateversuch){
anzahlVersuche++;
String ergebnis = "Vorbei!";
for(DotCom aktuellesDotCom: dotComListe){
ergebnis = aktuellesDotCom.prüfDich(rateversuch);
if(ergebnis.equals("Treffer")){
break;
}
if(ergebnis.equals("Versenkt")){
dotComListe.remove(aktuellesDotCom);
break;
}
}
System.out.println(ergebnis);
}
public void beendeSpiel(){
System.out.println("Alle Dot-Coms sind versenkt!");
if(anzahlVersuche <= 18){
System.out.println("Sie haben nur "+ anzahlVersuche +" Versuche benötigt");
}else{
System.out.println("Hat ja lange gedauert."+"Nach "+anzahlVersuche+" haben Sie es geschafft.");
}
}
public static void main(String args[]){
dotComVersenken spiel = new dotComVersenken();
spiel.spielEinrichten();
spiel.beginneSpiel();
}
}
Java:
import java.util.ArrayList;
public class DotCom {
private ArrayList<String> zellorte;
private String name;
public void setZellorte(ArrayList<String> orte){
zellorte = orte;
}
public void setName(String n){
name = n;
}
public String prüfDich(String benutzereingabe){
String ergebnis = "Vorbei";
int index = zellorte.indexOf(benutzereingabe);
if (index >= 0) {
zellorte.remove(index);
if(zellorte.isEmpty()){
ergebnis = "Versenkt";
System.out.println("Sie haben " + name + " versenkt.");
} else {
ergebnis = "Treffer";
} //if
} //if
return ergebnis;
}
}
'Tschuldige für die lange Codewüste und damit den ellenlangen Post, gäbe es eine Möglichkeit das irgendwie zu kürzen hätt ich's getan :/
Danke für alle Antworten schonmal im Voraus!
Zuletzt bearbeitet von einem Moderator: