从Processing中的文本中读取值

时间:2014-02-25 09:11:56

标签: java processing

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

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

2 个答案:

答案 0 :(得分:2)

删除分号是一个好主意,因为它简化了代码必须执行的操作。但是,沿着=分割字符串会为您提供"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个多小时让某人回答这个问题:)

答案 1 :(得分:1)

如果您的输入符合您对Sanjeevs评论的回复(例如,浮点数p = 5; int up_y = 10;等),那么您遇到问题是因为您不只是将数字加载到变量中,而是也加载了分号。

例如,取文本文件的第一行'float p = 5;'。当你将这个字符串拆分为'='时,这两个部分将是'float'和'5;'。变量类型float不能处理半冒号。

要解决这个问题,我建议编辑'intput.txt'并删除每行末尾的分号。然后,您应该只将数字加载到变量中。