如何创建类的实例并将它们存储在数组或arraylist中? (加工)

时间:2017-07-19 01:37:47

标签: arrays arraylist random processing text-size

我有这个程序,我需要从外部文件中出现50个随机单词,然后每个单词随机移动到一个随机位置......我已经能够让每个单词彼此分开移动到一个随机的位置但是问题是只有外部文件中的第一个单词出现50次,这是唯一出现的单词...而不是50个随机单词!只有50个单词都是相同的......所以我试图将int index = int(random(allWords.length));放在draw下面和for内,但这可能会导致它发生50次,每秒60次,这不是我想要发生的......有人建议相反,我可能只想在setup()函数中生成一次随机单词,我可以通过创建class I的实例来实现这一点创建并将它们存储在数组或ArrayList中。问题是我对此仍然不熟悉,所以有人提供了关于我如何做到这一点的建议,或者我可以找到一个指导如何做到这一点的链接?

如果有人想知道我的问题是什么,这是我的代码......

    String [] allWords;
    int x = 120;
    int y = 130;
    int index = 0 ;
    word [] words;

    void setup () {

      size (500, 500);
      background (255); //background : white

      String [] lines = loadStrings ("alice_just_text.txt");
      String text = join(lines, " "); //make into one long string
      allWords = splitTokens (text, ",.?!:-;:()03 "); //splits it by word

      words = new word [allWords.length];

      for (int i = 0; i < 50; i++) {
        words[i] = new word (x, y);
      }
    }

    void draw() {

      background (255);

      for (int i = 0; i < 50; i++) {  //produces 50 words
        words[i].display();
        words[i].move();
        words[i].avgOverlap();
      }
    }

    class word {
      float x;
      float y; 

      word(float x, float y) {
        this.x = x;
        this.y = y;
      }

      void move() {

        x = x + random(-3, 3); //variables sets random positions
        y = y + random(-3, 3); //variables sets random positions
      }

      void display() {
        fill (0); //font color: black
        textAlign (CENTER, CENTER);
        text (allWords[index], x, y, width/2, height/2 );
      }

      void ran () {
        textSize (random(10, 80)); //random font size
      }

    }

1 个答案:

答案 0 :(得分:1)

您已经在创建一个类的实例并将其存储在此for循环中的数组中:

for (int i = 0; i < 50; i++) {
    words[i] = new word (x, y);
}

问题是您只有一个index变量,因此Word类的每个实例都使用相同的index值!

您可能希望将单个索引传递到您正在创建的Word的每个实例中:

for (int i = 0; i < 50; i++) {
    words[i] = new word (x, y, i);
}

或者您可以传递您希望每个特定实例使用的String值:

for (int i = 0; i < 50; i++) {
    words[i] = new word (x, y, allWords[i]);
}

然后,您需要修改Word构造函数以获取额外参数,以及display()函数以使用该参数。

请注意,课程应以大写字母开头,因此应为Word而不是word

另外,请尝试将您的问题隔离到MCVE我们可以复制并粘贴以自行运行。这将使您的生活更轻松,它将使我们更容易帮助您。从空白草图重新开始,只添加足够的代码,以便我们可以看到您的问题。例如,使用硬编码的String值数组而不是文件。