我正在写一个工兵,我写了一个 8 x 8 的字段并遇到了一个问题,很多大而乏味的代码。底线是,当开始一个新游戏时,卡片会创建一个 16 x 16 的零球,然后创建炸弹,即数字 9,并计算每个单元格的值(对于中心单元格,这是一个检查8 个单元格),所有这些都发生在 xlsx 文件中。问题是,当我将字段设为 8 x 8 时,我遇到了一个事实,即我必须手动计算单元格周围的炸弹数量,但我理解了一个依赖项。在计算中央单元格时(需要检查周围的 8 个单元格),我可以这样检查:从行和列中,我将进行以下计算,(左侧需要对行进行哪些操作,右侧- 列):
- -
- 0
- +
0 +
+ +
+ 0
+ -
0 -
写了代码,但它不起作用,这怎么办,因为很难为每个单元格编写所有内容(。这是代码:
public static void Get_Box_Value() throws IOException {
FileInputStream file = new FileInputStream(link);
XSSFWorkbook workbook = new XSSFWorkbook(file);
XSSFSheet sheet = workbook.getSheetAt(0);
int r1 = 3, r2 = 14;
int c1 = 3, c2 = 14;
for(int i = r1; i <= r2; i++) {
for (int j = c1; j <= c2; j++) {
//проверяю ячеку на наличие бомбы
int iA8 = (int) workbook.getSheetAt(0).getRow(i).getCell(j).getNumericCellValue();
if (iA8 != 9) {
int Value_cell = 0;
String link = "./map16_16.xlsx";
FileInputStream currDir = new FileInputStream(link);
Workbook workbook2 = new XSSFWorkbook(currDir);
//вычисляю значение каждой боковой ячейки от этой ячейки
int iA1 = (int) workbook2.getSheetAt(0).getRow(i--).getCell(j--).getNumericCellValue();
int iA2 = (int) workbook2.getSheetAt(0).getRow(i--).getCell(j).getNumericCellValue();
int iA3 = (int) workbook2.getSheetAt(0).getRow(i--).getCell(j++).getNumericCellValue();
int iA4 = (int) workbook2.getSheetAt(0).getRow(i).getCell(j++).getNumericCellValue();
int iA5 = (int) workbook2.getSheetAt(0).getRow(i++).getCell(j++).getNumericCellValue();
int iA6 = (int) workbook2.getSheetAt(0).getRow(i++).getCell(j).getNumericCellValue();
int iA7 = (int) workbook2.getSheetAt(0).getRow(i++).getCell(j--).getNumericCellValue();
int iA9 = (int) workbook2.getSheetAt(0).getRow(i).getCell(j--).getNumericCellValue();
//проверяю на наличие бомб
if (iA1 == 9) {
Value_cell++;
}
if (iA2 == 9) {
Value_cell++;
}
if (iA3 == 9) {
Value_cell++;
}
if (iA4 == 9) {
Value_cell++;
}
if (iA5 == 9) {
Value_cell++;
}
if (iA6 == 9) {
Value_cell++;
}
if (iA7 == 9) {
Value_cell++;
}
if (iA9 == 9) {
Value_cell++;
}
Row A3R = sheet.getRow(i);
A3R.getCell(j).setCellValue(Value_cell);
}
}
}
//сохраняю
file.close();
FileOutputStream outFile = new FileOutputStream(new File(String.valueOf(link)));
workbook.write(outFile);
outFile.close();
}
这太可怕了))首先,尝试至少遵循命名变量/方法/类的规则,使用有意义的变量名而不是异常编程。这段代码什么都看不懂,也很难保证改正后能正常工作。但你会统治自己。如何摆脱这种“重复”的代码,我想你会明白的: