对于战舰游戏,我想从文本文件中读取值并将它们存储到变量中。.txt文件示例:
8
Carrier;3*2;3*3;3*4;3*5;3*6
Battleship;5*6;6*6;7*6;8*6
Submarine;5*2;6*2;7*2;
Destroyer;1*7;1*8
第一行表示我的板的大小。
下一行的结构表示船,即。e。它的名字和它在黑板上的坐标。例如:carrier有坐标:(3,2)、(3,3)、(3,4)、(3,5)(3,6)。
与船相关的坐标数是固定的。然而,船舶所在的航线可能会发生变化。
现在,我尝试创建一个名为carrier的数组int[][],其中int[0][0]是3,int[0][1]是2,…,并对每艘船执行此操作。
之后,总是放在第一行的电路板大小应该存储在一个变量中 int size;
.
到目前为止,我有这个代码。
public void ReadFile(File f) throws FileNotFoundException {
Scanner scanner = new Scanner(f);
int lineNumber = 1;
while(scanner.hasNextLine()){
String line = scanner.nextLine();
if(lineNumber==1){ // Skipping board size for now.
lineNumber++;
continue;
}
String[] coordinates = line.split(";");
String ship = coordinates[0];
System.out.println(ship);
lineNumber++;
}
scanner.close();
}
我试过使用分隔符,拆分,。。但我没能找到解决办法。。谢谢你的帮助!
3条答案
按热度按时间vktxenjb1#
这是你的另一个选择。这会将船和坐标收集到一个map<string,list>中,其中string键保存“board”或ship name,并且列表包含具有坐标或网格大小的数组数组。
这是工作报告:https://repl.it/@randycasburn/glaringsoulfulnet
mbyulnm02#
另外,始终放在第一行的电路板大小应以可变int大小存储;
那么,为什么你的代码只跳过第一行,什么也不做呢?
您的逻辑应该更改为添加以下内容来读取电路板的大小:
然后使用循环读取所有船舶信息:
编辑:
这个字符串数组有空值,因为每艘船的长度(#坐标)不同。
问题中发布的代码中的字符串数组将不具有空值。它将只包含从每行数据中解析的数据。
如果试图将此数组中的数据复制到另一个固定大小的二维数组中,则逻辑错误。当您知道数据的长度不同时,为什么要创建固定大小的数组?
本质上,我需要将所有坐标从carrier存储到一个单独的2d数组中
我不会使用二维数组。相反,我将创建一个arraylist,其中包含一艘船的所有坐标。那么你需要一个数组列表来容纳所有的船。所以逻辑是这样的:
xhv8bpkk3#
请尝试以下代码: