如何通过用户输入构建二维数组(直至输入FINISH),无需ArrayList
动态二维数组输入实现(直到输入FINISH)
如果觉得ArrayList逻辑复杂,可以用手动数组扩容的方式实现,逻辑直白,无需依赖集合类;如果用Python的话,原生列表的动态特性直接就能搞定,更简单。
Java 实现(手动扩容)
核心思路:用初始长度较小的二维数组存储每行数据,当数组存满时手动扩容,直到输入"FINISH"停止,最后裁剪成实际长度的二维数组。
import java.util.Scanner; public class Dynamic2DArrayInput { public static void main(String[] args) { Scanner scanner = new Scanner(System.in); // 初始化行容器,初始长度设为2,后续按需扩容 String[][] rowContainer = new String[2][]; int currentRowNum = 0; while (true) { System.out.print("输入一行数据(输入FINISH结束):"); String inputLine = scanner.nextLine().trim(); // 触发终止条件 if ("FINISH".equalsIgnoreCase(inputLine)) { break; } // 将单行输入拆分为一维数组(按空格分隔,支持多空格) String[] singleRow = inputLine.split("\\s+"); // 容器已满,执行扩容(容量翻倍) if (currentRowNum == rowContainer.length) { String[][] newContainer = new String[rowContainer.length * 2][]; System.arraycopy(rowContainer, 0, newContainer, 0, rowContainer.length); rowContainer = newContainer; } // 存入当前行 rowContainer[currentRowNum] = singleRow; currentRowNum++; } // 裁剪为实际行数的二维数组(可选,移除末尾空引用) String[][] final2DArray = new String[currentRowNum][]; System.arraycopy(rowContainer, 0, final2DArray, 0, currentRowNum); // 验证输出 System.out.println("\n最终二维数组:"); for (String[] row : final2DArray) { for (String elem : row) { System.out.print(elem + " "); } System.out.println(); } scanner.close(); } }
关键说明
- 手动扩容用
System.arraycopy实现,逻辑透明,比ArrayList的自动扩容更直观。 - 支持忽略大小写的终止输入(输入"finish"也能结束)。
- 可以修改
split的参数来更换分隔符(比如split(",")支持逗号分隔)。
Python 实现(极简版)
Python的列表本身就是动态结构,直接追加元素即可,无需手动管理扩容,逻辑更简单:
import sys result = [] print("输入一行数据(输入FINISH结束):") for line in sys.stdin: line = line.strip() if line.upper() == "FINISH": break # 拆分当前行并加入结果 result.append(line.split()) # 打印结果 print("\n最终二维数组:") for row in result: print(" ".join(row))
内容的提问来源于stack exchange,提问作者Jay-23
相关产品推荐
相关产品推荐

