可以缩短此 switch 语句吗?
Can this switch statement be shortened?
这个 switch 语句可以缩短吗?这是这样做的正确方法吗?很简单的事情,不知道用switch有没有意义
这部分代码遍历数组以获取颜色的强度值(从 0 到大约 10),并使用 allegro 库绘制具有该颜色的正方形。所以对于 7 和更多它将是黑色的,对于更少它将是灰色的并且对于 1 它将是非常浅的灰色。
for (int j = 0; j < 50; j++) {
for (int i = 0; i < 50; i++) {
int value = cells[i + j * 50];
if(value > 0) {
unsigned char color;
switch (value) {
case 1 :
color = 200;
break;
case 2 :
color = 180;
break;
case 3 :
color = 140;
break;
case 4 :
color = 100;
break;
case 5 :
color = 60;
break;
case 6 :
color = 40;
break;
case 7 :
color = 20;
break;
default: color = 0;
}
al_draw_filled_rectangle(i * 8, 400 - (j * 8), i * 8 + 8, 400 - (j * 8 + 8),
al_map_rgb(color, color, color));
}
}
}
您可以使用查找 table 而不是 switch
语句
static const unsigned char COLORS[] = { 0, 200, 180, 140, 100, 60, 40, 20 };
unsigned char color =
value >= 0 && value < sizeof COLORS / sizeof *COLORS ? COLORS[value] : 0;
可以改写为:
int colors[]={100,80,60,40,20};
for (int j = 0; j < 50; j++) {
for (int i = 0; i < 50; i++) {
int value = cells[i + j * 50];
unsigned int color=0;
color=colors[value];
}
}
这应该可以帮助您缩短开关。你只需要浪费 7 行来填充你的地图:
#include <map>
#include <iostream>
using namespace std;
int main() {
int color;
int value;
cout << "Enter a color value 1-7: ";
cin >> value;
map<int, int> colormap;
colormap[1] = 200;
colormap[2] = 180;
// etc...
color = colormap[value];
cout << "color = " << color << endl;
return 0;
}
这个 switch 语句可以缩短吗?这是这样做的正确方法吗?很简单的事情,不知道用switch有没有意义
这部分代码遍历数组以获取颜色的强度值(从 0 到大约 10),并使用 allegro 库绘制具有该颜色的正方形。所以对于 7 和更多它将是黑色的,对于更少它将是灰色的并且对于 1 它将是非常浅的灰色。
for (int j = 0; j < 50; j++) {
for (int i = 0; i < 50; i++) {
int value = cells[i + j * 50];
if(value > 0) {
unsigned char color;
switch (value) {
case 1 :
color = 200;
break;
case 2 :
color = 180;
break;
case 3 :
color = 140;
break;
case 4 :
color = 100;
break;
case 5 :
color = 60;
break;
case 6 :
color = 40;
break;
case 7 :
color = 20;
break;
default: color = 0;
}
al_draw_filled_rectangle(i * 8, 400 - (j * 8), i * 8 + 8, 400 - (j * 8 + 8),
al_map_rgb(color, color, color));
}
}
}
您可以使用查找 table 而不是 switch
语句
static const unsigned char COLORS[] = { 0, 200, 180, 140, 100, 60, 40, 20 };
unsigned char color =
value >= 0 && value < sizeof COLORS / sizeof *COLORS ? COLORS[value] : 0;
可以改写为:
int colors[]={100,80,60,40,20};
for (int j = 0; j < 50; j++) {
for (int i = 0; i < 50; i++) {
int value = cells[i + j * 50];
unsigned int color=0;
color=colors[value];
}
}
这应该可以帮助您缩短开关。你只需要浪费 7 行来填充你的地图:
#include <map>
#include <iostream>
using namespace std;
int main() {
int color;
int value;
cout << "Enter a color value 1-7: ";
cin >> value;
map<int, int> colormap;
colormap[1] = 200;
colormap[2] = 180;
// etc...
color = colormap[value];
cout << "color = " << color << endl;
return 0;
}