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); } }
再给你补充几个优化点:
- 字符串拼接效率优化:如果要生成的随机数数量很多,用
+=拼接字符串效率不高,建议改用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();
- 可变二维数组的实现:如果你真正的需求是创建可变大小的二维数组(而不是用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
相关产品推荐
相关产品推荐

