繁体   English   中英

用变量名创建类的新实例

[英]Create new instance of class with name from variable

所以我是编程新手,并且对类有一​​些问题。 我正在用下一块砖头的镜头。 库中有一个称为Node的类。 它需要X和Y。就像这样:

节点nodeNameOne = new Node(2,3);

我想做的事:

我有一个12 x 12的阵列。 对于数组中的每个位置,我想获取其X和Y并创建一个新节点。 问题是我想自动更改“ nodeNameOne”。

我的解决方案是创建一个intiger变量并将其递增,然后执行.to字符串并将其用作节点名称,方法是当我使用我的intiger变量名称时,它使用变量的名称而不是变量中的值。

我看过其他使用“ Class.newInstance”的帖子,但我无法使它正常工作。

任何帮助表示赞赏。 谢谢

更新:

我有一个12 x 12的阵列。 我将扫描数组,当我在数组的任何位置检测到0时,我都想使用数组位置的X和Y创建一个新的Node。

因为它是一个12 x 12的数组,所以有144个可能发生0的位置。 因此,制作一个新的is节点所需的代码是:Node nodename = new Node(x,y);

我想自动化实例名称:“ nodeName”以使用字符串变量,该变量将从以下位置获取:

int nameOfNode= 0;
String temp = Integer.toString(nameOfNode);
Node temp = new Node(x,y);
nameOfNode++;

我得到的错误是它说已经使用了temp,但是我知道。 我希望它使用temp的值而不是名称“ temp”。 -我希望这更清楚。

您想要的可能是一个数组。 二维数组是(i,j)-> Node [i] [j]的映射:

// Step 1 and 2: Create and add nodes
Node nodes[12][12];
for (int i = 0; i < 12; i++) {
    for (int j = 0; j < 12; j++) {
        nodes[i][j] = new Node(i, j);
        mesh.add(nodes[i][j], 0);
    }
}

然后,您可以使用数字(或整数变量)来引用节点:

// Step 3: Connect nodes:
mesh.connect(nodes[2][3], nodes[2][4]);
mesh.connect(nodes[2][3], nodes[3][3]);
mesh.connect(nodes[2][4], nodes[2][5]);
...

我想你想要一个java.util.Map;

映射是将键映射到值的对象。 映射不能包含重复的键; 每个键最多可以映射到一个值。 您可以将字符串“ x,y”用作节点对象的键,然后可以按所需方式通过字符串检索节点对象。

您可以使用如下地图:

final Map<String,Node> nodesMapedByName = new HashMap<>();
(...)
//asssuming x and y are integers, this will create an 
//new node for x and y and put it in the map using the string
//"x,y" as key
nodesMapedByName.put(x + "," + y, new Node(x,y);
(...)
//asssuming x and y are integers, this will retrieve the node
//mapped by the String "x,y"
final Node someNome =  nodesMapedByName.get(x + "," + y);

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM