В вашем коде ...
while (inputLine! = Null)
... всегда будет true
, потому что inputLine
ваш String
и всегда будет иметь значение при выполнении этой проверки. Причина в том, что как только вы прочитаете null
в inputLine
(когда достигнете конца файла), вместо запуска проверки цикла у вас будет NullPointerException
, если вы попытаетесь запустить следующую строкукода ... for(int i = 0; i < inputLine.length() - 1; i++)
. Это, в свою очередь, приведет к тому, что currentGrid
всегда будет null
, поскольку в тот момент он все еще объявляется как null
.
Чтобы это исправить, вам просто нужно добавить inputLine = input.readLine();
перед while
изатем переместите эту же строку в вашем while
в конец while
следующим образом ...
public static Grid createGrid(String filename) throws IOException {
Grid currentGrid = null;
try {
BufferedReader input = new BufferedReader(new FileReader(filename));
String inputLine = input.readLine();
String[] tokens = inputLine.split(" ");
if(tokens.length != 2){
throw new IllegalArgumentException();
}
int height = Integer.parseInt(tokens[0]);
int width = Integer.parseInt(tokens[1]);
char[][] grid = new char[height][width];
int currentLine = 0;
inputLine = input.readLine(); // added before while
while(inputLine != null) {
System.out.println(inputLine);
for(int i = 0; i < inputLine.length() - 1; i++){
char currentGem = inputLine.charAt(i);
grid[currentLine][i] = currentGem;
}
currentLine++;
inputLine = input.readLine(); // last line in while
}
input.close();
currentGrid = new Grid(grid);
}
catch(IOException e) {
System.out.println(e.getMessage());
currentGrid = null;
}
return currentGrid;
}
О, вы также заметили, что я переместил ваши объявления. Вы не должны объявлять BufferedReader input
, String inputLine
и char[][] grid
за пределами вашего try { ... } catch
блока. Также вам нужно только объявить int currentLine = 0;
непосредственно перед тем, как вам это понадобится (это просто хорошая практика).