在java中作为对象的随机数组

时间:2015-03-03 18:04:55

标签: java arrays

我是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());
        }




 }
}

所以我知道问题所在,我知道这是错误的,但我不知道如何为每个点分配静态坐标以及如何打印它们。我需要这个,因为我想用坐标操作(比较它们,打印它们等等)。我知道我必须学到很多东西,但是现在如果你能给我一些建议,那将会非常有帮助。

3 个答案:

答案 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];
}