我的程序应该读取一个如下所示的文件:
8 7
~~~~~~~
~~~~~~~
B~~~~~~
~~~~~~~
~~~~B~~
~~~~B~~
~~~~~~B
~~~~~~~
我需要忽略第一行(8和7)并将以下字符读入二维数组。我认为我写的代码会这样做,但它没有。我需要map [0] [0]对应第一个"〜",并且map [3] [0]对应第一个' B'。这是我正在使用的代码。
try
{
File file = new File(args[1]);
Scanner sc = new Scanner(file);
String themap = sc.nextLine();
theFirst = themap.indexOf(" ");
theSecond = themap.lastIndexOf(" ");
int rows = Integer.parseInt(themap.substring(0, theFirst));
int columns = Integer.parseInt(themap.substring(theSecond+1));
char[][] map = new char[rows][columns];
while (k < rows)
{
//System.out.println(k);
while (j < columns)
{
while (sc.hasNextLine())
{
themap = sc.nextLine();
System.out.println(themap);
map[k][j] = themap.charAt(j);
System.out.println(map[k][j]);
}
j++;
}
k++;
}
sc.close();
}
catch (Exception e)
{
System.out.println("ERROR: File does not exist");
}
我在那里输入一个测试语句,看看map [j] [k]发生了什么,它只打印出每一行的第一个字符。就像我说的那样,我需要它来对应我从中读取它的文件,但我不确定我做错了什么。帮助将不胜感激。
答案 0 :(得分:0)
你的问题是你正在读每一行,因为内部while
循环每个列(不是每行行一行 )。
将nextLine()
调用移到列循环之外。
其他改进:
while
循环,使用for
循环并命名循环变量row
和column
以使代码更具可读性hasNextLine()
作为循环控件 - 如果必须,请检查它是否存在异常,如果有一行但不是nextInt()
阅读数字答案 1 :(得分:0)
你第一次在最里面的循环中反复呼叫nextLine()
;之后没有什么可读的了。所以你唯一填充的是map[0][0]
。
你需要完全摆脱最里面的while
循环,并将sc.nextLine()
移到你的外循环中。
基本结构应该是这样的。随意添加任何println
调用和错误检查。此外,许多人会发现使用for
循环代替while
更直观。
while (k < rows) {
themap = sc.nextLine();
j = 0;
while (j < columns) {
map[k][j] = themap.charAt(j);
j++;
}
k++;
}
答案 2 :(得分:0)
您的循环不正确。试试这个。 你确定没有行和列的逻辑是好的,没有问题。有些人提到你丢弃了第一行,但你没有。
for(int i=0;i<rows&&sc.hasNextLine();i++){
themap = sc.nextLine();
for(int j=0;j<columns;j++){
map[i][j] = themap.charAt(j);
System.out.print(map[i][j]);
}
System.out.println();
}