2017-06-12 72 views
0

我有一個文本文件,它是這樣的:從文本文件中讀取,以填補的2D陣列(在Java)

10, 11. 
(0, 0). 
(3, 10). 
(0, 6), (0, 7), (0, 9), 
(1, 1), (1, 2), (1, 4), (1, 7), 
(2, 1), (2, 7), (2, 8), (2, 10), 
(3, 1), (3, 2), (3, 3), (3, 4), (3, 7), 
(4, 0), (4, 6), (4, 9), (4, 10), 
(5, 2), (5, 3), (5, 4), (5, 5), (5, 7), 
(6, 1), (6, 8), (6, 9), 
(7, 1), (7, 2), (7, 3), (7, 6), 
(8, 1), (8, 5), (8, 6), (8, 8), (8, 10), 
(9, 3), (9, 7). 

當第一行給出了2 d數組的維數,第二行應該等於「S」,第三行等於「F」,所有其他行等於應該是「X」的點,並且任何未列出的應該是「。」。

我還是要添加更多的代碼,因此任何未使用的變量是對於這一點,我只是試圖讓我先來運作

到目前爲止,我得到的錯誤是:

在線程 「主」 java.util.InputMismatchException在 java.util.Scanner.throwFor(未知來源)在 java.util.Scanner.next(未知來源)在 java.util.Scanner.nextInt異常(Unknown Source) java.util.Scanner.nextInt(Unknown Source)at MazeOne.main(M azeOne.java:15)

當我嘗試不從文本文件中讀取運行類似的代碼,我打印陣列,也給了我怪異的東西,像這樣的,而不是數組:

[[Ljava.lang.String;@55f96302, [Ljava.lang.String;@3d4eac69, [Ljava.lang.String;@42a57993, [Ljava.lang.String;@75b84c92] 

到目前爲止我的代碼看起來像:

任何意見或者我要去哪裏錯將極大地幫助讚賞

import java.io.File; 
import java.util.Arrays; 
import java.util.Scanner; 
import java.io.*; 
import java.util.Scanner; 

public class MazeOne { 
    static Scanner scan = new Scanner(System.in); 
    public static void main(String[] args) 
    { 
     int HEIGHT, LENGTH; 
     //Get file name from keyboard 
     File importFileName = new File("MazeOne.txt"); 
     Scanner inFile = new Scanner("MazeOne.txt"); 


     int Height = inFile.nextInt(); 
     int Length = inFile.nextInt(); 
     HEIGHT = Height-1; 
     LENGTH = Length-1; 
     String [][] MazeArray = new String[HEIGHT][LENGTH]; 
     String [][] Start = new String[][]{{".",".","."},{".","S","."},{".",".","."}}; 
     String [][] Block = new String[][]{{"X","X","X"},{"X","X","X"},{"X","X","X"}}; 
     String [][] Finish = new String[][]{{".",".","."},{".","F","."},{".",".","."}}; 
     String [][] Normal = new String[][]{{".",".","."},{".",".","."},{".",".","."}}; 

     for(int i = 0; i < HEIGHT; i++) 
     { 
      for(int j = 0; j < LENGTH; j++) 
      { 
       MazeArray[i][j] = "."; 
      } 
     } 

     if(inFile.hasNextLine()) 
     { 
      int X = inFile.nextInt(); 
      int Y = inFile.nextInt(); 
      MazeArray[Y][X] = "S"; 
     } 
     if(inFile.hasNextLine()) 
     { 
      int X = inFile.nextInt(); 
      int Y = inFile.nextInt(); 
      MazeArray[Y][X] = "F"; 
     } 

     while(inFile.hasNextLine()) 
     { 
      while(inFile.hasNextInt()){ 
       int X = inFile.nextInt(); 
       int Y = inFile.nextInt(); 
       MazeArray[Y][X] = "X"; 
      } 
     } 
     System.out.print(MazeArray); 
    } 
} 
+0

你可以編輯你的問題,包括你的文本文件應該看起來如何?將它添加到代碼塊。 – Sedrick

+0

對不起,第一次使用本網站,雖然它是一個文本文件的副本粘貼,就像它在記事本中顯示 – Kenneth

+0

當你的數據是'10,11.' <-a字符串時,你正在嘗試讀入ints。 – Sedrick

回答

1

使用日當你打印一個陣列時,它是Arrays.toString(arrayName)

+0

這是不是真正的問題檢查我的回答上面 –

+0

實際上我們應該使用'Arrays.deepToString(MazeArray)'打印一個2或+維的數組'Arrays.toString'對於簡單的數組是有用的:) –

1

首先

掃描儀應該採取與文件

Scanner inFile = new Scanner(new File("path\\MazeOne.txt")); 

不是String像你這樣:

Scanner inFile = new Scanner("MazeOne.txt"); 

你已經確定你的文件,這樣就可以使用:

Scanner inFile = new Scanner(importFileName); 

掃描器的默認分隔符是一個空間,所以當您嘗試使用:

int Height = inFile.nextInt(); 
int Length = inFile.nextInt(); 

這可以使一個問題,因爲分隔符是不正確的我建議刪除輸入之間的逗號爲10 11
與其他輸入(0, 0).和...相同的問題

我建議,讓您的輸入,沒有任何特殊字符,你可以使用

10 11 
0 0 
3 10 
0 6 0 7 0 9 
1 1 1 2 1 4 1 7 
2 1 2 7 2 8 2 10 
3 1 3 2 3 3 3 4 3 7 
4 0 4 6 4 9 4 10 
5 2 5 3 5 4 5 5 5 7 
6 1 6 8 6 9 
7 1 7 2 7 3 7 6 
8 1 8 5 8 6 8 8 8 10 
9 3 9 7 

你會得到java.lang.ArrayIndexOutOfBoundsException: 10異常,因爲你有12行,你初始化僅用陣列10


第四

要打印您陣列,您需要使用循環,或者你可以使用:

Arrays.deepToString(MazeArray) 

注意不要在您的變量的第一個字符使用大寫字母。

解決這個問題,你將解決你的問題