我是Java的新手,我正在尝试创建一个包含从.txt文件读取的对象的数组。 该文件看起来像这样
Wall 2 2
Wall 3 4
Wall 3 5
....等等。
我想要做的是使用RandomAccessFile()函数用文件中的对象和指定的位置填充数组[8] [8]。 我一直在四处寻找,但找不到解决方案,或者说我找不到合适的地方。 任何帮助将不胜感激。
编辑:
我已经取得了一些进展(我认为)并且能够从.txt文件中读取,但是,我似乎无法将对象分配给我的数组中的特定位置... 这就是我所拥有的
public static void leer() throws IOException
{
Scanner s = new Scanner(new File("init.txt"));
while (s.hasNext())
{
if (s.next()=="Wall")
{
int i = s.nextInt();
int j = s.nextInt();
Tablero[i][j]=new Wall();
}
else if (s.next()=="Ghost")
{
int i = s.nextInt();
int j = s.nextInt();
Tablero[i][j]=new Ghost();
}
}
}
现在,我收到一个“NoSuchElementException”,我收集的意思是我没有正确定义Walls或Ghosts,遗憾的是,我不太了解enum函数...... 再一次,任何帮助都会很棒!
答案 0 :(得分:1)
这将有效:
Scanner s = new Scanner(new File("map.txt"));
String[][] map = new String[8][8];
while (s.hasNext()) {
String value = s.next();
int x = s.nextInt();
int y = s.nextInt();
map[x][y] = value;
}
您可能需要考虑使用Enum将项目存储在每个单元格中:
public enum CellType {
EMPTY, WALL, POWERUP
}
Scanner s = new Scanner(new File("map.txt"));
CellType[][] map = new CellType[8][8];
while (s.hasNext()) {
String value = s.next().toUpperCase();
int x = s.nextInt();
int y = s.nextInt();
map[x][y] = CellType.valueOf(value);
}
您在代码中呼叫.next()
两次。您只需要评估一次,因此只消耗一个令牌:
public static void leer() throws IOException {
Scanner s = new Scanner(new File("init.txt"));
while (s.hasNext()) {
//Read these at the top, so we don't read them twice, and consume too many tokens
String item = s.next();
int i = s.nextInt();
int j = s.nextInt();
if(item == "Wall") {
Tablero[i][j] = new Wall();
}
else if(item =="Ghost") {
Tablero[i][j]=new Ghost();
}
}
}