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

Java自学:如何通过循环获取二维ArrayList并转字符串弹窗显示?

解决你的Java随机数显示问题

看起来你已经搭好了基本框架,只是在最后拼接结果字符串的时候卡壳了,我来帮你理清思路并修复代码~

首先先说说你当前代码里的几个小问题:

  • result变量没有初始化,直接拼接会抛出NullPointerException,得先把它初始化为空字符串""
  • 循环里不知道怎么获取ArrayList中的Random对象并提取信息,其实只需要通过randomNum.get(i)拿到对象,再调用你写的getID()和getRandomNum()方法就行
  • 你原来的随机数生成逻辑是nextInt(99)+1,这会生成1-99的数,不符合你要的10-100范围,得调整参数

另外提个小建议:你的类名用了Random,但Java标准库已经有java.util.Random类,虽然你用的是SecureRandom,但为了避免混淆,建议把类名改成比如RandomNumberItem之类的,不过先按你的现有代码来修改。

下面是修正后的完整代码:

import java.security.SecureRandom;
import javax.swing.JOptionPane;
import java.util.ArrayList;

// 建议把类名改成RandomNumberItem,避免和java.util.Random冲突
public class Random {
    public int randomNum;
    public String ID;

    public Random(String ID, int initialValue) {
        SecureRandom randomNumbers = new SecureRandom();
        this.ID = ID;
        // 生成10-100的随机数:nextInt(91)生成0-90,加10后就是10-100
        int randomValue = randomNumbers.nextInt(91) + 10;
        randomNum = randomValue;
    }

    public int getRandomNum() {
        return randomNum;
    }

    public String getID() {
        return ID;
    }
}

class RandomText {
    public static void main(String[] args) {
        int ans = Integer.parseInt(JOptionPane.showInputDialog("How many random number you want to show?"));
        ArrayList<Random> randomNumList = new ArrayList<>(); // 变量名改成更清晰的randomNumList
        for (int i = 0; i < ans; i++) {
            randomNumList.add(new Random("ID " + i, 0)); // Integer.toString(i)可以直接用i代替,Java会自动转字符串
        }

        // 初始化result为空字符串,避免空指针
        String result = "";
        for (int i = 0; i < ans; i++) {
            Random currentItem = randomNumList.get(i);
            // 拼接ID和随机数,每行一个条目
            result += currentItem.getID() + ": " + currentItem.getRandomNum() + "\n";
        }

        JOptionPane.showMessageDialog(null, result);
    }
}

再给你补充几个优化点:

  1. 字符串拼接效率优化:如果要生成的随机数数量很多,用+=拼接字符串效率不高,建议改用StringBuilder:
StringBuilder sb = new StringBuilder();
for (int i = 0; i < ans; i++) {
    Random currentItem = randomNumList.get(i);
    sb.append(currentItem.getID()).append(": ").append(currentItem.getRandomNum()).append("\n");
}
String result = sb.toString();
  1. 可变二维数组的实现:如果你真正的需求是创建可变大小的二维数组(而不是用ArrayList存单个对象),可以用嵌套ArrayList来实现,比如:
// 可变大小的二维随机数结构示例
ArrayList<ArrayList<Integer>> twoDRandoms = new ArrayList<>();
SecureRandom random = new SecureRandom();

// 先创建行
for (int i = 0; i < ans; i++) {
    ArrayList<Integer> row = new ArrayList<>();
    // 每行随机生成3个10-100的数(列数也可以动态调整)
    for (int j = 0; j < 3; j++) {
        row.add(random.nextInt(91) + 10);
    }
    twoDRandoms.add(row);
}

// 拼接显示内容
StringBuilder sb = new StringBuilder();
for (int i = 0; i < twoDRandoms.size(); i++) {
    sb.append("Row ").append(i + 1).append(": ");
    for (int num : twoDRandoms.get(i)) {
        sb.append(num).append(" ");
    }
    sb.append("\n");
}
JOptionPane.showMessageDialog(null, sb.toString());

这样就能实现完全可变的二维随机数结构啦~

内容的提问来源于stack exchange,提问作者Let's Yo

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.15 04:02:53