Schiffe Versenken Hausaufgabe

Sumpfmaus

Mitglied
Hallo.
Ich soll das Spiel Schiffeversenken als Hausaufgabe programmieren, also ohne grafische Oberfläche. Soll alles in der Konsole ausgegeben werden.
Es sollen jetzt für die Zeile in der man angreifen will, Buchstaben eingelesen werden. Diese sind ja vom Typ String. Dann habe ich in der Switchanweisung versucht die Buchstaben in int umzuwandeln. Jetzt möchte ich die entstandenen Int werte dazu einsetzten das entsprechende Array aufzurufen.
Jedoch komme ich nicht dazu zu testen ob das funktioniert, da ich die Fehlermeldung bekomme, dass die variable zeile nicht initialisiert wurde, was ja eigentlich der Fall ist.
ich weiß einfach nicht was ich falsch mache.
ich bin noch Anfängerin und habe mich bis vor ein paar Wochen noch nie mit dem Thema beschäftigt.
Ich hoffe ihr könnt mir helfen :)

Hier ein Ausschnitt meines Programms:
Java:
public static void attack() {
Scanner s = new Scanner(System.in);

  int spalte;
  String ergebnis;
  String buchstabe;
  int zeile;

  System.out.println("Bitte geben Sie eine Zeile an, die Sie angreifen wollen:");
  /* scannt einen Int Wert als zeile ein*/
  buchstabe = s.next();

  System.out.println("Bitte geben Sie eine Spalte an, die Sie angreifen wollen:");
  /* scannt einen Int Wert als spalte ein */
  spalte = s.nextInt();

  System.out.println("Was sagt ihr Gegner getroffen oder daneben:");
  /*scannt einen String als ergebnis ein*/
  ergebnis = s.next();

  switch (buchstabe.charAt(0)) {
  case 'A':
  zeile = 0;
  break;
  case 'B':
  zeile = 1;
  break;
  case 'C':
  zeile = 2;
  break;
  case 'D':
  zeile = 3;
  break;
  case 'E':
  zeile = 4;
  break;
  case 'F':
  zeile = 5;
  break;
  case 'G':
  zeile = 6;
  break;
  case 'H':
  zeile = 7;
  break;
  case 'I':
  zeile = 8;
  break;
  case 'J':
  zeile = 9;
  break;
  }

  /* solange das eingescannte Ergebnis "getroffen" lautet, wird ein X in das Array gesetzt.
  Wenn man den Gegner getroffen hat,
  wird die while schleife durchgeführt und man darf erneut angreifen,
  bis man nicht mehr trifft, dann wird die Schleife beendet.
  Fuer daneben wird '0' in das Array feind gesetzt*/

  while (ergebnis.equals("getroffen")) {
  feind[zeile][spalte] = 'X';
  print(feind);
  System.out.println("Sie haben getroffen!!!Nochmal angreifen:");
  System.out.println("Bitte geben sie eine Zeile an, die Sie angreifen wollen:");
  buchstabe = s.next();
  System.out.println("Bitte geben sie eine Spalte an, die Sie angreifen wollen:");
  spalte = s.nextInt();
  System.out.println("Was sagt ihr Gegner getroffen oder daneben:");
  ergebnis = s.next();
  }

  /* wenn das eingescannte Ergebnis daneben lautet,
  wird in der Zeile und Spalte die man angreift eine 0 gesetzt.
  Im Anschluss wird das Spielfeld des Gegners ausgegeben.*/
  if (ergebnis.equals("daneben")) {
  feind[zeile][spalte] = '0';
  System.out.println("Sie haben nicht getroffen!! Ihr Gegner ist an der Reihe.");
  print(feind);
  /* wenn das Ergebnis weder daneben noch getroffen lautet wird ausgegeben,
  dass die Eingabe ungueltig ist */
  } else {
  System.out.println("Eingabe ungueltig!");
  }
  }
 
Zuletzt bearbeitet von einem Moderator:

Dompteur

Top Contributor
Na ja, für den Fall, dass du bei Buchstabe ein "X" eingibst, wäre zeile tatsächlich nicht initialisiert.
Am einfachsten löst du dein Problem, wenn du zeile vor dem Switch mit 0 initialisiert. Außerdem wäre eine Prüfung, ob die Eingabe richtig ist, nicht falsch.

Deine Umwandlung Buchstabe in Zahl kannst du übrigens auch einfacher umsetzen:
Java:
zeile = buchstabe.charAt(0) - 'A';
 

Paeonia2015

Mitglied
hallo erstmal, so ich muss auch die gleiche aufgabe machen und hab das jetzt mit diesem charAt durchgeführt, bei mir erscheint aber immer 1 error cannot find symbol buchstabe = s.next();
ich habe buchstabe doch definiert wieso fndet er es aber nicht, könt ihr mir bitte helfen? Im so lost.
Java:
public static void attack(Scanner s) {
  String treffer;
  int  spalte,zeile;
     String buchstabe = "ABCDEFGHIJ";
     zeile = 0;
      zeile = buchstabe.charAt(0) ;
      zeile = buchstabe.charAt(1) ;
      zeile = buchstabe.charAt(2) ;
      zeile = buchstabe.charAt(3) ;
      zeile = buchstabe.charAt(4) ;
      zeile = buchstabe.charAt(5) ;
      zeile = buchstabe.charAt(6) ;
      zeile = buchstabe.charAt(7) ;
     zeile = buchstabe.charAt(8) ;
      zeile = buchstabe.charAt(9) ;
  
     switch (buchstabe.charAt(0)) {
case 'A':
zeile = 0;
break;
case 'B':
zeile = 1;
break;
case 'C':
zeile = 2;
break;
case 'D':
zeile = 3;
break;
case 'E':
zeile = 4;
break;
case 'F':
zeile = 5;
break;
case 'G':
zeile = 6;
break;
case 'H':
zeile = 7;
break;
case 'I':
zeile = 8;
break;
case 'J':
zeile = 9;
break;
}
  
  System.out.println("Bitte Zeile des Ziels eingeben: ");
     buchstabe = s.next();
usw.
 
Zuletzt bearbeitet von einem Moderator:

JStein52

Top Contributor
Bist du weiter gekommen ? Deine Fehlermeldung klingt nach einem Compiler-Fehler ?! Wenn ich deinen Code nehme ist aber alles fehlerfrei, jedenfalls der Teil den du gepostet hast.

@VfL_Freak : Was genau bei Dompteur meintest du denn da ? Ich finde nix was weiterhelfen würde
 
Zuletzt bearbeitet:

Paeonia2015

Mitglied
Java:
public static void attack(Scanner s) {

  String treffer;
  int  col,row;
     String buchstabe;
    
     //char row;
     buchstabe = "ABCDEFGHIJ";
     row = 0;
row = buchstabe.charAt(0) ;
row = buchstabe.charAt(1) ;
row = buchstabe.charAt(2) ;
row = buchstabe.charAt(3) ;
row = buchstabe.charAt(4) ;
row = buchstabe.charAt(5) ;
row= buchstabe.charAt(6) ;
row= buchstabe.charAt(7) ;
row = buchstabe.charAt(8) ;
row= buchstabe.charAt(9) ;

switch (buchstabe.charAt(0)) {
case 'A':
row= 0;
break;
case 'B':
row = 1;
break;
case 'C':
row = 2;
break;
case 'D':
row = 3;
break;
case 'E':
row= 4;
break;
case 'F':
row = 5;
break;
case 'G':
row= 6;
break;
case 'H':
row= 7;
break;
case 'I':
row = 8;
break;
case 'J':
row = 9;
break;
}
    

  System.out.println("Bitte Zeile des Ziels eingeben: ");
  buchstabe = s.next();
  System.out.println("Bitte Spalte des Ziels eingeben: ");
  col = Integer.parseInt(s.nextLine());
     System.out.println("Koordinaten des Angriffs: " + row + "/" + col);


  System.out.println("Wurde ein Ziel getroffen? (y oder n)");
  treffer = s.nextLine();

  if(treffer.equals("y") | treffer.equals("n")) {
  if(treffer.equals("y")) {
  attacker[row][col] = 'X';
  System.out.println("Sie haben ein Ziel getroffen");
  attackerships  -= 1;
  } else {
  attacker[row][col] = 'O';
  System.out.println("Nicht getroffen!Ein Schuss ins Wasser.");
  }
  } else {
  System.out.println("Ziel getroffen? (y oder n)");
  treffer = s.next();
  }

  print(attacker);

  }

da steht immer noch cannot find symbol buchstabe. ich weiß einfach nicht wieso er das nicht findet weil ich habs ja als string dort stehen -.-
 
Zuletzt bearbeitet von einem Moderator:

Paeonia2015

Mitglied
ok ich hab den fehler gefunden , Vielen Dank.
aber jetzt hab ich ein anderes problem wenn ich jetzt die methode aufrufe, fragt er mich ja nach der zeile und da müsste ich ja dan ein B hinschreibe können , aber wenn ich das mache ,dann bricht das program einfach ab.

Exception in thread"main" java.lang.numberFormatException: For input string:""
usw.
 

JStein52

Top Contributor
Poste mal die Stelle wo das passiert. Das scheint an einer Stelle zu passieren wo du eine Zahl parsen willst !

Und benutze für Code bitte die Code-Tags. Am einfachsten wenn du Code über das Symbol "Einfügen " links von der Diskette einfügst.
 
K

kneitzel

Gast
Also numberFormatException und "b" als Eingabe deutet darauf hin, dass Du versuchst eine Nummer zu lesen und "b" ist nun einmal keine Nummer. Hier müsstest Du also statt einer Zahl einen Buchstaben oder String einlesen. Den kannst Du dann ja ggf. umwandeln, so dass du intern mit einer Zahl arbeiten kannst.

Das ist aber jetzt nur eine Vermutung ohne irgend einen Code zu sehen und ein genereller Hinweis.

Konrad
 

JStein52

Top Contributor
Und du weisst schon dass du hier noch row wieder aus buchstabe bestimmen musst:

Java:
System.out.println("Bitte Zeile des Ziels eingeben: ");
buchstabe = s.next();
System.out.println("Bitte Spalte des Ziels eingeben: ");
col = Integer.parseInt(s.nextLine());
System.out.println("Koordinaten des Angriffs: " + row + "/" + col);

Und dieser Codeteil kommt mir auch verdächtig vor:

Java:
if(treffer.equals("y") | treffer.equals("n")) {

willst du da abfragen ob treffer "y" oder "n" ist ? dann musst du zwei senkrechte Striche benutzen
(ein logisches ODER. Was du machst ist ein binäres ODER)
 

Paeonia2015

Mitglied
Java:
import java.util.Scanner;

public class SchiffeVersenken5 {

  static int defenderships = 30; 
  static int attackerships = 30; 

    /*
   Auf dem defender Spielfeld werden die eigenen Schiffe postioniert.
   Wenn der Gegner einen Treffer landet wird aus dem # ein X auf diesem Feld.
   Während aud dem attacker Spielfeld , später die Schüsse angezeigt werden, ob ins wasser (O)
  oder ein Treffer (X). 
    */
  static char[][] attacker = {
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' }
  };
 
   static char[][] defender = {
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' },
  { '.', '.', '.', '.', '.', '.', '.', '.', '.', '.' }
  };
 
   /*
   final static char[][] defender = new char[SIZE][SIZE]
  public static void setdefendergrid(){
     for( int row = 0; row< SIZE;row++){
       for(int column = 0; column<SIZE; column++){
         defender[row][column]= '.';
       }
     }
   }
   */
 
   /*
   Zunächst werden nur die Felder wiedergegeben.
   Solange die Spieler noch Schiffe übrg haben, kann man dann entscheiden wer angreift.
   Oder mit dem Spiel aufhören möchte.
   Wenn der Spieler keine Schiffe mehr hat oder alle Schiffe des Gegners getroffen hat.
   Wird entsprechend am Ende eine Meldung ausgegeben.
   */
  
  public static void main(String[] args) {
     System.out.println("Player-Attack:");
  print(attacker);
  System.out.println("Player-Defend:");
  print(defender);

     Scanner s = new Scanner(System.in);
   
  while(defenderships > 0 && attackerships  > 0) {
      System.out.println("Befehl (attack/defend/exit/Schiffeplatzieren):");
  String befehl = s.nextLine();
        switch(befehl){
  case "attack":
  attack(s); 
  break;
                 
  case "defend":
  defend(s); 
  break;
           //case "schiffeplatzieren":
  //  schiffeplatzieren(s); 
  //  break; 
  case "exit":
  s.close();
               
  default:
  System.out.println("Bitte einen bekannten Befehl benutzen: 'attack', 'defend', 'exit'.");
     
  }
  }
     if(defenderships == 0) {
  System.out.println("Sie haben leider verloren!Ihre Schiffe wurde versenkt!");
  } else {
  System.out.println("Sie haben gewonnen!Sie haben alle Schiffe ihres Gegners versenkt!");
  }
   }
 
   /*
   Es wird zunächst immer nach zeile und spalte gefragt.
   Die müssen dan manuell eingegeben werden.
   Dann muss der andere Spieler mündlich sagen ob ein Schiff getroffen wurde oder nicht
   Je nach dem wird dann ein X oder ein O gesetzt im Spielfeld.
   Wenn wir attack() aufrufen ruft der Gegenspieler bei sich defend() auf.Und umgekehrt.
   */

  public static void attack(Scanner s) {
  String treffer;
  int  col,row;
     String buchstabe;
     //char row;
     buchstabe = "ABCDEFGHIJ";
     row = 0;
     System.out.println("Bitte Zeile des Ziels eingeben: ");
  buchstabe = s.next();

row = buchstabe.charAt(0) ;
row = buchstabe.charAt(1) ;
row = buchstabe.charAt(2) ;
row = buchstabe.charAt(3) ;
row = buchstabe.charAt(4) ;
row = buchstabe.charAt(5) ;
row= buchstabe.charAt(6) ;
row= buchstabe.charAt(7) ;
row = buchstabe.charAt(8) ;
row= buchstabe.charAt(9) ;

switch (buchstabe.charAt(0)) {
case 'A':
row= 0;
break;
case 'B':
row = 1;
break;
case 'C':
row = 2;
break;
case 'D':
row = 3;
break;
case 'E':
row= 4;
break;
case 'F':
row = 5;
break;
case 'G':
row= 6;
break;
case 'H':
row= 7;
break;
case 'I':
row = 8;
break;
case 'J':
row = 9;
break;
}
     System.out.println("Bitte Spalte des Ziels eingeben: ");
  col = Integer.parseInt(s.nextLine());
     System.out.println("Koordinaten des Angriffs: " + row + "/" + col);

  System.out.println("Wurde ein Ziel getroffen? (y oder n)");
  treffer = s.nextLine();

  if(treffer.equals("y") | treffer.equals("n")) {
  if(treffer.equals("y")) {
  attacker[row][col] = 'X';
  System.out.println("Sie haben ein Ziel getroffen");
  attackerships  -= 1;
  } else {
  attacker[row][col] = 'O';
  System.out.println("Nicht getroffen!Ein Schuss ins Wasser.");
  }
  } else {
  System.out.println("Ziel getroffen? (y oder n)");
  treffer = s.next();
  }
  print(attacker);
  }

  public static void defend(Scanner s) {
  //int i = 0, j = 0;
  String treffer;
  int  col,row;
     //char row;
     String buchstabe;
     buchstabe = "ABCDEFGHIJ";
     row = 0;
   
     System.out.println("Bitte Zeile des Ziels eingeben: ");
  buchstabe = s.next();
     //buchstabe = buchstabe.toUpperCase();

row = buchstabe.charAt(0) ;
row = buchstabe.charAt(1) ;
row = buchstabe.charAt(2) ;
row = buchstabe.charAt(3) ;
row = buchstabe.charAt(4) ;
row = buchstabe.charAt(5) ;
row= buchstabe.charAt(6) ;
row= buchstabe.charAt(7) ;
row = buchstabe.charAt(8) ;
row= buchstabe.charAt(9) ;

switch (buchstabe.charAt(0)) {
case 'A':
row= 0;
break;
case 'B':
row = 1;
break;
case 'C':
row = 2;
break;
case 'D':
row = 3;
break;
case 'E':
row= 4;
break;
case 'F':
row = 5;
break;
case 'G':
row= 6;
break;
case 'H':
row= 7;
break;
case 'I':
row = 8;
break;
case 'J':
row = 9;
break;
}
   

  System.out.println("Bitte Spalte des Ziels eingeben: ");
  col = Integer.parseInt(s.nextLine());

     System.out.println("Koordinaten des Angriffs: " + row + "/" + col);


  if(defender[row][col] == '#') {
  defender[row][col] = 'X';
  System.out.println("Ihr Schiff wurde getroffen!!");
  defenderships -= 1;
  } else {
  defender[row][col] = 'O';
  System.out.println("Nicht getroffen! der Gegner hat Sie verfehlt.");
  }

  print(defender);

  }
 
  public static void print(char[][] grid) {
  System.out.println(" 0123456789");
  //for(int i=0; i<10; i+=1) {
  for(int i=0; i<10; i+=1) {
       System.out.println(i);   
  for (int j=0; j <10; j+=1) {
  System.out.print(grid[i][j]);
  if(j == 9) {
  System.out.println();
  }
  }
  }
  System.out.println();

  }
}


Das ist mein code und die aufgabenstellung ist das man nun die zeilen von A bis J durchzählt
hab erst seit nem monat java deswegen fällt mir das ein bissel schwer. also eigentlich war es bis jetzt i.o. aber ich versteh glaube ich diesen typcast nicht. als lösungshinweis wurde nämlich gesagt das man typcast (int) oder Char.At benutzen kann.
 
Zuletzt bearbeitet von einem Moderator:

JStein52

Top Contributor
Ja, aber das hat nichts mit der Exception zu tun. Ich vermute die kommt an der Stelle oder:

col = Integer.parseInt(s.nextLine());

Benutze hier doch mal s.nextLine statt s.next:

buchstabe = s.next();

Hoppla, noch was: was versprichst du dir von diesen 10 Zeilen:

row = buchstabe.charAt(0) ;
.
.
.


Die kannst du doch einfach rausschmeissen.
 

Paeonia2015

Mitglied
Ich hab noch eine Fage ich mus mit public static int final schlachtschiff = 1 , die anzahl der jeweilien schiffe setzen. jedoch irgendwie hört der es dann nicht mehr auf. und mann kann immer noch schiffe der sorte setzten.

Java:
public class SchiffeVersenken7 {
    public final static int  schlachtschiff = 1 ;
    public final static int  kreuzer = 2;
    public final static int zerstoerer = 3;
    public final static int  uboote = 4;

public static void schiffeplatzieren(Scanner s) {
        int  gesetzteSchiffe = 0;
        int  col,row;
        String buchstabe;
        buchstabe = "ABCDEFGHIJ";
        row = 0;
        col = 0;      
        /*
            while(col<0 & col>10 && row<0 & row>10){
            System.out.print("Try again.");
             buchstabe = s.nextLine();
             col = Integer.parseInt(s.nextLine());
             while (attacker[row][col] == '#'){
                System.out.print("Try again.Already an ship there.");
                buchstabe = s.nextLine();
                col = Integer.parseInt(s.nextLine());
                }
            }
        */

    System.out.println("Welches Schiff wollen Sie setzen: (kreuzer, schlachtschiff, uboot, zerstoerer):");
    String schiff = s.nextLine();
        if(schiff.equals("schlachtschiff")){
        System.out.println("Bitte Spalte eingeben: ");
        col = Integer.parseInt(s.nextLine()); 
        while (col>9 || col<0){
            System.out.println("Keine gueltige Eingabe");
            System.out.println("Bitte Spalte des Ziels eingeben: ");
            col = Integer.parseInt(s.nextLine());
        }      
        System.out.println("Bitte Zeile des Ziels eingeben: ");
        buchstabe = s.nextLine();
switch (buchstabe.charAt(0)) {
case 'A':
row= 0;
break;
case 'B':
row = 1;
break;
case 'C':
row = 2;
break;
case 'D':
row = 3;
break;
case 'E':
row= 4;
break;
case 'F':
row = 5;
break;
case 'G':
row= 6;
break;
case 'H':
row= 7;
break;
case 'I':
row = 8;
break;
case 'J':
row = 9;
break;

default:
    System.out.println("bitte eine gueltige Eingabe eingeben zwischen A-J");
    buchstabe = s.nextLine();
}
              
        String position;      
        System.out.println("Position (l),(r),(o), (u): ");                                    
            position = s.next();       
        while (schlachtschiff != gesetzteSchiffe ){
          if(position.equals("l")){
                if (defender[row][col] != '.'){              
            return;  
            }else{       
            for(int i =0; i<5; i++){
                defender[row-i][col] = '#';
                gesetzteSchiffe++;          
            }
        }
          }
        else if(position.equals("r")){
                if (defender[row][col] != '.'){              
            return;
            }else{  
            for(int i =0; i<5; i++){
                defender[row+i][col] = '#';
                gesetzteSchiffe++;
            }
        }
        }
        else if(position.equals("o")){
                if (defender[row][col] != '.'){              
            return;
            }else{      
            for(int i =0; i<5; i++){
                defender[row][col+i] = '#';
                gesetzteSchiffe++;
            }
        }
        }
        else if(position.equals("u")) {
                if (defender[row][col] != '.'){              
            return;
            }else{      
            for(int i =0; i<5; i++){
                defender[row][col-i] = '#' ;
                gesetzteSchiffe++;
            }
        }
        }
        else{          
            return;
        }
        print(attacker);
        }
    }


Das ist nicht das gesamte programm nur ein Auszug irgendwas davon. ich vermute etwas mit der while schleife stimmt nicht.
 
Zuletzt bearbeitet von einem Moderator:

JStein52

Top Contributor
Das war mit deinen Einrückungen nur schwer lesbar.

Java:
        if (schiff.equals("schlachtschiff")) {

            System.out.println("Bitte Spalte eingeben: ");
            col = Integer.parseInt(s.nextLine());

            while (col > 9 || col < 0) {

                System.out.println("Keine gueltige Eingabe");
                System.out.println("Bitte Spalte des Ziels eingeben: ");
                col = Integer.parseInt(s.nextLine());

            }

            System.out.println("Bitte Zeile des Ziels eingeben: ");
            buchstabe = s.nextLine();

            switch (buchstabe.charAt(0)) {
                case 'A':
                    row = 0;
                    break;
                case 'B':
                    row = 1;
                    break;
                case 'C':
                    row = 2;
                    break;
                case 'D':
                    row = 3;
                    break;
                case 'E':
                    row = 4;
                    break;
                case 'F':
                    row = 5;
                    break;
                case 'G':
                    row = 6;
                    break;
                case 'H':
                    row = 7;
                    break;
                case 'I':
                    row = 8;
                    break;
                case 'J':
                    row = 9;
                    break;

                default:
                    System.out.println("bitte eine gueltige Eingabe eingeben zwischen A-J");
                    buchstabe = s.nextLine();
            }

            String position;

            System.out.println("Position (l),(r),(o), (u): ");
            position = s.next();

            while (schlachtschiff != gesetzteSchiffe) {
                if (position.equals("l")) {
                    if (defender[row][col] != '.') {
                        return;
                    } else {
                        for (int i = 0; i < 5; i++) {
                            defender[row - i][col] = '#';
                            gesetzteSchiffe++;

                        }
                    }
                } else if (position.equals("r")) {
                    if (defender[row][col] != '.') {

                        return;
                    } else {
                        for (int i = 0; i < 5; i++) {
                            defender[row + i][col] = '#';
                            gesetzteSchiffe++;
                        }
                    }
                } else if (position.equals("o")) {
                    if (defender[row][col] != '.') {

                        return;
                    } else {
                        for (int i = 0; i < 5; i++) {
                            defender[row][col + i] = '#';
                            gesetzteSchiffe++;
                        }
                    }
                } else if (position.equals("u")) {
                    if (defender[row][col] != '.') {

                        return;
                    } else {
                        for (int i = 0; i < 5; i++) {
                            defender[row][col - i] = '#';
                            gesetzteSchiffe++;
                        }
                    }
                } else {

                    return;
                }
                print(attacker);
            }
        }

Was wolltest du mit dieser Schleife
while (schlachtschiff != gesetzteSchiffe) {
bezwecken ? Ich glaube dass dies sowas wie eine Endlosschleife ist weil ja ein Stück weiter unten gesetzte Schiffe in einer Schleife erhöht wird und vermutlich immer != 1 ist !
 
Zuletzt bearbeitet von einem Moderator:

Paeonia2015

Mitglied
also mann darf nur ein schlachtschiff setzen, wenn schon eins gesetzt ist , darf man keins mehr setzten.
Also ich dachte schlachtschiff ist ja 1, und gesetzte schiff 0, und solange schlachtschiff und gesetzte schiffe ungleich sind darf gesetzt,es wird aber jedes mal wenn man ein schiff gesetzt wird, dann mit gesetztesschiff++. eins dazu gezählt. --> das war jetzt meine logik aber irgendwie wird im programm dann nichts gemacht.
while (gesetzteSchiffe < schlachtschiff ){ hab ich mal umgeändert aber da kommt dann ne fehlermeldung mit exception. und bricht ab.
Nachdem ich zeile spalte und position eingegeben habe
 

JStein52

Top Contributor
Aber gesetzte Schiffe wird doch in diesen for-Schleifen immer um 5 erhöht !!
Also ist es zuerst wahrscheinlich 0, und danach 5, aber immer != schlachtschiff
Kannst du mit dem Debugger arbeiten und mal durch dieses Schleife durchgehen. Oder alternativ dir an einigen strategishen Stellen mal mit println() die fraglichen Variablen ausgeben lassen ?
 

VfL_Freak

Top Contributor
Moin,

also mann darf nur ein schlachtschiff setzen
Aha ... und frau nicht ????? :eek: :p
Achte ruhig ein bisschen auf Deine Formulierungen ;)

... aber irgendwie wird im programm dann nichts gemacht ...
Soll WAS bedeuten ??? :confused:

... hab ich mal umgeändert aber da kommt dann ne fehlermeldung mit exception
Ach, und wir düerfen raten, wo welche Meldung kommt??
Gibt es denn auch was zu gewinnen ???
WAS hast Du denn WORAUF 'umgesetzt' (was immer das bedeutet) ...... ??

Also ehrlich ... ist es so schwer, die auftretenden Fehler klar zu benennen und zu schrieben wo genau sie auftreten ? :(

Gruß Klaus
 

Paeonia2015

Mitglied
@VfL_Freak Sorry für die blöde Formulierung XD...Also ich werde gefragt welches schiff ich setzen möchte , dann gebe ich dort schlachtschiff ein , dann werde ich nach Zeile und spalte gefragt, die gebe ich auch ein, bis dahin alles i.o.,ein Schiff( das die Größe 5 hat) wird , so wie ich wollte, wird auf das Feld gesetzt. Daraufhin teste ich das nochmal. Denn nun dürfte es nämlich kein schiff des Types Schlachtschiff mehr setzen. Wegen..
Code:
while (gesetzteSchiffe < schlachtschiff ){
weil ich mit
gesetzteSchiffe++;
ja
int gesetzte Schiffe = 0; nun eigentlich auf 1 erhöhe. und somit schlachtschiff ja nicht größer als gesetzte schiffe ist , dann dürfte die while schleife ja nicht mehr durchgeführt werden.


@JStein52 ja ich hab das wie oben geändert, hattest recht das mit != , hat überhaupt keine Sinn gemacht.
Debugger sagt mir Java Neuling noch nichts aber ich schau mir das mal an.
 

Paeonia2015

Mitglied
So ich habs, glaub ich, selber jetzt hinbekommen. . Und wieder einmal wird klar studieren geht über probieren..aber trotzdem Dankeeeee ihr habt mir die richtigen Denkansätze geliefert!!!
 

Neue Themen


Oben