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

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(); // 关闭输入流,养成良好习惯
    }
}

关键修改说明

  1. 调整输入验证位置:在获取尺寸后立即检查是否为正整数,无效输入直接终止程序,避免后续无意义的操作。
  2. 添加随机逻辑:初始化Random对象,使用nextBoolean()方法生成50%概率的随机选择,决定每个位置填充空格还是方块。如果需要调整概率(比如70%方块),可以改用random.nextInt(10) < 7这类逻辑。
  3. 删除冗余赋值循环:去掉两次重复的全量赋值循环,改为单次循环完成随机填充,提升效率。
  4. 关闭输入流:添加input.close()释放资源,符合Java IO操作的规范。

内容的提问来源于stack exchange,提问作者cloverpatch

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.18 08:20:27