Barra Sargtlin
Grünschnabel
Hallo allesamt,
ich hab vor ein paar Tagen mit OO Programmierung bzw Java angefangen und bin dabei Schiffeversinken zu en. Leider hab ich ein Problem mit dem array feld_comp was sich in der gleichnamigen klasse befindet, in der funtkion abfrage. irgentwie kriege ich immer ein NullPointerException. Die variable ist privat und in allen anderen funktionen dieser klasse auch gefüllt, nur in dieser einzigen nicht... bitte um hilfe bzw erklärung.
ich hab vor ein paar Tagen mit OO Programmierung bzw Java angefangen und bin dabei Schiffeversinken zu en. Leider hab ich ein Problem mit dem array feld_comp was sich in der gleichnamigen klasse befindet, in der funtkion abfrage. irgentwie kriege ich immer ein NullPointerException. Die variable ist privat und in allen anderen funktionen dieser klasse auch gefüllt, nur in dieser einzigen nicht... bitte um hilfe bzw erklärung.
Java:
package Schiffeversenken;
import java.io.*;
public class Main{
public static void main(String[] args) throws IOException{
System.out.println("Lass uns eine Runde Schiffeversenken spielen :-) \nWie groß soll denn das Gewässer sein ?");
Controller start = new Controller();
start.Felder_abfrage();
start.Felder_erstellen();
start.Schiffe_setzen();
System.out.println("Lass uns nun beginnen...");
for (int i=0; i<4; i++){
start.Zug();
start.Feld_anzeige();
}
}
}
Java:
package Schiffeversenken;
import java.io.*;
class Controller{
private int felder_width, felder_long, x, y;
private Feld_user feld_user = new Feld_user();
private Feld_comp feld_comp = new Feld_comp();
public void Felder_abfrage () throws IOException{
BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
while (this.felder_width < 10 || this.felder_long < 10){
System.out.print("Größe (mind. 10) = ");
this.felder_width = Integer.parseInt(eingabe.readLine());
this.felder_long = this.felder_width;
}
}
public void Felder_erstellen (){
this.feld_user.Erstellen(this.felder_width, this.felder_long);
this.feld_comp.Erstellen(this.felder_width, this.felder_long);
}
public void Schiffe_setzen (){
this.feld_comp.Schiff_auswahl();
System.out.println("\nOk ich hab meine Schiffe gesetzt.");
}
public void Zug() throws IOException{
BufferedReader eingabe = new BufferedReader(new InputStreamReader(System.in));
System.out.print("\nKoordinate x = ");
this.x = Integer.parseInt(eingabe.readLine());
System.out.print("Koordinate y = ");
this.y = Integer.parseInt(eingabe.readLine());
System.out.println(feld_user.Zug(this.x, this.y));
}
public void Feld_anzeige (){
this.feld_user.Anzeige();
}
}
Java:
package Schiffeversenken;
class Feld_user{
private String[][] feld_user;
private Feld_comp feld_comp = new Feld_comp();
private int feld_width, feld_long;
public void Erstellen (int feld_width, int feld_long){
this.feld_user = new String[feld_width][feld_long];
this.feld_width = feld_width;
this.feld_long = feld_long;
for (int vert=0; vert<this.feld_width; vert++){
for (int hori=0; hori<this.feld_long; hori++){
this.feld_user[hori][vert] = " ";
}
}
}
public String Zug (int x, int y){
if (x>0 && y>0 && x<this.feld_width && y<this.feld_long){
String testa = this.feld_comp.Abfrage(x, y);
if (testa.equals("1")){
this.feld_user[x][y] = "1";
return "Treffer !";
}
else if (testa.equals("1")){
this.feld_user[x][y] = "0";
return "Daneben...";
}
else{
return "Error - Feld nicht gefüllt";
}
}
else{
return "Außerhalb der Gewässer...";
}
}
public void Anzeige (){
System.out.print("x: ");
for (int hori=0; hori<this.feld_width; hori++){
System.out.print(hori + " ");
}
System.out.println();
System.out.print("y:|-");
for (int hori=0; hori<this.feld_width; hori++){
System.out.print("--");
}
System.out.println();
for (int vert=0; vert<this.feld_width; vert++){
System.out.print(vert + ".| ");
for (int hori=0; hori<this.feld_long; hori++){
System.out.print(this.feld_user[hori][vert] + " ");
}
System.out.println();
}
}
}
Java:
package Schiffeversenken;
public class Feld_comp{
private String[][] feld_comp;
private Schiffe schiffe = new Schiffe();
private int feld_width, feld_long;
public void Erstellen (int feld_width, int feld_long){
this.feld_comp = new String[feld_width][feld_long];
this.feld_width = feld_width;
this.feld_long = feld_long;
for (int vert=0; vert<this.feld_width; vert++){
for (int hori=0; hori<this.feld_long; hori++){
this.feld_comp[hori][vert] = "0";
}
}
}
public void Schiff_auswahl (){
Schiff_setzen( this.schiffe.Zise("schlachter"));
}
public void Schiff_setzen (int schiff_zise){
boolean ergebnis = false;
while (ergebnis == false){
// zufällige koords setzen
int pos_x = (int)Math.floor(Math.random()*this.feld_width);
int pos_y = (int)Math.floor(Math.random()*this.feld_long);
int richtungen = 1;
// neue richtung des punktes (gesamt 4)
while (ergebnis == false){
// überschreitung des punktes
if ( (pos_x+schiff_zise) <= this.feld_width){
// prüfen ob auf dem feld schon ein schiff gesetzt wurde
for (int j=0; j < schiff_zise; j++){
if (this.feld_comp[pos_x+j][pos_y].equals("1")){
break;
}
else if (j == (schiff_zise-1)){
for (int k=0; k < schiff_zise; k++){
this.feld_comp[pos_x+k][pos_y] = "1";
System.out.println( "oNe = " + (pos_x+k) + " " + pos_y);
}
ergebnis = true;
}
}
}
richtungen++;
if (richtungen == 4){
ergebnis = true;
}
}
}
}
public String Abfrage (int x, int y){
if (this.feld_comp == null){
return "OMG";
}
return this.feld_comp[x-1][y-1];
}
}
Java:
package Schiffeversenken;
public class Schiffe
{
public int Zise (String typ)
{
int zise;
if (typ.equals("schlachter")) {zise = 5;} // *1
else if (typ.equals("zerstörer")) {zise = 4;} // *2
else if (typ.equals("kreuzer")) {zise = 3;} // *3
else if (typ.equals("u-boote")) {zise = 2;} // *4
else if (typ.equals("sprinter")) {zise = 1;} // *1
else {zise = 0;}
return zise;
}
}
Zuletzt bearbeitet: