You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

JavaFX数独应用updateBoard方法调用异常问题排查

解决JavaFX数独应用中updateBoard()方法的NumberFormatException问题

咱们先直奔问题核心——你写的空值判断逻辑完全没起到作用!

看这行代码:

if ((Integer) Integer.parseInt(textFields[i][j].getText()) != null)

Integer.parseInt()方法如果传入空字符串"",会直接抛出NumberFormatException,根本走不到后面的!= null判断步骤。这就是为什么当TextField为空时,调用这个方法会报错。

那为什么在checkBoard()里调用没问题呢?大概率是因为checkBoard()执行时,所有TextField都被确保有合法数值(比如调用前做了输入校验,或者此时棋盘还没有空单元格);而点击保存按钮时,棋盘上存在空的TextField(对应数独的空白格子),这时候parseInt碰到空字符串就直接触发异常了。

修复方案

我们需要先判断TextField的内容是否为空,再决定要不要转换数值。修改后的updateBoard()方法如下:

public void updateBoard() {
    int index = 0; // 注意:如果index是局部变量必须初始化,成员变量也建议每次调用时重置
    for (int i = 0; i < 9; i++) {
        for (int j = 0; j < 9; j++) {
            String input = textFields[i][j].getText().trim(); // 先去除首尾空格,避免空格误判
            if (input.isEmpty()) {
                sudokuBoard.set(i, j, null);
            } else {
                try {
                    int value = Integer.parseInt(input);
                    sudokuBoard.set(i, j, value);
                } catch (NumberFormatException e) {
                    // 处理非数字输入的情况,比如设为null或提示用户
                    sudokuBoard.set(i, j, null);
                    // 可选:弹出提示告知输入无效
                    // Alert alert = new Alert(Alert.AlertType.WARNING, "单元格("+(i+1)+","+(j+1)+")输入无效,请输入1-9的数字");
                    // alert.showAndWait();
                }
            }
            index++;
        }
    }
}

额外说明

  1. 加上trim()是为了处理用户只输入空格的情况,避免把空格误判为有效输入。
  2. 增加try-catch块是为了兼容用户输入非数字的场景(比如字母、符号),防止程序直接崩溃。
  3. 注意index变量的初始化问题,如果是局部变量必须手动初始化;如果是成员变量,建议每次调用updateBoard()时重置为0,避免累加导致逻辑错误。

这样修改后,无论是在checkBoard()还是保存按钮的方法里调用updateBoard(),都能正确处理空TextField的情况,不会再抛出异常啦。

内容的提问来源于stack exchange,提问作者Vader20FF

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.11 07:39:41