在我开始玩CodeEval并接受MineSweeper挑战之前,我没有注意到这一点,当我知道代码工作时,它一直都失败了。所以我开始挖掘并尝试新的东西,直到经过几个小时的写作和重写后,我决定尝试不同的IDE,我开始使用Intellij,所以我切换到Netbeans,发现在读取文件时,它会增加一个额外的字符。前面例如
但如果我只打印出字符串,那么角色就不会显示出来。我使用完全相同的.txt文件来测试Java中的Intellij和Python中的IDLE。他们都得到了相同的结果,但如果我使用Netbeans或提交给CodeEval,我必须考虑额外的未知字符。任何想法为什么?
Netbeans代码的唯一区别是我使用了同一文件的整个文件路径。
import java.io.BufferedReader;
import java.io.File;
import java.io.FileReader;
import java.io.IOException;
import java.util.Arrays;
/**
* Created by Dylan
*/
public class StackOverflow {
public static void main(String args[]) throws IOException {
BufferedReader br = new BufferedReader(new FileReader(new File("Files/matrix")));
String line, content = "", MN[], prematrix[], matrix[][], temp[], temps, temp3[], AllMines = "";
int m, n, Xm, Ym, k, count, firstCount = 0;
while ((line = br.readLine()) != null) {
content += line + "Dylan";
firstCount++;
}
temp3 = content.split("Dylan");
count = temp3.length;
for (int q = 0; q < count; q++) {
prematrix = new String[firstCount];
prematrix[0] = temp3[q];
temp = prematrix[0].split(";");
temps = temp[0];
MN = temps.split(",");
temps = temp[1];
prematrix = temps.split("");
m = Integer.parseInt(MN[0]);//3
n = Integer.parseInt(MN[1]);//5
matrix = new String[m][n];
k = 0;
//Populates Minefield
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
matrix[i][j] = prematrix[k];
k++;
}
}
//Gets max X,Y
Xm = n - 1;
Ym = m - 1;
/*A matrix to match the Minefield.
Number of touch mines will be added here*/
int[][] mines = new int[m][n];
for (int i = 0; i < m; i++) {
Arrays.fill(mines[i], 0);
}
//Double for loop to check how many mines
// the position is touching
for (int y = 0; y < m; y++) {
for (int x = 0; x < n; x++) {
if (!matrix[y][x].equalsIgnoreCase("*")) {
if (x != Xm && y != 0) {
if (matrix[y - 1][x + 1].equalsIgnoreCase("*")) {
mines[y][x]++;
}
}
if (x != Xm && y != Ym) {
if (matrix[y + 1][x + 1].equalsIgnoreCase("*")) {
mines[y][x]++;
}
}
if (x != 0 && y != Ym) {
if (matrix[y + 1][x - 1].equalsIgnoreCase("*")) {
mines[y][x]++;
}
}
if (x != 0 && y != 0) {
if (matrix[y - 1][x - 1].equalsIgnoreCase("*")) {
mines[y][x]++;
}
}
if (x != 0 && x != Xm) {
if (matrix[y][x + 1].equalsIgnoreCase("*")) {
mines[y][x]++;
}
if (matrix[y][x - 1].equalsIgnoreCase("*")) {
mines[y][x]++;
}
}
if (x == 0) {
if (matrix[y][x + 1].equalsIgnoreCase("*")) {
mines[y][x]++;
}
}
if (y == 0) {
if (matrix[y + 1][x].equalsIgnoreCase("*")) {
mines[y][x]++;
}
}
if (x == Xm) {
if (matrix[y][x - 1].equalsIgnoreCase("*")) {
mines[y][x]++;
}
}
if (y != Ym && y != 0) {
if (matrix[y - 1][x].equalsIgnoreCase("*")) {
mines[y][x]++;
}
if (matrix[y + 1][x].equalsIgnoreCase("*")) {
mines[y][x]++;
}
}
if (y == Ym) {
if (matrix[y - 1][x].equalsIgnoreCase("*")) {
mines[y][x]++;
}
}
} else {
mines[y][x] = -1;
}
}
}
String mineS = "";
for (int[] p : mines) {
mineS += Arrays.toString(p);
}
mineS = mineS.replace("-1", "*").replace(",", "").replace("]", "").replace("[", "").replace(" ", "");
System.out.println(mineS);
AllMines += mineS + "\n";
}
System.out.println(AllMines);
}
}