Java从二维String数组取随机输出时打印数组地址值问题解决
问题原因
你看到的[Ljava.lang.String;@3fee733d是Java中String数组对象的默认字符串表示,不是随机生成的异常内容:
- 前缀
[Ljava.lang.String;表示当前打印对象是存放String类型元素的一维数组 @后面的十六进制串是这个数组对象的哈希值标识
你定义的vk是二维String数组,本质是元素为一维String数组的数组。现有代码仅生成了第一维的随机索引,vk[randomNumber]取到的是内层的一维数组对象,直接打印对象时会调用数组默认的toString()方法,该方法没有做内容格式化,就会输出这类地址格式的结果。
修复方案
根据你想要的输出效果二选一即可:
方案1:随机输出单个单词
如果你想从所有单词里随机抽一个输出,需要额外生成内层数组的随机索引,拿到具体的字符串元素再打印:
import java.util.Random; public class VKSimple { public static void main(String[] args) { String[][] vk = {{"Hallo", "Hello"}, {"Haus", "House"}, {"Auto", "Car"}}; Random r = new Random(); // 随机选单词组 int randomRow = r.nextInt(vk.length); // 随机选组内的单词 int randomCol = r.nextInt(vk[randomRow].length); // 打印具体字符串元素 System.out.println(vk[randomRow][randomCol]); } }
运行后会随机输出Hallo、Hello、Haus、House、Auto、Car中的任意一个。
方案2:随机输出一整组单词对
如果你想随机抽一整组德英对照单词输出,用Arrays.toString()方法把内层数组转为可读格式字符串再打印即可:
import java.util.Arrays; import java.util.Random; public class VKSimple { public static void main(String[] args) { String[][] vk = {{"Hallo", "Hello"}, {"Haus", "House"}, {"Auto", "Car"}}; Random r = new Random(); int randomRow = r.nextInt(vk.length); // 把数组转为可读字符串后打印 System.out.println(Arrays.toString(vk[randomRow])); } }
运行后会随机输出[Hallo, Hello]、[Haus, House]、[Auto, Car]这类格式化后的结果。
内容的提问来源于stack exchange,提问作者Graham
相关产品推荐
相关产品推荐

