java - 从处理中的文本中读取值

标签 java processing

我尝试在Kevinsa5的帮助下在Processing中转换以下程序以从txt文件中读取变量,但我不知道为什么不起作用。我做错了什么?程序运行时不会显示任何错误,只是打开的 Canvas 没有显示应有的任何颜色。

static final int ribbon_length = 255, H = 200;

void setup() {
  size(ribbon_length, H);
}

void draw() {
  String[] lines = loadStrings("input.txt");
  float p = float(split(lines[0], "=")[1]);
  int up_y = int(split(lines[1], "=")[1]);
  int wide = int(split(lines[2], "=")[1]);
  int high = int(split(lines[3], "=")[1]);
  float a = pow (ribbon_length, 1-p);
  float colour = 0;
  for (int step = 0; step <= 255; step++) {
      colour = a * pow (step, p);
      fill(colour,0,0);
      rect(wide*step, up_y, wide, high);
      noStroke();
   }
}

最佳答案

删除分号是一个好主意,因为它简化了代码必须执行的操作。然而,沿着 = 分割字符串会得到 "float p ""5" —— 注意 5 之前的空格!字符串中数字之前的空格使其无法解析:

println("with a space: \t" + int(" 5"));
println("without a space: \t" + int("5"));

给出这个输出:

with a space:       0
without a space:    5

现在,看看你的代码。您绝对不需要每秒读取文本文件 60 次,因此请将其从 draw() 移至 setup()。由于您想要删除每个值之前的空格,因此您可以像使用分号一样编辑文本文件,或者只是更改拆分方式。不要按 "=" 拆分,而是按 "= " 拆分。这代表了上述变化:

static final int ribbon_length = 255, H = 200;
float p;
int up_y, wide, high;

void setup() {
  size(ribbon_length, H);
  String[] lines = loadStrings("input.txt");
  p = float(split(lines[0], " = ")[1]);
  println(p);
  up_y = int(split(lines[1], " = ")[1]);
  println(up_y);
  wide = int(split(lines[2], " = ")[1]);
  println(wide);
  high = int(split(lines[3], " = ")[1]);
  println(high);
}

void draw() {
  float a = pow (ribbon_length, 1-p);
  float colour = 0;
  for (int step = 0; step <= 255; step++) {
      colour = a * pow (step, p);
      fill(colour,0,0);
      rect(wide*step, up_y, wide, high);
      noStroke();
   }
}

这是输入:

float p = 5
int up_y = 10
int wide = 5
int high = 10

当您遇到意外行为时,调试的第一步通常是使用 println() 查看变量的值。在您的代码中,大多数情况下都会打印 0 ,这表明文本文件中的数字不知何故没有进入变量(要么您读错了,要么您读错了)解析它们是错误的)。然后,如果您细心的话,打印类似 println(split(lines[0], "=")[1]) 的内容会显示出多余的空间。然后您可以在几分钟内得到答案,而不必等待 16 个多小时才有人回答问题:)

关于java - 从处理中的文本中读取值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22009421/

相关文章:

java - Spring 多个数据源不读取某些应用程序属性

java - 如何判断套接字是否已断开连接(Java)

Java 时区问题

java - 处理 IntList.remove() 抛出 ArrayIndexOutOfBounds : 10 exception

javascript - javascript中包含特殊字符的多行字符串?

c# - 为什么 kinect 演示在我的电脑上速度很慢?

java - 无状态阻塞服务器设计

java - 如何在 WildFly 上禁用 WELD

java - 如何通过将颜色更改为红色来显示正在排序的行?

java - 处理视频库在 Linux (Ubuntu 13.04) 上不起作用