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

Java中使用Scanner创建char类型矩阵的技术问题求助

解决Java读取char类型方阵的问题

嘿,我明白你遇到的问题啦!咱们一步步拆解你的代码问题,然后给出修正方案~

你的代码里的两个核心问题

  • nextInt()留下的换行符坑:当你用stdin.nextInt()读取阶数n后,输入流里其实还残留着一个换行符(就是你输入3后按的回车)。接下来第一次调用stdin.nextLine()时,它会直接读取这个空的换行符,而不是你想要的第一行方阵内容,导致后续读取的行数错位。
  • 类型不匹配的赋值错误:matrix是char[][]类型的二维数组,你直接把String类型的stdin.nextLine()赋值给它,这在Java里是不允许的,应该把读取到的字符串转换成char数组,再赋值给matrix的每一行。

修正后的完整代码

import java.util.Scanner;

public class CharMatrix {
    public static void main(String[] args) {
        Scanner stdin = new Scanner(System.in);
        int n = stdin.nextInt();
        
        // 关键:读取nextInt()残留的换行符,避免后续nextLine()读空行
        stdin.nextLine();
        
        char[][] matrix = new char[n][n];
        for(int i = 0; i < n; i++){
            // 读取一行字符串,转成char数组赋值给matrix的第i行
            String line = stdin.nextLine();
            matrix[i] = line.toCharArray();
        }
        
        // 测试输出,验证是否正确读取
        System.out.println("你输入的方阵是:");
        for(int i = 0; i < n; i++){
            System.out.println(matrix[i]);
        }
        stdin.close();
    }
}

代码说明

  1. 处理换行符:在nextInt()之后调用一次stdin.nextLine(),把残留的换行符消耗掉,这样后续的nextLine()就能正确读取每一行方阵内容了。
  2. 正确赋值二维数组:每次读取一行字符串,用toCharArray()方法把字符串转换成char数组,然后赋值给matrix[i],这样就完成了每行的填充。

测试你的输入示例

当你输入:

3
.#.
###
.#.

程序会正确输出:

你输入的方阵是:
.#.
###
.#.

内容的提问来源于stack exchange,提问作者Tiago Araújo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.20 12:07:34