"illegal start of type" eindimensionales Schiffe versenken

Hey, hab mal wieder ein paar Probleme mit meienr Hausaufgabe. Meine Hausaufgabe ist es ein eindimensionales Schiffe versenken zu erstellen.
Das Spiel besteht aus einer Linie oder einem Feld von 25 Einheiten. jedes Feld wird dabei als ein Punkt gezeigt (.........................). Auf diesem Feld sollen dann 2 Schiffe sein, eins in der größe von 5 einheiten und das andere mit einer größe von 3 einheiten.
Bei einem unbekannten Feld soll ein Punkt gezeigt werden
Bei einem Fehlschuss ein Minus Zeichen
Bei einem Treffer ein X.

Und nach jedem Zug soll den Spielern das aktuelle Feld und der Stand angezeigt werden.
Java:
// Eindimensionales "Schiffe versenken"-Spiel
// Name: 

import java.util.Random;
import java.util.Scanner;

public class Schiffe {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		Random rgen = new Random();
		// Random rgen = new Random(0);

		// Spielfeld: 25 Kaestchen
		final int groesse = 25;
		int feld[] = new int[groesse];
			// Bedeutung der Werte im Spielfeld:
			// 0: Wasser - noch nicht beschossen
			// 1: Schiff - noch nicht beschossen
			// 2: Wasser - Spieler weiss, das leer
			// 3: Schiff - schon getroffen

		// Position des Schlachtschiffes (5 Kaestchen breit):
		int schlachtschiff = rgen.nextInt(groesse - 4);
			// Startposition bei 0 bis 20
		feld[schlachtschiff+0] = 1;
		feld[schlachtschiff+1] = 1;
		feld[schlachtschiff+2] = 1;
		feld[schlachtschiff+3] = 1;
		feld[schlachtschiff+4] = 1;

		// Position des Zerstoerers (3 Kaestchen breit)
		int min = 0;
		int max = groesse - 3;
		if(schlachtschiff <= 3)
			min = schlachtschiff + 6;
			// Passt nicht mehr davor
		else if(schlachtschiff >= groesse - 8)
			// Passt nicht mehr dahinter
			max = schlachtschiff - 4;
		else if(rgen.nextInt(2) == 0)
			// Zufallsentscheidung davor/dahinter
			min = schlachtschiff + 6;
		else
			max = schlachtschiff - 4;
		int zerstoerer = min + rgen.nextInt(max - min + 1);
		feld[zerstoerer+0] = 1;
		feld[zerstoerer+1] = 1;
		feld[zerstoerer+2] = 1;

		// Ab hier Ihr Programm:
		// Die Testausgabe koennen Sie loeschen:

		}

		int zuege =0;
		int treffer=0;
		while (zuege < feld.length) {
			System.out.print("Bitte Zahl von 0 bis 24 eingeben ");
			int n = scan.nextInt();
			if (n>=feld.length||n<0)) {
				System.out.println ("Fehler");
			} 
			else {
				if (feld[n]==0) {
					feld[n]=2;
				}
				else if (feld[n]==1) {
					feld[n]=3;
					treffer++;
				}				
				else {
				System.out.println("ueberflüssig");
				}
			}
			for (int i=0;i<feld.length;i++) {
				if (feld[i]==0||feld[i]==1) {
					System.out.print(".");
				}
				else if (feld[i]==2) {
					System.out.print("-");
				}
				else if (feld[i]==3) {
				System.out.print("X");
				}
			}
		
			zuege++;
			if (treffer ==8) {
				System.out.println();
				System.out.println ("Gewonnen in " + zuege + " Zuegen.");
			}
			System.out.println();
		}
		System.out.println();
	}
}

Meines erachtens nach sollte bis Zeile 48 alles richtig sein, da dass schon vorgegeben war.
Wenn ich das jetzt so compiliere, dann kommen allerdings so um die 40 Fehlermeldungen, wobei ich die wenisten verstehe (z.B. Schiffe.java:57: error: illegal start of type
while (zuege < feld.length) { )

Hoffe mir kann hier jemand aushelfen?
 

rme

Top Contributor
Wenn ich das auf einen schnellen Blick richtig sehe, hast du deinen Code hinter die schließende, geschweifte Klammer der main-Methode (Zeile 54) gesetzt, sodass der Code außerhalb einer Methode steht, was illegal ist.

Edit: Vermutlich stand da vorher noch eine Schleife oder so ("Testausgabe") und davon hast du die schließende Klammer nicht gelöscht. Davon gehe ich aus, weil weiter unten noch die tatsächliche Klammer schließt, die zu main gehört - die Klammer in Zeile 54 beendet main also unabsichtlich.
 
Zuletzt bearbeitet:
okay so weit so gut, das Grobe läuft erstmal :) Allerdings habe ich noch 2 probleme bei denen ich nicht ganz weiter weiß. Wenn das Programm mir sagt dass ich eine zahl von 1-24 wählen soll und ich 1 drücke, dann "schießt" er auf Feld 2, wahrscheinlich weil die 1 bei dem Programm bei 0 anfängt. Mir fehlt allerdings die idee wie ich dem Programm jetzt verständlich mache das mit 1 auch 1 gemeint ist und nicht 0 :D

Und das zweite ist, Sobald alle Schiffe versenkt sind sollte mir das Programm sagenmit wie vielen zügen ich gewonnen habe. das Programm endet aber grundsätzlich erst, wenn alle Felder beschossen wurden. In der while Schleife steht es ja drinnen, also wüsste ich jetzt nicht wo der fehler liegt.

Java:
// Eindimensionales "Schiffe versenken"-Spiel
// Name: 

import java.util.Random;
import java.util.Scanner;

public class Schiffe {
	public static void main(String[] args) {
		Scanner scan = new Scanner(System.in);
		Random rgen = new Random(0);
		// Random rgen = new Random(0);

		// Spielfeld: 25 Kaestchen
		final int groesse = 25;
		int feld[] = new int[groesse];
			// Bedeutung der Werte im Spielfeld:
			// 0: Wasser - noch nicht beschossen
			// 1: Schiff - noch nicht beschossen
			// 2: Wasser - Spieler weiss, das leer
			// 3: Schiff - schon getroffen

		// Position des Schlachtschiffes (5 Kaestchen breit):
		int schlachtschiff = rgen.nextInt(groesse - 4);
			// Startposition bei 0 bis 20
		feld[schlachtschiff+0] = 1;
		feld[schlachtschiff+1] = 1;
		feld[schlachtschiff+2] = 1;
		feld[schlachtschiff+3] = 1;
		feld[schlachtschiff+4] = 1;

		// Position des Zerstoerers (3 Kaestchen breit)
		int min = 0;
		int max = groesse - 3;
		if(schlachtschiff <= 3)
			min = schlachtschiff + 6;
			// Passt nicht mehr davor
		else if(schlachtschiff >= groesse - 8)
			// Passt nicht mehr dahinter
			max = schlachtschiff - 4;
		else if(rgen.nextInt(2) == 0)
			// Zufallsentscheidung davor/dahinter
			min = schlachtschiff + 6;
		else
			max = schlachtschiff - 4;
		int zerstoerer = min + rgen.nextInt(max - min + 1);
		feld[zerstoerer+0] = 1;
		feld[zerstoerer+1] = 1;
		feld[zerstoerer+2] = 1;

		// Ab hier Ihr Programm:
		// Die Testausgabe koennen Sie loeschen:

		

		int zuege =0;
		int treffer=0;
		while (zuege < feld.length) {
			System.out.print("Bitte Zahl von 0 bis 24 eingeben ");
			int n = scan.nextInt();
			if (n>=feld.length||n<0) {
				System.out.println ("Fehler");
			} 
			else {
				if (feld[n]==0) {
					feld[n]=2;
				}
				else if (feld[n]==1) {
					feld[n]=3;
					treffer++;
				}				
				else {
				System.out.println("ueberflüssig");
				}
			}
			for (int i=0;i<feld.length;i++) {
				if (feld[i]==0||feld[i]==1) {
					System.out.print(".");
				}
				else if (feld[i]==2) {
					System.out.print("-");
				}
				else if (feld[i]==3) {
				System.out.print("X");
				}
			}
		
			zuege++;
			if (treffer ==8) {
				System.out.println();
				System.out.println ("Gewonnen in " + zuege + " Zuegen.");
			}
			System.out.println();
		}
		System.out.println();
	}
}
 
Zuletzt bearbeitet:

rme

Top Contributor
Zu Problem 2: Du könntest die Bedingung der while-Schleife ja erweitern, dass sie so lange läuft, wie es noch freie Felder gibt oder noch nicht 8 Treffer gibt. Dann könntest du die Auswertung, ob gewonnen oder verloren wurde, nach der Schleife machen, indem du prüfst, ob es 8 Treffer gab.

Problem 1 habe ich nicht genau verstanden. Das Programm fordert auf, eine Zahl zwischen 0 und 24 einzugeben; du erwähnst aber, dass er zwischen 1 und 24 wählen soll? Momentan müsste es so sein, dass die Eingabe "1" Feld Nummer 2 beschießt, richtig? Das liegt daran, dass Feld 1 den Index 0 hat. Du könntest ja nun von der Eingabe den Wert 1 abziehen, um diese Differenz auszugleichen. Dann sollte der Benutzer aber nicht mehr aufgefordert werden, eine Zahl zwischen 0 und 24 sondern zwischen 1 und 25 einzugeben ;)
 
alles klar hat alles bestens funktioniert. Habe zur Eingabe einfach -1 gerechnet wie du gesagt hast und die while Schleife habe ich mit break; beendet.

Besten Dank!
 

VfL_Freak

Top Contributor
Moin,

wahrscheinlich weil die 1 bei dem Programm bei 0 anfängt.
Na, DAS ist doch mal 'ne Aussage :lol:

Was Du wahrscheinlich meinst, ist, dass Dein Array-Index von "0 - (Länge-1)" läuft.
Wenn also '1' eingibst (bei Dir auf 'n') und dann auf "feld[n]" ansprichst, ist dies also der zweite Wert im Array!!
Also ziehst Du entweder von eingegeben Wert '1' ab (was ich aber wegen der Übersichtlichkeit nicht empfehlen würde) oder Du greifst halt auf "feld[n-1]" zu .....

zu (2): habe es jetzt auf die Schnelle nicht nachvollziehen können, aber Dein Vergleich "if (treffer ==8)" wird fehlschlagen. Gibt doch vorher in jedem Durchlauf den Wert in der Konsole aus !

Gruß
Klaus
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
L Illegal Start of Type, wie finde ich den fehler Java Basics - Anfänger-Themen 4
P BlueJ Fehlermeldung - Illegal Start of Type Java Basics - Anfänger-Themen 8
richrich99 error: illegal start of expression Java Basics - Anfänger-Themen 10
J Compiler-Fehler Illegal Start of expression / '/'expected Java Basics - Anfänger-Themen 3
T Not a Statement/Illegal Start of expression bei for Anweisung Java Basics - Anfänger-Themen 6
P ,,Illegal start of expression,, Java Basics - Anfänger-Themen 3
S Compiler-Fehler illegal start of expression Java Basics - Anfänger-Themen 4
P illegal start of expression wie löse ich das? Java Basics - Anfänger-Themen 2
O Methoden Fehlermeldung(Illegal start of expression) bei 4-Gewinnt-Spiel Java Basics - Anfänger-Themen 5
R illegal start of expression - 3 Strings vergleichen mit .equals () Java Basics - Anfänger-Themen 5
X Compiler-Fehler illegal start of expression Java Basics - Anfänger-Themen 9
P Illegal start of expression Java Basics - Anfänger-Themen 8
O Illegal start of expression Java Basics - Anfänger-Themen 3
L Illegal start of expression? Java Basics - Anfänger-Themen 4
R GUI mit if-Verzweigung kombiniert - Illegal start of expression (Dringend) Java Basics - Anfänger-Themen 7
S Illegal Start? Java Basics - Anfänger-Themen 4
S illegal start of expression Java Basics - Anfänger-Themen 2
M [Hibernate] "Illegal start of expression"-Fehler b Java Basics - Anfänger-Themen 2
D "Illegal Start of Expression" und "; expected Java Basics - Anfänger-Themen 3
G Immer wieder illegal start of expression Java Basics - Anfänger-Themen 15
G Blue J - Fehlermeldung - identifier expected - illegal start Java Basics - Anfänger-Themen 6
E illegal start of expression Java Basics - Anfänger-Themen 4
S private String text; -> "Illegal start of expression Java Basics - Anfänger-Themen 7
B illegal start of expression Java Basics - Anfänger-Themen 6
S illegal start of expression Java Basics - Anfänger-Themen 2
L illegal start of expression? Java Basics - Anfänger-Themen 19
F Einem Array Werte zuweisen. (illegal start of expression) Java Basics - Anfänger-Themen 4
J Fehlersuche - illegal start of expression Java Basics - Anfänger-Themen 3
D Illegal start of expression - nur warum ? Java Basics - Anfänger-Themen 3
T Methodenerror:"Illegal start of expression" Java Basics - Anfänger-Themen 7
K Regex: illegal character range Java Basics - Anfänger-Themen 4
K illegal starts of expression Java Basics - Anfänger-Themen 2
R AES Key 256 Illegal Key Size auch bei Änderung der Policy Java Basics - Anfänger-Themen 3
O Illegal Group Reference Java Basics - Anfänger-Themen 4
B Wieso ein Fehler? illegal Starts of expression? Java Basics - Anfänger-Themen 12
H Exception: illegal component position Java Basics - Anfänger-Themen 5
M Illegal Escape Character und keine Darstellung? Java Basics - Anfänger-Themen 7
G Fehler: Illegal Expression. Was mache ich falsch? Java Basics - Anfänger-Themen 4
Hilde22 Neu Start JButton einfügen Java Basics - Anfänger-Themen 2
J Beim Start des Programms zB. eine Linie in JPanel ausgeben Java Basics - Anfänger-Themen 4
B Quiz mit RMI Probleme mit RMI start Java Basics - Anfänger-Themen 4
Z Mehtode bei Start des Programms ausführen (Klassen übergreifend) Java Basics - Anfänger-Themen 12
T Start-Activity für Java Maven Web-Anwendung festlegen Java Basics - Anfänger-Themen 2
J Can't start eclipse Java Basics - Anfänger-Themen 5
D Neuer Start- und Endpunkt kann nur an bereits vorhandenen Start- oder Endpunkt anliegen Java Basics - Anfänger-Themen 2
C NoClassDefFoundError mit externer Jar bei Start aus Eclipse Java Basics - Anfänger-Themen 3
B Schleife von anderer Methode stoppen? (Start continue) Java Basics - Anfänger-Themen 18
J Problem bei seriellem Start von Threads Java Basics - Anfänger-Themen 11
N Passwort Anfrage vor Programm start Java Basics - Anfänger-Themen 1
S Fehler: Hauptklasse bin.demo.Start konnte nicht gefunden oder geladen werden Java Basics - Anfänger-Themen 2
S Methoden Beim Start meines Projektes eine Methode ausführen Java Basics - Anfänger-Themen 14
S Dataflow von Start bis die SystemProperties class Java Basics - Anfänger-Themen 1
M Erste Schritte Start Methode - Exception Java Basics - Anfänger-Themen 1
S Caesar Verschlüsselung Start Hilfe Java Basics - Anfänger-Themen 4
thet1983 start & paint Methode? Java Basics - Anfänger-Themen 0
S Class File Editor gibt beim Start der Programms die Fehlermeldung Source not found aus Java Basics - Anfänger-Themen 1
S JProgressbar mit individuellem Start/Endpunkt Java Basics - Anfänger-Themen 11
OnDemand Berechnung in die start und paint Methode eines Applets Java Basics - Anfänger-Themen 28
Dogge Start:Applet nicht Initialisiert Java Basics - Anfänger-Themen 11
V Start ins Java Game Development Java Basics - Anfänger-Themen 22
M Erster JAR Start überprüfen Java Basics - Anfänger-Themen 6
E Program Start Java Basics - Anfänger-Themen 2
B Threads Interrupt und start Java Basics - Anfänger-Themen 2
E Program Start Java Basics - Anfänger-Themen 2
J JDK installieren JCreator erkennt JDK nicht. "Failed to start the following executable" Java Basics - Anfänger-Themen 3
T Java Applet braucht mehrere Minuten zu Start Java Basics - Anfänger-Themen 5
M Beim Start Methode laden die Textfelder füllt Java Basics - Anfänger-Themen 5
M Bei *.jar start kompletten String übergeben Java Basics - Anfänger-Themen 7
S Java Web Start lädt keine Bilder Java Basics - Anfänger-Themen 2
M Mehrere Threads nutzen --> run() schneller als start(), Warum? Java Basics - Anfänger-Themen 3
D Start- + Stopzeit Java Basics - Anfänger-Themen 7
J start(); bei bluej Java Basics - Anfänger-Themen 3
T Datenbank automatisch erzeugen beim ersten Start Java Basics - Anfänger-Themen 6
M Java-web-start weg? Java Basics - Anfänger-Themen 2
D OOP Applet-Start Fehler Java Basics - Anfänger-Themen 2
Semox Fehler in Eclipse vor Start eines Applets anzeigen? Java Basics - Anfänger-Themen 2
F Richtiger Start in Java? Java Basics - Anfänger-Themen 2
S Start einer Applikation Java Basics - Anfänger-Themen 10
B Applet: Event-Handling-Methode in start- bzw. paint-Methode Java Basics - Anfänger-Themen 7
G Applet - Methode start() wird nicht aufgerufen Java Basics - Anfänger-Themen 2
G Java beim Start ausführen Java Basics - Anfänger-Themen 2
A Start über Konsole nicht möglich Java Basics - Anfänger-Themen 4
M Zeitdifferenz von Ende - sleep(x) - Start von x abhängig Java Basics - Anfänger-Themen 6
A Integer Value Error beim Start Java Basics - Anfänger-Themen 5
J Start mit .exe-Datei oder Desktop-Symbol möglich? Java Basics - Anfänger-Themen 12
A Methoden am start ausführen Java Basics - Anfänger-Themen 6
G Problem: Start: Applet nicht initialisiert Java Basics - Anfänger-Themen 4
G Start Java Basics - Anfänger-Themen 9
K JavaKara Programm - erfolgreich compiliert jedoch kein Start Java Basics - Anfänger-Themen 12
G nach Thread.start(); nochmal start(); aufrufen geht nicht Java Basics - Anfänger-Themen 4
F JFrame bei Start von Application öffnen Java Basics - Anfänger-Themen 15
L toggle button reagiert nicht mehr nach while-start Java Basics - Anfänger-Themen 8
B Dateien laden beim Start Java Basics - Anfänger-Themen 7
G start-oder paint-Methode anstatt Event-Handling-Methode? Java Basics - Anfänger-Themen 3
N Problem beim Start von java-progs Java Basics - Anfänger-Themen 4
S Bilder gleich am Start zeichnen. Java Basics - Anfänger-Themen 15
C itemStateChanged beim Start aufrufen? Java Basics - Anfänger-Themen 9
W Start-Probleme mit externen Bibliotheken / JAR-Bildung Java Basics - Anfänger-Themen 2
W Java Web Start das richtige? Java Basics - Anfänger-Themen 11
Y Applet start probleme Java Basics - Anfänger-Themen 2

Ähnliche Java Themen

Neue Themen


Oben