我正在尝试使用switch语句在用户单击鼠标时返回不同的列。目前,我已设置为click(toggle == 0)返回有效的第2列。然后,当toggle = 1时,返回列0,这是代码无法正常工作的地方。我希望我的dataMax和dataMin在case:0和case:1之间变化。当我为情况0手动更改它时:我看到了值的变化,正如我所期望的。下面是我的代码:
FloatTable locationTable;
FloatTable dataTable;
float dataMin = MAX_FLOAT;
float dataMax = MIN_FLOAT;
int rowCount;
int toggle = 0;
void setup() {
// font = loadFont("Univers-Bold-12.vlw");
// textFont(font);
size(650,400);
dataTable = new FloatTable("povertynoheader.tsv");
mapImage = loadImage("map.png");
locationTable = new FloatTable("locations.tsv");
rowCount = locationTable.getRowCount();
// Read the data table.
switch (toggle) {
case 0:
// Find the minimum and maximum values.
for (int row = 0; row < rowCount; row++) {
float value = dataTable.getFloat(row, 2);
if (value > dataMax) {
dataMax = value;
}
if (value < dataMin) {
dataMin = value;
}
}
break;
case 1:
// Find the minimum and maximum values.
for (int row = 0; row < rowCount; row++) {
float value = dataTable.getFloat(row, 0);
if (value > dataMax) {
dataMax = value;
}
if (value < dataMin) {
dataMin = value;
}
}
break;
void mousePressed() {
if (toggle == 0 ) {
toggle = 1;
} else {
toggle = 0;
}
}
问题是,当切换的值从0
更改为1
或从1
更改为0
时,控件未达到switch...case
,因为switch...case
在setup
内部按下鼠标时不会被调用。它适用于0
,因为您已经用toggle
初始化了0
。
要么按如下方式调用setup
:
void mousePressed() {
if (toggle == 0 ) {
toggle = 1;
} else {
toggle = 0;
}
setup();
}
或将switch...case
移动/复制到其他方法,例如说someFunction() {...}
并称其为
void mousePressed() {
if (toggle == 0 ) {
toggle = 1;
} else {
toggle = 0;
}
someFunction();
}
您还可以通过将通用代码放入方法中来重构代码,例如
switch (toggle) {
case 0:
for (int row = 0; row < rowCount; row++) {
setMaxMin (dataTable.getFloat(row, 2));
}
break;
case 1:
for (int row = 0; row < rowCount; row++) {
setMaxMin (dataTable.getFloat(row, 0));
}
}
void setMaxMin(float value) {
if (value > dataMax) {
dataMax = value;
}
if (value < dataMin) {
dataMin = value;
}
}