我刚开始使用 Java,所以我正在转录我的一些 Ruby 内容。我有一个像这样的 Ruby 函数,它会生成一些看起来像 IPv6 地址的东西:
def generate_ip()
list = ["a", "b", "c", "d", "e", "f", "1", "2", "3", "4", "5", "6", "7", "8", "9", "0"]
address = ""
8.times do
4.times do
address << list.shuffle[5]
end
address << ":"
end
return address[0..-2].to_sym
end
这个方法只需要一个字符串数组,然后反复将它们打乱,每次选择第 5 个元素来构造返回的字符串。
据我所知,Java 中没有用于字符串数组的“shuffle()”方法,所以我想我会自己编写。但后来我开始完全陷入子问题,例如:
显然没有内置的方法可以从字符串数组中删除项目,这看起来很奇怪——对吗?我看到了其他几个 SO 帖子,其中对此功能的响应是 10 行代码块。所以我决定使用 ArrayLists,因为根据文档,它们有像 size()、get() 和 remove() 这样的合理方法,虽然......
...我还没有找到一种方法来使用文字实例化它们,或者使用单个方法调用添加多个项目。我看到的每个教程(包括官方的 Oracle Java 教程)都使用了对 ArrayList.add() 的多次调用。这不可能是这样做的,不是吗?
等等
因此,在我进入子问题领域并提出 50 个不同的问题之前,我想我会问如何解决最重要的问题。有没有一种简单的方法可以将上面的 Ruby 代码翻译成 Java?
FWIW,我正在进行的“洗牌”方法如下。我只是循环 array.length 次,每次将随机元素从旧数组复制/删除到新数组。
public ArrayList<String> shuffle(ArrayList<String> array) {
Random generator = new Random();
ArrayList<String> shuffled = new ArrayList<String>();
for (int i = 0; i > array.size(); i++) {
int index = generator.nextInt(array.size());
String popped = array.get(index);
array.remove(index);
shuffled.add(popped);
}
return shuffled;
}