2011-03-21 175 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

相关问题