Java入门:如何按用户指定尺寸随机生成空格与方块的二维画布
解决Java随机2D画布生成问题
原代码存在的问题
- 重复赋值覆盖:先将所有数组元素设为空格,紧接着又全部替换为方块,导致最终画布无随机性,全为方块。
- 输入验证逻辑滞后:在完成画布生成和打印后才检查尺寸是否有效,无效输入下已经执行了不必要的数组创建和循环操作。
- 未实现随机选择字符的逻辑:没有利用
Random类来随机决定每个位置是空格还是方块。
修复后的完整代码
import java.util.Scanner; import java.util.Random; public class ArtLab { public static void main(String[] args) { Scanner input = new Scanner(System.in); Random random = new Random(); // 初始化随机数生成器 System.out.println("欢迎来到2D艺术生成器!"); System.out.println("让我们定义画布的尺寸。"); System.out.println("请输入x值:"); int x = input.nextInt(); System.out.println("请输入y值:"); int y = input.nextInt(); // 先验证输入有效性,无效直接退出 if(x <= 0 || y <= 0) { System.out.println("输入无效!"); System.exit(0); } char[][] canvasSize = new char[x][y]; // 单次循环完成随机填充 for (int row = 0; row < x; row++) { for (int col = 0; col < y; col++) { // 随机选择填充空格或方块,50%概率 canvasSize[row][col] = random.nextBoolean() ? ' ' : '█'; } } // 打印画布 for(int row = 0; row < x; row++) { for(int col = 0; col < y; col++) { System.out.print(canvasSize[row][col]); } System.out.println(); } input.close(); // 关闭输入流,养成良好习惯 } }
关键修改说明
- 调整输入验证位置:在获取尺寸后立即检查是否为正整数,无效输入直接终止程序,避免后续无意义的操作。
- 添加随机逻辑:初始化
Random对象,使用nextBoolean()方法生成50%概率的随机选择,决定每个位置填充空格还是方块。如果需要调整概率(比如70%方块),可以改用random.nextInt(10) < 7这类逻辑。 - 删除冗余赋值循环:去掉两次重复的全量赋值循环,改为单次循环完成随机填充,提升效率。
- 关闭输入流:添加
input.close()释放资源,符合Java IO操作的规范。
内容的提问来源于stack exchange,提问作者cloverpatch
相关产品推荐
相关产品推荐

