示例迷宫:
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
WSOOOOOOOOOOOOOOWOOOOOOOOOOOOOOOOOWOOOOOOOOOOOOOOOWOOOOOOW
WWOOOOOOOOOOOOOWWWWWWWWWWWWWOOOOOOOOOOWWWWWWWWWWWWWOOOOOOW
WWWWWWOOOOOOOOOOOOWWWWWWWOOOOOOOOOOOOWWWWWWWWWWWWWWWWOOOOW
WOOOOOOWWWWWWWWWWWWWWOOOOOOOOOOOWWWWWWWWOOOOOOOOOOOOOOOWWW
WOOOOWWWWWWWOOOOOOWWWWOOOOOOWWWWWWWWWWWOOOOWWWWWWWWWOWWWWW
WOOOWWWWWWWWWWWWOOWWWWWWWWWWWWOOOOOOOOOOOOWWWWWWWWWOOOOOWW
WOOWWWWWWWWWWWWWOOWWWWWWWWWWWWWWWWWOOOOOOOWWWWWWWWWWWWOOOW
WOWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWOOOOOOOWWWWWWWWWWWOOW
WOWWWWWWWWWWWWWOOOOOOOOOOOOOOOOOOOOOOOOOOOOWWWWWWWWWWWWOOW
WOOOOOOOOOOOOOOOOWWWWOOOOOOOOWWWWWWWOOOOOOWWWWWWWWWWWWWOFW
WWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWWW
我们需要接受上面的txt文件,如果可以解决,则使用堆栈返回true或false。
我的问题是:如何从文件中逐个取出字符,并将它们分配为2D数组中的点以推入堆栈?我在下面有一些伪代码......
这是我的......
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.Stack;
import java.awt.Point;
public class MazeExplorer {
public static int x;
public static int y;
final int mazeHeight = 12;
final int mazeWidth = 58;
public static char[][] mazeLocationPoints = new char[12][58];
public static void main(String[] args) throws FileNotFoundException{
File f = new File("Maze1.txt");
Scanner sc = new Scanner(f);
String mazeString = new Scanner( f ).useDelimiter("\\A").next();
Stack<Point> points = new Stack<>();
while(sc.hasNextLine()){
mazeLocationPoints[][] = sc.nextLine().toCharArray();
points.push(mazeLocations);
}
}
}
我不知道如何从迷宫位置创建点数。?
给定的迷宫是12 x 58,我已经转换为字符串,但是我该如何为每个位置(char)分配一个点(x,y)值?我知道底部是错误的,它只是为了展示我想做的事情。
迭代维度:
import java.io.File;
import java.io.FileNotFoundException;
import java.util.Scanner;
import java.util.Stack;
import java.awt.Point;
public class MazeExplorer {
public static int x;
public static int y;
final static int mazeHeight = 12;
final static int mazeWidth = 58;
public static char[][] mazePoints = new char[12][58];
public static void main(String[] args) throws FileNotFoundException{
File f = new File("Maze1.txt");
Scanner sc = new Scanner(f);
String mazeString = new Scanner( f ).useDelimiter("\\A").next();
Stack<Point> points = new Stack<>();
for(int i = 0; i < mazeHeight; i++){
for(int j = 0; j < mazeWidth; j++){
mazePoints[i][j] =
}
}
}
}
答案 0 :(得分:0)
首先,您应该使用您声明的静态整数初始化mazePoints
数组:
public static char[][] mazePoints = new char[mazeHeight][mazeWidth];
但是你需要首先将它们标记为静态:
private static final int mazeHeight = 12;
private static final int mazeWidth = 58;
如果它们不是静态的,那么你的mazePoints
数组也不应该。
接下来,您应该逐行阅读文件,而不是一次阅读整个文件:
final Scanner scanner = new Scanner(f);
for (int row = 0; row < mazeHeight && scanner.hasNext(); row++) {
final String mazeRow = scanner.next(); //Get the next row from the scanner.
mazePoints[row] = mazeRow.toCharArray(); //Convert the row into a char[].
}
你已经完成了。您现在拥有mazePoints
所有积分。
注意 您使用的new Scanner(f).useDelimiter("\\A").next();
只是更改默认分隔符,以便一次读取整个文件。你不希望这种行为。使用一次读取一行的默认行为。
您可以盲目地遍历整个2D数组,但是,您可能需要实现某种类型的算法,而不是迭代整个2D数组。
for (int y = 0; y < mazeHeight; y++) {
for (int x = 0; x < mazeWidth; x++) {
Point point = new Point(x, y);
//Do whatever with your point...
}
}