【问题标题】:How to create an instance of a class and store them in an array or arraylist? (processing)如何创建一个类的实例并将它们存储在数组或数组列表中? (加工)
【发布时间】:2017-07-19 01:37:46
【问题描述】:

我有这个程序,我需要来自外部文件的 50 个随机单词出现,每个单词随机移动到随机位置...我已经能够让每个单词彼此分开移动到随机位置,但是问题是只有外部文件中的第一个单词出现了 50 次,这是唯一出现的单词……而不是 50 个随机单词!只有 50 个相同的词...所以我尝试将 int index = int(random(allWords.length)); 放在 draw 下和 for 内,但这可能会导致它每秒发生 50 次、60 次,这不是我想要的发生...有人建议相反,我可能只想在 setup() 函数中生成一次随机词,我可以通过创建我创建的 class 的实例并将它们存储在数组或 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
      }

    }

【问题讨论】:

  • 在 word.display() 的 text (allWords[index], x, y, width/2, height/2 ); 行中,index 始终为 0(因为它在此程序中永远不会改变)。您应该将index 或字符串本身传递给word() 构造函数,以便每个实例都知道自己的。
  • @marekful 谢谢!

标签: arrays arraylist random processing text-size


【解决方案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 值数组而不是文件。

【讨论】:

  • 这真是太棒了!!!!!!!再次感谢@kevin!你帮了大忙!
  • 哦,等等,我还在努力!我只是还不确定它是否是随机的,但至少它不只是出现的一个词:)
  • @Noobprocessor 使用我发布的代码,每次都会选择相同的词。如果您每次都想要不同的单词,则必须选择随机索引。但总体方法是一样的。
  • 对对对!谢谢!顺便说一句,随机文本大小会一样吗?因为我还希望每个单词以随机大小出现
  • @Noobprocessor 你有一个类,它封装了特定单词的所有内容。你可以在里面放一个尺码。如果您遇到困难,我鼓励您尝试一下并在新问题中发布minimal reproducible example。祝你好运。
猜你喜欢
  • 2021-09-06
  • 1970-01-01
  • 2020-05-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2019-09-20
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多