2011-03-21 178 views
0

當我說一個網格時,我的意思是一個多維數組。我想要這個,因爲我正在製作2D遊戲,並且希望能夠從數據文本文件加載關卡。可以說,例如,我有這個二維數組level[3][3]。一個簡單的3x3地圖。我也有讀取文本文件:如何從Java中的文本文件讀取數據的GRID?

1 2 3 
4 5 6 
7 8 9 

在C++中,我可以簡單地做:

for (x=0; i<map_width; x++) 
{ 
    for (y=0; y<map_height; y++) 
    { 
     fscanf(nameoffile, "%d", map[x][y]); 
    } 
} 

這將使該文本文件的所有內容到相應的陣列。 然而 我不知道如何在java中做到這一點。是否有任何相當於將相應數據放入數組的數據?我已經知道掃描儀類,但我不知道如何使用它。我搜索谷歌,無濟於事。它沒有太多解釋。 請幫忙!具體來說,我想知道如何掃描文件,並把它讀入陣列中適當的位置的任何int。

我當前的代碼是這樣的,但是,它會引發一個NoSuchElementException:

public void loadMap() { 
    Scanner sc = null; 
    try { 
     sc = new Scanner(inputmap); 
    } catch (FileNotFoundException e) { 
     e.printStackTrace(); 
    } 
    for (int x = 0; x < width; x++) { 
     for (int y = 0; y < height; y++) { 
      map[x][y] = sc.nextInt(); 
     } 
    } 

在哪裏的InputMap是文件,map[][]是每個地圖和寬度和高度在地磚上的數據的網格被預 - 在構造函數中指定。

+0

請做的尺寸從我們因此專家接受了答案.. – 2011-03-21 03:53:13

回答

0

對於您的文本文件如何實際格式化,您的問題是非常無益的。例如,

123 
456 
789 

1 2 3 
4 5 6 
7 8 9 

,此外,你還沒有提到他們是否總是整數,或者

1 2 3 
4 5 6 
a b c 

等,如果你給了我們一個非常不同的準確地描述這些文本文件中的內容,我們可以爲您提供更多幫助。我能做的最好的是向你展示如何使用掃描儀來輸入一般東西:

for循環在Java中看起來很相似,但是你必須初始化一個Scanner對象。

Scanner input = new Scanner(myFile); //whatever file is being read 

for (x=0; i<map_width; x++) 
{ 
    for (y=0; y<map_height; y++) 
    { 
     int nextTile = input.nextInt(); //reads the next int 
     // or 
     char nextTile = input.nextChar(); //reads the next char 
    } 
} 

除此之外,我需要更多地瞭解這些輸入文件中的內容。

編輯:

我複製你的直接循環從你的代碼,但你可能要交換的for循環的內部和外部。寬度不應該是內部參數(從左到右)?

+0

他們只是整型,每個編號對應一個不同的瓷磚。它們格式化時沒有空格,行之間也沒有多餘的空行。像這樣-123 456 789指示文件中下一行的空格。 – Keelx 2011-03-21 03:44:16

+0

只要它們間隔開來,並且文件格式正確(每行的int數與寬度相同等),input.nextInt()將依次讀取它們。 – donnyton 2011-03-21 03:47:36

+0

就是這樣!非常感謝!我只需在文件中的數字之間添加空格。我做了一個測試,它完美的工作! – Keelx 2011-03-21 03:50:36

0

在Java中,它的工作方式類似 - 爲您的文件創建一個java.util.Scanner對象,並使用它的nextInt方法而不是fscanf。

0

如果你不知道電網

static int[][] readFile(String filename) { 
    try { 
     File textfile = new File (GridSearchTest.class.classLoader.getResource(filename).toURI()); 
     Scanner fileScanner = new Scanner(textfile); 
     int size = Integer.parseInt(fileScanner.next()); 
     String line = fileScanner.nextLine(); 
     int[][] grid = new int [size][size]; 
     int i = 0; int j = 0; 

     while (fileScanner.hasNextLine()) { 
      line = fileScanner.nextLine(); 
      System.out.println (line); 
      Scanner lineScanner = new Scanner(line); 
      while (lineScanner.hasNext()) { 
       grid[i][j] = Integer.parseInt(lineScanner.next()); 
       i++; 
      } 
      lineScanner.close(); 
      i=0; 
      j++; 
     } 
     fileScanner.close(); 

     return grid; 

    } catch (IOException e) { 
     System.out.println("Error reading file: "+ e.getMessage()); 
     System.exit(0); 
    }; 
} 
+0

請解釋代碼,以便將來的讀者理解並從中學習。粘貼代碼不會幫助任何人。 – Saad 2017-03-12 23:53:34

相關問題