switch 不能用成员变量吗
时间: 2024-03-16 13:46:59 浏览: 15
在Java中,switch语句的表达式只能是一个整数型(byte、short、char、int)或枚举类型,不能是浮点型、布尔型和字符串类型等其他类型。在Java SE 7及之前的版本中,switch语句的表达式还不能是long类型。因此,如果要在switch语句中使用成员变量,需要将成员变量赋值给一个整数型或枚举类型的局部变量,然后再将局部变量作为switch语句的表达式使用。例如:
```
public class MyClass {
private int status;
public void testSwitch() {
int statusCopy = status; // 将成员变量赋值给局部变量
switch (statusCopy) {
case 0:
// do something
break;
case 1:
// do something
break;
default:
// do something
break;
}
}
}
```
需要注意的是,如果成员变量的值发生改变,对应的局部变量也需要重新赋值。另外,为了防止局部变量被修改,可以使用final修饰符将其声明为常量。
相关问题
c语言switch中表达式是多个变量
在C语言的switch语句中,表达式通常只是一个变量或常量。但是,如果你想要在switch语句中使用多个变量作为表达式,可以使用一个结构体来包含这些变量,然后把结构体作为表达式使用。例如:
```
struct mystruct {
int var1;
int var2;
};
struct mystruct myvar = {1, 2};
switch(myvar.var1) {
case 1:
// do something
break;
case 2:
// do something else
break;
default:
// do something by default
break;
}
```
在这个例子中,我们定义了一个结构体`mystruct`,包含了两个整型变量`var1`和`var2`。我们创建了一个结构体变量`myvar`,并初始化了它的两个成员变量。在switch语句中,我们使用了结构体变量`myvar`的成员变量`var1`作为表达式,来决定执行哪个case分支。
枚举变量申明结构体成员
枚举变量可以用于申明结构体的成员。枚举变量可以定义一组具有相同类型的常量,并将它们作为结构体的成员使用。下面是一个示例代码[^1]:
```c
#include <stdio.h>
// 定义枚举类型
enum Weekday {
Monday,
Tuesday,
Wednesday,
Thursday,
Friday,
Saturday,
Sunday
};
// 定义结构体
struct Date {
int day;
int month;
int year;
enum Weekday weekday; // 使用枚举变量作为结构体成员
};
int main() {
struct Date today;
today.day = 15;
today.month = 9;
today.year = 2021;
today.weekday = Thursday;
printf("Today is %d/%d/%d, ", today.day, today.month, today.year);
switch (today.weekday) {
case Monday:
printf("Monday.\n");
break;
case Tuesday:
printf("Tuesday.\n");
break;
case Wednesday:
printf("Wednesday.\n");
break;
case Thursday:
printf("Thursday.\n");
break;
case Friday:
printf("Friday.\n");
break;
case Saturday:
printf("Saturday.\n");
break;
case Sunday:
printf("Sunday.\n");
break;
}
return 0;
}
```
这段代码定义了一个枚举类型`Weekday`,表示一周的星期几。然后定义了一个结构体`Date`,其中包含了一个枚举类型的成员`weekday`。在`main`函数中,创建了一个`Date`类型的变量`today`,并对其成员进行赋值。最后,根据`weekday`的值,使用`switch`语句打印出今天是星期几。