java - 如何使用 Java 数组——从 Ruby 转换为 Java

标签 java ruby arrays

我刚刚开始使用 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()”方法,所以我想我应该编写自己的方法。但后来我开始完全陷入子问题的泥沼,例如:

  1. 显然没有内置方法可以从字符串数组中删除项目,这看起来很奇怪 - 这是正确的吗?我看到其他几篇 SO 帖子,其中对此功能的响应是 10 行代码块。所以我决定使用 ArrayLists,因为根据文档,它们有合理的方法,如 size()、get() 和 remove(),尽管...

  2. ...我还没有找到使用文字实例化它们的方法,或者使用单个方法调用添加多个项目的方法。我看到的每个教程(包括官方 Oracle Java 教程)都使用了对 ArrayList.add() 的多次调用。这不可能是这样做的方法,不是吗?

  3. 等等

因此,在我深入子问题领域并提出 ​​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;
    }

最佳答案

如果您创建一个 List(ArrayListLinkedList),则可以使用 Collections.shuffle()

ArrayList和LinkedList都是List接口(interface)的实现。我怀疑这两种方法都可以满足您的需求,尽管 ArrayList 更好(由数组支持)。这是Java List tutorial .

Java 中数组的长度是固定的,而 List 的大小是可变的,因此 List 通常更适合上述转换。要创建具有给定起始元素集的列表,请参阅 Arrays.asList()例如

List stooges = Arrays.asList("Larry", "Moe", "Curly");

关于java - 如何使用 Java 数组——从 Ruby 转换为 Java,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13913600/

相关文章:

java - 如何将复杂的 Java 对象写入 CSV 文件

java - PHP 与 Java 执行

ruby - 跨子模块和类共享变量

ruby - 我怎样才能将 ruby​​ logger 日志输出到 stdout 和文件?

css - 有没有办法在 Nokogiri css 中转义非字母数字字符?

C++通过引用其他类传递二维数组

arrays - 构建对象的Json对象并将其写入文件

java.time.DateTimeException : Hijrah date out of range 异常

c - 将多个二维数组复制到一个一维数组的最快方法(C 语言)

java - 使用与作为输入提供的部分值匹配的 WHERE 子句获取整数类型的记录