1

我正在将一些 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++ 动态数组。但在第三个代码块中,它使用 tree_edges 作为直接指针。

考虑到内存和引用是由 Java 直接处理的,Java 相当于什么?

4

3 回答 3

1

C/C++ 中的 struct 就像 Java 中的类及其所有成员变量public

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 null元素。像这样初始化它们:

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

与在 C/C++ 中将指针视为对第一个元素的直接引用不同,在 Java 中,您必须显式引用第一个元素。

int nodeL = treeEdges[0].u;
int nodeR = treeEdges[0].v;
于 2013-03-20T23:11:15.973 回答
1

Java等价物是

mst_edge[] tree_edges = new mst_edge[size];

int node_l = tree_edges[0].u;
int node_r = tree_edges[0].v;
于 2013-03-20T23:06:37.087 回答
0

在 OO Java 中,您将使用 getter 来检索私有成员变量。size 是您定义的任何值。

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();
于 2013-03-20T23:09:49.047 回答