使用带有for循环和鼠标单击的Switch语句来更改case返回的数据

问题描述 投票:0回答:1

我正在尝试使用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;
  }
}
javascript java processing
1个回答
-1
投票

问题是,当切换的值从0更改为1或从1更改为0时,控件未达到switch...case,因为switch...casesetup内部按下鼠标时不会被调用。它适用于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;
    } 
}
© www.soinside.com 2019 - 2024. All rights reserved.