2016-02-05 53 views
0

所以我有一個看起來像這樣的文件:如何將文件中的字符轉換爲Java中的二維數組?

+-+-+-+ ("/n") 
|S| | ("/n") 
+ + + + ("/n") 
| |E| ("/n") 
+-+-+-+ ("/n") 

/n是文件

在一個新行,我想在這裏有每個字符爲5×7陣列的條目。我不知道該怎麼做,這是我曾嘗試(與很多其他的東西一起輸入的文件):

public static void main(String[] args) throws FileNotFoundException { 

    Scanner input = new Scanner(new File("maze0.txt")); 

    char maze[][] = new char[5][7]; 
    int charCount = 0; 
    for (int row = 0; row < finalHeight; row++) { 
     for (int col = 0; col < finalWidth; col++) { 
      while (input.hasNextLine()){ 
       String line = input.nextLine(); 
       if ((row < finalHeight - 1 || col < finalWidth) && charCount < line.length()) { 
        maze[row][col] = line.charAt(charCount); 
        charCount += 1; 
        System.out.print(maze[row][col]); 

但這打印出+ S + +這是不正確的。我是一名全新的初學者程序員,對此感到困難,感謝您提供的任何幫助。

我修好了!這是我所做的:

Scanner input = new Scanner(new File("maze0.txt")); 




    char maze[][] = new char[5][7]; 
    input.nextLine(); 
    for (int row = 0; row < 5; row++) { 
     String fileLine = input.nextLine(); 
     for (int col = 0; col < 7; col++) { 
       char nextChar = fileLine.charAt(col); 
       maze[row][col] = nextChar; 
       System.out.print(maze[row][col]); 

回答

0

使用.toCharArray()將行轉換爲字符數組這將給你一個所有字符的數組。然後將它們饋入你的數組中。

它會看起來像..

// everytime we come to a new row, read a line from the file, convert it into letters then proceed on feeding them into columns. 
for (int row = 0; row < finalHeight; row++) 
{ 
     String line = input.nextLine(); 
     Char[] chars = line.toCharArray(); 
     if(!input.hasNextLine()) 
      break;   // if there is no more lines to read, break the loop. 
     for (int col = 0, i = 0; (col < finalWidth && i < chars.length); col++,i++) 
     { 
     maze[row][col] = chars[i]; 
     System.out.print(maze[row][col]); 
     } 
} 
0

事實上,雖然屏幕可能顯示+ S + +,你只需要你的陣列中的一個值 - 在迷宮[0] [0](值'+')。您的while循環會在for循環之前讀取整個文件。對於讀取的每一行,它將設置爲maze[row][column] = line.charAt(charCount); - 但rowcolumn永遠不會遞增,因爲還有另一行要讀取。所以它讀取另一行並覆蓋maze[0][0]爲line.charAt(1)(因爲您遞增了charCount)。這個角色是空間。然後它循環回去,因爲還有另一行要讀取,並且將第三個字符放在maze[0][0]處。等等等等。當它讀取整個文件時,它會遍歷for循環,但while (input.hasNextLine())不會執行,因爲它已經讀取了整個文件。

+0

哦好吧,這是有道理的!我很難看到循環在那裏的while循環中究竟做了什麼。謝謝! – pootyy

0

你只需要兩個循環你爲什麼要運行3個循環?

Scanner sc = new Scanner(new File("maze.txt")); 
String line = null; 
for(int i = 0; i< 5;i++) 
{ 
     line = sc.readLine() 
     for(int j = 0; j < 7; j++) 
     { 
      maze[i][j] = line.charAt(j); 
     } 
} 

這段代碼應該讀取文件並將其存儲在矩陣中。

由於您正在讀取內部循環中的行,因此您正在打印對角線。

0

這是一個簡單而有效的方法。

public static void main(String[] args) throws FileNotFoundException { 
    Scanner input = new Scanner(new File("maze0.txt")); 

    char maze[][] = new char[5][7]; 
    for (int i = 0; i < maze.length; i++) { 
     //Get each line and convert to character array. 
     maze[i] = input.nextLine().toCharArray(); 
    } 
} 
0

您可以讀取文件中的每一行並將其轉換爲char數組。

public static void main(String[] args) throws IOException { 
    Scanner scan = new Scanner(new File("maze0.txt")); 
    String b; 
    char maze[][] = new char[5][7]; 
    for (int row = 0; row < 5; row++) { 
     while (scan.hasNextLine()){ 
      b = scan.nextLine(); 
      maze[row] = b.toCharArray(); 
      System.out.println(maze[row]); 
     } 
    }  
    scan.close(); 
} 
0
import java.io.*; 
import java.util.*; 

public class B 
{ 
    public static void main(String...aaadf)throws FileNotFoundException 
    { 

     Scanner sc = new Scanner(new File("D://maze.txt")); 
     char maze[][] = new char[5][7]; 
     String line = null; 
     for(int i = 0; i< 5;i++) 
     { 
       line = sc.nextLine(); 
       for(int j = 0; j < 7; j++) 
       { 
        maze[i][j] = line.charAt(j); 
       } 
     } 
     for(int i = 0; i< 5;i++) 
     { 

       for(int j = 0; j < 7; j++) 
       { 
        System.out.print(maze[i][j]); 
       } 
       System.out.println(); 
     } 
    } 
} 
+0

你應該爲你的代碼提供一個小的解釋。 – Michael

相關問題