Java程序员_编程开发学习笔记_网站安全运维教程_渗透技术教程

Java数组转换:一维数组转二维数组实例解析

阿贵
10月1日发布 /正在检测是否收录...
温馨提示:
本文最后更新于2025年10月01日,已超过12天没有更新,若内容或图片失效,请留言反馈。

Java数组转换:一维数组转二维数组实例解析

138.png

一、题目代码分析

以下是需要补全的Java代码,核心功能是将长度为15的一维数组,转换为5行3列的二维数组,并通过控制台输入为一维数组赋值,最终打印二维数组内容:

import java.util.*;
public class Java_1{
      public static void main(String[] args){
           int[] a = new int[15]; // 长度15的一维数组
           int i, j, k;

           int[][] b = new int[5][]; // 5行的二维数组(列数未指定)
           for (i = 0; i < b.length; i++)
                //**********Found********** 
               b[i] = new int[_________];
            //**********Found**********
           Scanner scan = new Scanner(_________);
           for (i = 0; i < a.length; i++) 
                 //**********Found**********
                 a[i] = scan._________();

          k = 0; // 一维数组的索引计数器
          for (i = 0; i < b.length; i++) {
               //**********Found**********
              for (j = 0; j <_________.length; j++) {
                  //**********Found**********
                  b[i][j] = a[_________];
                  System.out.print(String.format("%5d",b[i][j])); // 格式化打印
              }
              System.out.println(); // 换行
          }
      }
  }

二、空白处逐一解析

要完成“一维数组转二维数组”的逻辑,需结合数组长度匹配、输入流使用、索引关联三个核心点,逐个突破空白:

1. 第一个空白:b[i] = new int[_________];

  • 解析:二维数组b已定义为5行(new int[5][]),需为每行分配列数。
    已知一维数组a长度为15,要均匀分配到5行中,每行列数 = 15 ÷ 5 = 3。
  • 答案3

2. 第二个空白:Scanner scan = new Scanner(_________);

  • 解析Scanner是Java的输入工具,需指定输入源。此处需从控制台(键盘)输入,对应输入源为System.in(标准输入流)。
  • 答案System.in

3. 第三个空白:a[i] = scan._________();

  • 解析:一维数组aint类型,需读取控制台输入的整数。Scanner中读取整数的方法是nextInt()
  • 答案nextInt

4. 第四个空白:for (j = 0; j <_________.length; j++)

  • 解析:内层循环遍历二维数组b的“列”,需获取当前行(b[i])的列数(即当前行一维数组的长度)。
  • 答案b[i]

5. 第五个空白:b[i][j] = a[_________];

  • 解析:需将一维数组a的元素按顺序赋值给二维数组b
    定义k=0为一维数组的索引计数器,每赋值一个元素,k自增1(k++),确保索引连续不重复。
  • 答案k++

三、完整正确代码

import java.util.*;
public class Java_1{
      public static void main(String[] args){
           int[] a = new int[15]; // 长度15的一维数组
           int i, j, k;

           int[][] b = new int[5][]; // 5行的二维数组(先指定行数,后分配列数)
           for (i = 0; i < b.length; i++)
               b[i] = new int[3]; // 每行3列,5×3=15,与一维数组长度匹配
           
           Scanner scan = new Scanner(System.in); // 控制台输入流
           System.out.println("请输入15个整数(空格或回车分隔):");
           for (i = 0; i < a.length; i++) 
                 a[i] = scan.nextInt(); // 读取整数赋值给一维数组

          k = 0; // 一维数组索引计数器
          System.out.println("\n转换后的5行3列二维数组:");
          for (i = 0; i < b.length; i++) { // 遍历二维数组的行
              for (j = 0; j < b[i].length; j++) { // 遍历当前行的列
                  b[i][j] = a[k++]; // 一维数组元素按顺序赋值给二维数组
                  System.out.print(String.format("%5d",b[i][j])); // 占5位格式化打印,对齐美观
              }
              System.out.println(); // 每行结束后换行
          }
          scan.close(); // 关闭输入流,避免资源泄漏
      }
  }

四、代码运行示例

1. 输入

控制台提示输入15个整数(示例输入):
请输入15个整数(空格或回车分隔):1 2 3 4 5 6 7 8 9 10 11 12 13 14 15

2. 输出

转换后的5行3列二维数组:
    1    2    3
    4    5    6
    7    8    9
   10   11   12
   13   14   15

五、核心知识点总结

通过这个实例,我们可以掌握Java数组操作的3个核心知识点:

1. 不规则二维数组的初始化

Java的二维数组本质是“数组的数组”,支持不规则初始化(每行列数可不同):

  • 第一步:先指定行数:int[][] b = new int[5][];(仅创建5个一维数组的引用,未分配内存)
  • 第二步:为每行分配列数:b[i] = new int[3];(为第i行分配3个int的内存空间)

本题中为“规则二维数组”(每行列数相同),若要创建不规则数组(如第1行2列、第2行3列),只需在循环中为不同行分配不同列数即可。

2. Scanner控制台输入的正确用法

  • 创建输入流Scanner scan = new Scanner(System.in);System.in是控制台输入源)
  • 读取数据

    • 整数:scan.nextInt()
    • 字符串:scan.next()(读取到空格/回车为止)或scan.nextLine()(读取整行)
  • 关闭流scan.close()(避免资源泄漏,养成用完关闭的习惯)

3. 一维数组与二维数组的索引关联

将一维数组a(长度n)转换为mk列的二维数组b,需满足n = m × k(长度匹配),索引关联逻辑:

  • 定义计数器k=0(对应一维数组的索引)
  • 二维数组的b[i][j](第i行第j列)对应一维数组的a[k]
  • 每赋值一次,k自增1(k++),确保所有元素按顺序传递

本质是将“一维线性存储”转换为“二维行列存储”,核心是索引的线性映射。

六、拓展与优化建议

本题的基础功能可进一步优化,提升代码的健壮性和灵活性:

1. 输入验证(避免非整数输入报错)

若用户输入非整数,scan.nextInt()会抛出InputMismatchException,可添加异常处理:

for (i = 0; i < a.length; i++) {
    System.out.print("请输入第" + (i+1) + "个整数:");
    while (!scan.hasNextInt()) { // 判断是否为整数
        System.out.print("输入错误!请重新输入整数:");
        scan.next(); // 丢弃非整数输入
    }
    a[i] = scan.nextInt();
}

2. 动态指定二维数组行列数

当前代码是固定的“5行3列”,可改为让用户输入行列数(需确保行数×列数=15):

System.out.print("请输入二维数组的行数(需满足:行数×列数=15):");
int rows = scan.nextInt();
int cols = 15 / rows; // 自动计算列数
int[][] b = new int[rows][cols]; // 直接初始化规则二维数组

3. 通用化数组转换方法

将“一维转二维”的逻辑封装为方法,提高代码复用性:

// 通用方法:将一维数组转为rows行cols列的二维数组(需满足a.length = rows×cols)
public static int[][] convert1DTo2D(int[] a, int rows, int cols) {
    int[][] result = new int[rows][cols];
    int k = 0;
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < cols; j++) {
            result[i][j] = a[k++];
        }
    }
    return result;
}

通过本题的学习,不仅能掌握数组转换的具体实现,更能理解Java数组的存储本质和索引逻辑——这些基础能力在后续处理矩阵运算、数据批量存储等场景中都会频繁用到。

喜欢就支持一下吧
点赞 1 分享 收藏
评论 抢沙发
OωO
取消 登录评论