有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

C++实现指针和数组移植到java

我将一些C++代码移植到使用重指针运算的java上。 我的问题如下:

有一个这样构建的结构,我将其实现为一个类:

在最初的C/C++代码中,我有以下任务:

struct mst_edge
{
    int u, v;
    double w;
}

mst_edge * tree_edges = new mst_edge[size];

int node_l = tree_edges->u;
int node_r = tree_edges->v;

如何将此代码转换为java?第二个块将mst_edge声明为C/C++动态数组。但在第三段代码中,它使用树_边作为直接指针

考虑到内存和引用是由Java直接处理的,Java的等价物是什么


共 (3) 个答案

  1. # 1 楼答案

    Java的等价物是

    mst_edge[] tree_edges = new mst_edge[size];
    
    int node_l = tree_edges[0].u;
    int node_r = tree_edges[0].v;
    
  2. # 2 楼答案

    在OOJava中,可以使用getter来检索私有成员变量。大小是您定义的任何值

    class MstEdge {
        private int u;
        private int v;
        private double w;
    
        public int getU() {
            return u;
        }
    
        public int getV() {
            return v;
        }
       .
       .
       .
    }
    
    
    MstEdge [] treeEdges = new MstEdge[size];
    
    int nodeL = treeEdges[i].getU();
    int nodeR = treeEdges[i].getV();
    
  3. # 3 楼答案

    类中的所有变量都是

    class MstEdge
    {
        public int u;
        public int v;
        public double w;
    }
    

    在Java中通常不会这样做;成员变量将是private,带有public访问器方法,但这最接近于struct

    在C/C++中,指向数组的指针只是Java中的数组

    MstEdge[] treeEdges = new MstEdge[size];
    

    但是要注意,在Java中,声明数组意味着现在有了size{}元素。像这样初始化它们:

    treeEdges[0] = new MstEdge();  // and so on for other array positions
    

    在Java中,您必须显式地引用第一个元素,而不是像C/C++中那样将指针视为对第一个元素的直接引用

    int nodeL = treeEdges[0].u;
    int nodeR = treeEdges[0].v;