【问题标题】:How can I translate a multidimensional vector from C++ to Java?如何将多维向量从 C++ 转换为 Java?
【发布时间】:2013-01-19 07:23:20
【问题描述】:

所以,我用 C++ 轻松完成了一个项目,却发现我应该用 Java 编写它。这没什么大不了的,只是我的代码使用了多维向量,比如:

vector <vector<int> > arr  

在 Java 中是否有类似的东西可以在无需彻底重写程序的情况下给出相同的结果?

这是我在翻译时遇到问题的 C++ 程序中的代码 sn-p:

vector <vector <int> > arr;

cin >> n;

while (n > 0)
{
    vector <int> row;
    int u;

    for (int i = 0; i < n ; ++i)
    {
        cin >> u;
        row.push_back(u);
    }

    arr.push_back(row);

    n = comb(row.size(), k);
    k++;
}

for (int i = 0; i < arr.size(); i+=2)
    for (int j = 0; j < arr[i].size(); ++j)
        sum += arr[i][j];

for (int i = 1; i < arr.size(); i+=2)
    for (int j = 0; j < arr[i].size(); ++j)
        diff += arr[i][j];

【问题讨论】:

    标签: java translate multidimensional-array


    【解决方案1】:

    Java 也有多维向量。只需使用

    ArrayList<ArrayList<Integer>>arr=new ArrayList();
    

    【讨论】:

    • 根据您的 Java 版本,您可能需要将其实例化为 ArrayList&lt;ArrayList&lt;Integer&gt;&gt; arr = new ArrayList&lt;ArrayList&lt;Integer&gt;&gt;()。在 Java 7 中,您可以将其写为 ArrayList&lt;ArrayList&lt;Integer&gt;&gt; arr = new ArrayList&lt;&gt;()。您的代码将在所有 Java 版本中生成编译器警告。
    【解决方案2】:

    ArrayList 应该提供您需要的功能,如果您将其声明为ArrayList&lt;ArrayList&lt;Integer&gt;&gt;。您对push_back() 的调用等同于对add() 的调用。您将丢失数组索引访问表示法,但这可以通过链接到 get() 的调用来解决。

    【讨论】:

    • 感谢有关 get() 的信息。但是,链接到 get() 的调用是什么意思?您是否有关于如何翻译我正在使用的嵌套循环以正确使用 get() 方法的提示?
    • @TheRationalist 例如,您的行diff += arr[i][j]; 必须变为diff += arr.get(i).get(j)。第一个get() 返回ArrayList&lt;Integer&gt;,第二个返回Integer
    【解决方案3】:

    您可以使用 ArrayList 来调整您的代码。这是一个小例子。

     ArrayList <ArrayList<Integer>> aa = new ArrayList<ArrayList<Integer>>();
        aa.add(new ArrayList<Integer>());
        aa.get(0).add(10);
    

    编辑

    你的代码应该是这样的

        ArrayList <ArrayList<Integer>> arr = new ArrayList<ArrayList<Integer>>();
        BufferedReader br = new BufferedReader (new InputStreamReader(System.in));
    
        int n;
        n=br.read();
        while (n>0)
        {
            ArrayList<Integer> row = new ArrayList<Integer>();
            int u;
            for (int i=0;i<n;i++)
            {
                u=br.read();
                row.add(u);
    
            }
            arr.add(row);
            //I don't know this function
            n=com(row.size(),k);
            k++;
        }
        for (int i=0;i<arr.size();i+=2)
            for (int j=0;j<arr.get(i).size())
                sum+=arr.get(i).get(j);
    

    【讨论】:

    • 哇。谢谢你。如果我还没有把选定的答案给托马斯,我肯定会给你的。 :(
    • 另一个快速的问题。 BufferedReader 是直接转换为整数变量,还是将输入存储为字符串?编辑:好的,它确实返回了一个 int,我读过,但这是一个更好的问题。要在 Eclipse 中完成输入,我必须按 Ctrl+z。输入此信号时,BufferedReader 对象是否返回 -1?那么,我会将 -1 存储为最后一行中的最后一个元素吗?
    • 事实上我做错了。 read 返回的 int 是字符的代码,而不是值。例如,如果您读取 3,它将返回 53 或类似的东西。您可以使用 String 读取它,然后使用 Integer.parseInt() 将其转换为 int,如下所示:String s; s=br.readLine(); if (s!=null) row.add(Integer.parseInt(s)); 这样您的 ArrayList 中就不会有不需要的元素
    • 感谢您的回复。我最终做的是对每个整数输入使用 Scanner 对象和 nextInt() 函数。像魅力一样工作。感谢您的所有帮助!
    猜你喜欢
    • 2021-05-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-01-06
    • 1970-01-01
    • 2021-12-22
    相关资源
    最近更新 更多