我是java新手,想问你一个问题。首先我要做的是:我的目标是在一个区域创建不同的点。我决定创建一个类Koord
来保存点的坐标。我已经使用了一个包含2个元素的数组 - 用于x和y值。之后我为x和y添加了一个随机生成器(它们必须是随机的)。
这是我的班级:
import java.util.Random;
public class Koord {
private int number;
private static int numberOfNodes = 0;
public static int[] koord;
public Koord(int x, int y){
koord = new int[2];
koord[0] = x;
koord[1] = y;
number = ++numberOfNodes;
}
public int getNumber() {
return number;
}
public static int getNumberOfNodes() {
return numberOfNodes;
}
private static int randomFill(){
Random rand = new Random();
int randomNum = rand.nextInt(99);
return randomNum;
}
public int getX(){
return koord[0] = randomFill();
}
public int getY(){
return koord[1] = randomFill();
}
}
所以,到现在为止一切正常。但现在在我的主要课程中,我想创建一些点并将它们添加到列表中。这也不是问题。当我想要打印点的坐标时,问题就开始了。当我在打印列表中点的坐标时调用方法getX()
,我每次都得到不同的坐标。
import java.util.LinkedList;
import java.util.ListIterator;
public class Display {
public static void main(String args[]) {
LinkedList<Koord> ownArea = new LinkedList<Koord>();
Koord point1 = new Koord(0, 0);
Koord point2 = new Koord(0, 0);
Koord point3 = new Koord(0, 0);
Koord point4 = new Koord(0, 0);
Koord point5 = new Koord(0, 0);
Koord point6 = new Koord(0, 0);
Koord point7 = new Koord(0, 0);
ownArea.add(point1);
ownArea.add(point2);
ownArea.add(point3);
ownArea.add(point4);
ownArea.add(point5);
ownArea.add(point6);
ownArea.add(point7);
System.out.println("ListIterator Approach: ");
ListIterator<Koord> listIterator = ownArea.listIterator();
while (listIterator.hasNext()) {
System.out.println(listIterator.next().getX());
}
System.out.println("ListIterator Approach: ");
ListIterator<Koord> listIterator2 = ownArea.listIterator();
while (listIterator2.hasNext()) {
System.out.println(listIterator2.next().getX());
}
}
}
所以我知道问题所在,我知道这是错误的,但我不知道如何为每个点分配静态坐标以及如何打印它们。我需要这个,因为我想用坐标操作(比较它们,打印它们等等)。我知道我必须学到很多东西,但是现在如果你能给我一些建议,那将会非常有帮助。
答案 0 :(得分:0)
由于每次尝试randomFill()
或getX()
时都在调用getY()
,最好初始化每个已经随机化的X和Y值的Koord对象。
示例:
Random rand = new Random();
LinkedList<Koord> ownArea = new LinkedList<Koord>();
Koord point1 = new Koord(rand.nextInt(99), rand.nextInt(99));
Koord point2 = new Koord(rand.nextInt(99), rand.nextInt(99));
ownArea.add(point1);
ownArea.add(point2);
for(Koord c : ownArea) {
System.out.println("x: " + c.getX() + " y: " + c.getY());
}
同样在您的Koord
班级
变量int[] koord
不应该是静态的并且更改
getX()
和getY()
只返回值。
事实上,这将是一种更好的方法
public class Koord {
private int number;
private static int numberOfNodes = 0;
private int x;
private int y;
public Koord(int x, int y) {
this.x = x;
this.y = y;
this.number = ++numberOfNodes;
}
public int getX() {
return x;
}
public int getY() {
return y;
}
public int getNumber() {
return number;
}
}
答案 1 :(得分:0)
我认为这是问题
public int getX(){
return koord[0] = randomFill();
}
每次调用它都会使x随机变化!
将所有assignemts移动到构造函数,并使getX()像实际的getter一样工作,即。 return x
我避免发布代码。你应该自己弄明白:)
答案 2 :(得分:0)
您需要查看getX()
功能。我不知道为什么你在那里使用randomFill()
,因为它会不断返回一个随机的x值。如果你想要每个点的随机坐标集,但你只想设置一次,我建议在构造函数中调用randomFill()
。
public Koord() { // you don't need the x - y parameters if you're calling the random function anyways.
koord = new int[2];
koord[0] = randomFill();
koord[1] = randomFill();
number = ++numberOfNodes;
}
// you can now create points like so
Koord point1 = new Koord();
Koord point2 = new Koord();
Koord point3 = new Koord();
您还需要更新getX()
(和getY()
):
public int getX() {
return koord[0];
}