当前位置: 首页 > 知识库问答 >
问题:

处理中的矩阵文本雨效应3.3

汤修贤
2023-03-14

我正在处理3.3中制作一个矩阵文本雨效果,作为学习处理库和Java的简单入门项目。到目前为止,我的代码:

class Symbol {
  int x, y;
  int switchInterval = round(random(2, 50));
  float speed;
  char value;

  Symbol(int x, int y, float speed) {
    this.x = x;
    this.y = y;
    this.speed = speed;
  }

  //Sets to random symbol based on the Katakana Unicode block
  void setToRandomSymbol() {
    if(frameCount % switchInterval == 0) {
      value = char((int) random(0x30A0, 0x3100));
    }
  }

  //rains the characters down the screen and loops them to the top when they
  // reach the bottom of the screen
  void rain() {
    if(y <= height) {
      y += speed;
    }else {
      y = 0;
    }
  }
}

Symbol symbol;

class Stream {
  int totalSymbols = round(random(5, 30));
  Symbol[] symbols = new Symbol[500];
  float speed = random(5, 20);

  //generates the symbols and adds them to the array, each symbol one symbol 
  //height above the one previous
  void generateSymbols() {
    int y = 0;
    int x = width / 2;

    for (int i = 0; i <= totalSymbols; i++) {
      symbols[i] = new Symbol(x, y, speed);
      symbols[i].setToRandomSymbol();
      y -= symbolSize;
    }
  }

  void render() {
    for(Symbol s : symbols) {
      fill(0, 255, 70);
      s.setToRandomSymbol();
      text(s.value, s.x, s.y);
      s.rain();
    }
  }
}

好的,那是很多代码,让我解释一下我的困境。我遇到的问题是,当我运行代码时,我在渲染函数中的每个循环中得到一个NullpointerExctive在s.setToR0007 Symble();方法调用。关于这个NullPointerExctive错误的奇怪部分和我不理解的部分是,它被抛在一个不接受任何可能返回空参数的方法上,并且该方法本身是无效的,所以它不应该返回任何东西,对吗?为什么这个返回为空,我做错了什么让它以这种方式返回?

共有1个答案

韶镜
2023-03-14

首先,你会得到一个介于5和30之间的随机数:

INT总计符号=圆(随机(5,30));

然后创建一个数组,其中包含Symbol类的500实例:

Symbol[] symbols = new Symbol[500];

请注意,这个数组此时包含500个null值。

然后将最多30个Symbol实例添加到数组中:

for (int i = 0; i <= totalSymbols; i++) {
  symbols[i] = new Symbol(x, y, speed);

请注意,这个数组现在至少包含470个null值。

然后遍历所有500个索引:

for(Symbol s : symbols) {
  s.setToRandomSymbol();

但是请记住,这些索引中至少有470个是null,这就是为什么您会得到一个NullPointerExctive

一些基本的调试会告诉你这一切。在出现错误之前,我会先html" target="_blank">添加一条基本的println()语句:

for(Symbol s : symbols) {
  println("s: " + s);
  s.setToRandomSymbol();

这将表明您正在迭代null值。

无论如何,为了解决问题,您需要停止对整个数组进行迭代,或者您需要停止为您从未使用过的索引腾出空间。

以后,请在发帖前将问题缩小到MCVE。请注意,这个小得多的示例程序显示了您的错误:

String[] array = new String[10];
array[0] = "test";
for(String s : array){
  println(s.length());
}
 类似资料:
  • 我是python的新手,在处理矩阵时遇到了一个问题。 我有一个矩阵,比方说 现在,我想让矩阵中的所有元素都等于零,除了在矩阵中重复最多次的元素。(在这种情况下,它是3)。 所以预期的结果是, 如果有人能帮我做这个的python代码,那真的很有帮助。

  • 问题内容: 我有一些以表示的数据。它是一个未知大小的张量(应分批输入),每个项目的大小都为。经历,所以现在有尺寸,其中是嵌入尺寸并指未知的批量大小。 此处描述: 我现在正尝试将输入数据中的每个样本(现在通过嵌入维度进行扩展)乘以矩阵变量,而我似乎不知道该怎么做。 我首先尝试使用,但是由于形状不匹配而导致错误。然后,我通过扩展的维度和应用来尝试以下操作(我还尝试了从进行的功能,结果相同): 这将通过

  • 问题内容: 我正在尝试使用NLTK和熊猫创建术语文档矩阵。我写了以下函数: 运行它 它适用于语料库中的一些小文件,但是 当我尝试使用4,000个文件(每个约2 kb)的语料库运行它时,出现 MemoryError 。 我想念什么吗? 我正在使用32位python。(在Windows 7、64位OS,Core Quad CPU,8 GB RAM上)。我真的需要对这种大小的语料库使用64位吗? 问题答

  • null 完整代码:

  • 在处理过程中,当您应用矩阵变换时,您可以在画布上绘制,而不必担心x-y坐标的“真实”位置。 我认为按照同样的逻辑,我可以通过使用parentapplet.get(x,y,width,height)复制画布的一部分,它会自动移动x和y,但它不会,它使用坐标作为原始输入,而不对其应用矩阵堆栈。 因此,我认为处理这个问题的最简单方法是手动将矩阵堆栈应用于x、y、width和height值,并将结果用作g

  • 当我试图在页面的内容流中添加文本时,我很难理解PDFBox的行为。我使用的是一个样本扫描PDF,它只是一个叠加在页面上的光栅图像。我的PDF内部工作知识有些基础,所以我可能走错了方向。 http://solutions.weblite.ca/pdfocrx/scansmpl.pdf 我将PDFBox 2.0.11与sbt一起使用: 我的第一步是创建一个内容流,并在PDF上写“你好世界”,我通过以下