2016-11-14 4 views
0

In meiner Schule haben wir beauftragt, ein "perfektes Spiel des Schlachtschiffes" zu kodieren. Dafür erhalten wir eine Datei, ships.txt, die wir scannen und nach Schiffen A, P, B, S oder C suchen und deren Standorte ausdrucken müssen. Dies ist die Datei (10x10):Datei-Scanner überspringt Zeile

..CCC..... 
.......... 
...A.....B 
...A.SSS.B 
...A.....B 
...A...... 
.......... 
.......PP. 
.......... 
.......... 

Hier ist der Code, den ich habe:

import java.util.Scanner; 
import java.io.*; 
public class BattleShip{ 
    public static void main(String[] args)throws IOException{ 
     Scanner scf = new Scanner(new File("ships.txt")); 
     String line = "p"; 

     for(int c = 0; c<10;c++){ 
      line = scf.nextLine() + " "; 

      for(int h = 0;h<10;h++){ 

       boolean isShip =   line.substring(h,h+1).equalsIgnoreCase("."); 
       if(isShip == false){ 
        System.out.println(c + "," + h); 

       } 
      } 
     } 
    } 
} 

Ich weiß, dass die Antworten sind:

(0,2) 
(0,3) 
(0,4) 
(2,3) 
(2,9) 
(3,3) 
(3,5) 
(3,6) 
(3,7) 
(3,9) 
(4,3) 
(4,9) 
(5,3) 
(5,9) 
(6,3) 
(8,7) 
(8,8) 

Das Problem ist, dass Eclipse-Druck aus:

(0,2) 
(0,3) 
(0,4) 
(2,3) 
(2,9) 
(3,3) 
(3,5) 
(3,6) 
(3,7) 
(3,9) 
(4,3) 
(4,9) 
(5,3) 
(7,7) 
(7,8) 

Meine beste Schätzung ist t Der Scanner überspringt die fünfte Zeile, aber für das Leben von mir kann ich nicht herausfinden, warum oder wie ich es beheben kann. Kann mir bitte jemand helfen?

+0

Sie sollten Ihre erwartete Ausgabe überprüfen. Und denken Sie daran, Ihr Code funktioniert ** 0-basiert ** (Schleifenindizes)! – Paul

+1

Ihr Programm druckt die richtigen Koordinaten aus. Was Sie "wissen", die Antworten sind falsch. – Joe

+0

Es ist fast richtig, aber 1) sollte es 17 Ausgänge bc gibt es 17 Schiffe und 2) gibt es keine Schiffe in der 7. Reihe der Patrouillenboot (PP) ist in der 8. Reihe, und schließlich 3) 0 ist die erste Reihe und Spalte. – Jason

Antwort

0

Mit einem kleinen Kniff mit dem Code:

import java.util.Scanner; 
import java.io.*; 
public class BattleShip{ 
    public static void main(String[] args)throws IOException{ 
     Scanner fileScanner= new Scanner(new File("ships.txt")); 
     String line; 

     for(int row = 0; row < 10; row++){ 
      line = fileScanner.nextLine() + " "; 

      for(int column = 0; column < 10; column++){ 

       boolean isShip = line.substring(column, column + 1).equalsIgnoreCase("."); 

       if(isShip == false){ 
        System.out.print(row + "," + column + "\t"); 
       } 
       else{ 
        System.out.print(".\t"); 
       } 
      } 
      System.out.println(""); 
     } 
     fileScanner.close(); 
    } 
} 

Sie die folgende Ausgabe:

. . 0,2 0,3 0,4 . . . . . 
. . . . . . . . . . 
. . . 2,3 . . . . . 2,9 
. . . 3,3 . 3,5 3,6 3,7 . 3,9 
. . . 4,3 . . . . . 4,9 
. . . 5,3 . . . . . . 
. . . . . . . . . . 
. . . . . . . 7,7 7,8 . 
. . . . . . . . . . 
. . . . . . . . . . 

es ist im Grunde der gleiche Code-Logik, um nur einige Zeilenumbrüche, Punkte und Tabs hinzugefügt hier und da, damit es klarer aussieht.

Offensichtlich ist die Ausgabe korrekt, und keine Zeilen werden übersprungen.

Die Antworten, die Sie erhielten, scheinen falsch zu sein, nicht Eklipse: p

Verwandte Themen