我在Proccessing中有以下程序,我试图找到一种从TXT文件中读取变量值的方法。
static final int ribbon_length = 255, H = 200;
void setup() {
size(ribbon_length, H); //Διαστάσεις παλέτας
}
void draw() {
float p = 1;
int up_y = 10;
int widthh = 1;
int height = 180;
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(widthh*step, up_y, widthh, height);
noStroke();
}
}
我想从txt读取的值是
float p = 1;
int up_y = 10;
int widthh = 1;
int height = 180;
我找到BufferedReader命令,但我不确定它是否是我想要的。我试着ρθν一个例子..但它没有用......
BufferedReader reader;
String line;
static final int ribbon_length = 255, H = 200;
void setup() {
size(ribbon_length, H);
reader = createReader("positions.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();
}
}
答案 0 :(得分:1)
你可以有一个简单的txt,其中每一行都是一个变量,所以你可以像这样使用BufferedReader。
BufferedReader br = new BufferedReader(new FileReader("fileName.txt"));
然后用br.readLine()
读取每一行,然后最后将读取行分配给变量,将其转换为必要的类型。例如,如果您的行是int,则必须执行
int myInt = Integer.parseInt(br.readLine())
您还可以拥有一个属性文件,其中每行的格式为“key = value”。您可以尝试使用此网页加载该属性文件:http://www.mkyong.com/java/java-properties-file-examples/(请参阅第2部分:加载属性文件)
答案 1 :(得分:1)
首先:命名变量width
和height
是个坏主意,因为这些是构建在Processing中的特殊变量。你应该使用不同的东西,比如wide
和high
。
最简单的方法是使用这样的裸文本文件:
1
10
1
180
就像我写的一样。然后,您可以使用Processing的内置函数来读取这些值。这些是xp500的答案提供的更容易的替代品,这是纯java的正确答案。
void setup(){
....
String[] lines = loadStrings("positions.txt");
float p = float(lines[0]);
int up_y = int(lines[1]);
int wide = int(lines[2]);
int high = int(lines[3]);
....
}
这将有效,但由于存在大量硬编码值,因此无法维护。如果文本文件顶部有一个额外的空行怎么办?第一行(lines[0]
)不具有p
的值,第二行(lines[1]
)将具有p
的值,而不是up_y
}的!这只是要记住的事情。如果您最终在文本文件中有其他内容(例如变量名称),则可以使用split()从字符串中获取数字。例如:
文本文件:
p=1
up_y=10
处理代码:
String[] lines = loadStrings("input.txt")
float p = float(split(lines[0], "=")[1]); // split on the "=" and take the second element
int up_y = int(split(lines[1], "=")[1]);
如果选择这种方法,您甚至可以在分配之前检查行中的变量名称,以防万一文件混乱。像if(!lines[0].contains("p")) print("error!");