更改Hashmap中Object的单个参数
Change a single parameter of Object in Hashmap
我必须为学校做一个非常基本的“制作 CAD 项目”,并决定让它更具挑战性,并添加一种与项目更适当地交互的方式。
基本上,我有一个 Point
class 和一个构造函数,该构造函数将 x
和 y
坐标作为输入,并且还有一些方法。
Point(double x, double y) {
this.x = x;
this.y = y;
}
我希望用户能够根据 he/she 的需要创建尽可能多的点 - 因此我去了 Hashmaps
(我也试过列表,但我读过 Hashmaps
对此更好,即使我无法在我的项目中找到我想要的具体答案)。
我的代码中的相关片段如下所示:
Map<Integer, Point> pMap = new HashMap<Integer, Point>();
double[] singlePoints = new double[2]; // temporarily store x and y coordinates
...
...
...
switch (intInput) {
case 1:
System.out.println("Create point? y/n");
charInput = sc.next().charAt(0);
if(java.lang.Character.toLowerCase(charInput) == 'y') {
System.out.println("X coordinate: ");
singlePoints[0] = sc.nextDouble();
System.out.println("Y coordinate: ");
singlePoints[1] = sc.nextDouble();
pMap.put(pointCounter, new point(singlePoints[0], singlePoints[1]));
pointCounter ++;
break;
} else {
break;
}
case 2:
System.out.println("Which point shall be edited?: ");
int pointC2 = sc.nextInt();
System.out.println("X or Y coordinate? ");
char c2Input = java.lang.Character.toLowerCase(sc.next().charAt(0));
if(c2Input == 'x') {
???
}
}
带问号的部分是我只想更改x
坐标的地方。因为我没有给新的 Point
(直接存储在 Hashmap
中)命名,所以我无法使用我的 getter 和 setter 方法访问它。
我如何从这里继续更改 Hashmap
内给定索引处的对象的单个参数(在本例中为 'x')?如果不可能,我是否应该恢复正常 Lists
,如果可以,我该怎么做?
(另外,快速说明:到目前为止,我们还没有在讲座中达到 Lists
或 Hashmaps
,所以我的知识是基于我在互联网上找到的,而不是来自经验或大学)
当用户在 pointC2
中输入所需的点时,您可能会在地图中找到存储的键。
Point selectedPoint = pMap.get(pointC2);
selectedPoint.setX(newX);
// pMap.get(pointC2).setX(newX);
您确实将密钥存储在
pMap.put(pointCounter, new point(singlePoints[0], singlePoints[1]));
你的密钥是pointCounter
我必须为学校做一个非常基本的“制作 CAD 项目”,并决定让它更具挑战性,并添加一种与项目更适当地交互的方式。
基本上,我有一个 Point
class 和一个构造函数,该构造函数将 x
和 y
坐标作为输入,并且还有一些方法。
Point(double x, double y) {
this.x = x;
this.y = y;
}
我希望用户能够根据 he/she 的需要创建尽可能多的点 - 因此我去了 Hashmaps
(我也试过列表,但我读过 Hashmaps
对此更好,即使我无法在我的项目中找到我想要的具体答案)。
我的代码中的相关片段如下所示:
Map<Integer, Point> pMap = new HashMap<Integer, Point>();
double[] singlePoints = new double[2]; // temporarily store x and y coordinates
...
...
...
switch (intInput) {
case 1:
System.out.println("Create point? y/n");
charInput = sc.next().charAt(0);
if(java.lang.Character.toLowerCase(charInput) == 'y') {
System.out.println("X coordinate: ");
singlePoints[0] = sc.nextDouble();
System.out.println("Y coordinate: ");
singlePoints[1] = sc.nextDouble();
pMap.put(pointCounter, new point(singlePoints[0], singlePoints[1]));
pointCounter ++;
break;
} else {
break;
}
case 2:
System.out.println("Which point shall be edited?: ");
int pointC2 = sc.nextInt();
System.out.println("X or Y coordinate? ");
char c2Input = java.lang.Character.toLowerCase(sc.next().charAt(0));
if(c2Input == 'x') {
???
}
}
带问号的部分是我只想更改x
坐标的地方。因为我没有给新的 Point
(直接存储在 Hashmap
中)命名,所以我无法使用我的 getter 和 setter 方法访问它。
我如何从这里继续更改 Hashmap
内给定索引处的对象的单个参数(在本例中为 'x')?如果不可能,我是否应该恢复正常 Lists
,如果可以,我该怎么做?
(另外,快速说明:到目前为止,我们还没有在讲座中达到 Lists
或 Hashmaps
,所以我的知识是基于我在互联网上找到的,而不是来自经验或大学)
当用户在 pointC2
中输入所需的点时,您可能会在地图中找到存储的键。
Point selectedPoint = pMap.get(pointC2);
selectedPoint.setX(newX);
// pMap.get(pointC2).setX(newX);
您确实将密钥存储在
pMap.put(pointCounter, new point(singlePoints[0], singlePoints[1]));
你的密钥是pointCounter