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

Java中用Scanner通过空格分隔输入行列的实现方法(黑白棋场景)

解决黑白棋游戏中Scanner空格分隔行/列输入的问题

核心问题原因

你用sc.nextInt()只能读取单个整数,用户输入的“行 列”是两个用空格分隔的数值,这种方式只会读取第一个数,剩下的第二个数会留在输入缓冲区,后续转字符串拆分的操作自然无效。

两种可行的解决方法

方法1:直接读取两个整数(最简单高效)

Scanner默认会以空格、换行等空白符作为分隔符,直接连续调用两次nextInt()就能分别获取行和列的数值:

System.out.print("Please enter the position of '1' (row col): ");
// 分别读取行、列的整数输入
int row = sc.nextInt();
int col = sc.nextInt();
int b = 1; // 黑棋标记

方法2:读取整行后拆分(适合复杂输入场景)

如果需要先读取整行再拆分,要注意:之前调用sc.nextInt()后,输入缓冲区会遗留一个换行符,必须先调用sc.nextLine()消费掉这个换行符,否则会直接读取到空字符串:

// 先处理上一次nextInt留下的换行符
sc.nextLine();
System.out.print("Please enter the position of '1' (row col): ");
String input = sc.nextLine();
String[] parts = input.split(" ");
// 将拆分后的字符串转为整数
int row = Integer.parseInt(parts[0]);
int col = Integer.parseInt(parts[1]);
int b = 1;

额外代码优化建议

  1. 输入校验逻辑修正:原代码固定校验0-5是错误的,应该根据用户输入的棋盘大小num判断,行和列的合法范围是0 <= row < num和0 <= col < num,避免数组越界。
  2. 落子逻辑修正:原代码用bcp同时指代行和列是错误的,必须用分开的row和col操作二维数组,比如reversigame[row][col]。
  3. 棋盘打印优化:不要用Arrays.deepToString()打印棋盘,建议写一个单独的打印方法,输出更直观:
public static void printBoard(int[][] board) {
    for (int[] rowArr : board) {
        for (int cell : rowArr) {
            System.out.print(cell + " ");
        }
        System.out.println();
    }
}

修正后的输入处理+基础校验示例

// 假设已完成棋盘初始化逻辑
System.out.print("Please enter the position of '1' (row col): ");
int row = sc.nextInt();
int col = sc.nextInt();
int b = 1;

// 输入范围合法性校验
if (row < 0 || row >= num || col < 0 || col >= num) {
    System.out.println("Error - input should be between 0 and " + (num-1) + "!");
} else {
    // 这里补充落子合法性判断(如是否能翻转对方棋子等)
    if (/* 合法落子条件 */) {
        reversigame[row][col] = b;
        printBoard(reversigame);
    } else {
        System.out.println("Error - invalid move");
    }
}

内容的提问来源于stack exchange,提问作者Cheng Kai Hing Jacky

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.06 07:33:25