# Schiffe Versenken Hausaufgabe



## Sumpfmaus (4. Dez 2015)

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:

```
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!");
  }
  }
```


----------



## Dompteur (4. Dez 2015)

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:

```
zeile = buchstabe.charAt(0) - 'A';
```


----------



## Sumpfmaus (5. Dez 2015)

Vielen Dank  habs hinbekommen.


----------



## Paeonia2015 (8. Dez 2015)

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.

```
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.


----------



## VfL_Freak (8. Dez 2015)

Moin,

dann lies Dir den Beitrag von @Dompteur nochmal GENAU durch  

Gruß Klaus


----------



## JStein52 (9. Dez 2015)

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


----------



## Paeonia2015 (9. Dez 2015)

```
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 -.-


----------



## Paeonia2015 (9. Dez 2015)

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 (9. Dez 2015)

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.


----------



## kneitzel (9. Dez 2015)

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 (9. Dez 2015)

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


```
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:


```
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 (9. Dez 2015)

```
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.


----------



## JStein52 (9. Dez 2015)

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 (9. Dez 2015)

DANKEEEEEEEEE...nur weil ich line nicht hatte bei buchstabe = s.next.....Danke!!!!!!


----------



## Paeonia2015 (12. Dez 2015)

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.


```
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.


----------



## JStein52 (12. Dez 2015)

Das war mit deinen Einrückungen nur schwer lesbar.


```
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 !


----------



## Paeonia2015 (12. Dez 2015)

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 (12. Dez 2015)

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 (12. Dez 2015)

Moin,



Paeonia2015 hat gesagt.:


> also mann darf nur ein schlachtschiff setzen


Aha ... und frau nicht ?????  
Achte ruhig ein bisschen auf Deine Formulierungen 



Paeonia2015 hat gesagt.:


> ... aber irgendwie wird im programm dann nichts gemacht ...


Soll _*WAS*_ bedeuten ??? 



Paeonia2015 hat gesagt.:


> ... 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 (12. Dez 2015)

@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..

```
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 (12. Dez 2015)

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!!!


----------

