我的switch-case语句昨天运行得很好.但是当我今天早些时候运行代码时,eclipse给了我一个错误,用红色突出显示case语句并说:case表达式必须是常量表达式,它是常量我不知道发生了什么.这是我的代码如下:
public void onClick(View src)
{
switch(src.getId()) {
case R.id.playbtn:
checkwificonnection();
break;
case R.id.stopbtn:
Log.d(TAG, "onClick: stopping srvice");
Playbutton.setImageResource(R.drawable.playbtn1);
Playbutton.setVisibility(0); //visible
Stopbutton.setVisibility(4); //invisible
stopService(new Intent(RakistaRadio.this,myservice.class));
clearstatusbar();
timer.cancel();
Title.setText(" ");
Artist.setText(" ");
break;
case R.id.btnmenu:
openOptionsMenu();
break;
}
}
Run Code Online (Sandbox Code Playgroud)
所有R.id.int都用红色加下划线.
我知道switch/ selectcase在每个案例后自动中断.我想知道,在以下代码中:
for {
switch sometest() {
case 0:
dosomething()
case 1:
break
default:
dosomethingelse()
}
}
Run Code Online (Sandbox Code Playgroud)
是否break声明退出for循环或只是switch块?
这就是我想要做的:
switch(myvar)
{
case: 2 or 5:
...
break;
case: 7 or 12:
...
break;
...
}
Run Code Online (Sandbox Code Playgroud)
我尝试了"case:2 || 5",但它没有用.
目的是不为不同的值编写相同的代码.
担心我的网络应用程序的性能,我想知道哪个"if/else"或switch语句在性能方面更好?
为什么在C#switch语句中,对于在多种情况下使用的变量,您只在第一种情况下声明它?
例如,以下引发错误"已在此范围中定义名为'variable'的局部变量".
switch (Type)
{
case Type.A:
string variable = "x";
break;
case Type.B:
string variable = "y";
break;
}
Run Code Online (Sandbox Code Playgroud)
但是,根据逻辑,如果类型为,则不应该触发初始声明Type.B.switch语句中的所有变量是否都存在于单个作用域中,是否在处理任何逻辑之前创建/分配它们?
我只是想知道为什么Java 7 switch语句不支持一个null案例而是抛出NullPointerException?请参阅下面的注释行(示例摘自Java Tutorials文章switch):
{
String month = null;
switch (month) {
case "january":
monthNumber = 1;
break;
case "february":
monthNumber = 2;
break;
case "march":
monthNumber = 3;
break;
//case null:
default:
monthNumber = 0;
break;
}
return monthNumber;
}
Run Code Online (Sandbox Code Playgroud)
这样可以避免if在每次switch使用之前进行空检查的条件.
我看到了这个问题的一些答案,我明白了 - 你不能在一个内部声明和分配变量switch.但我想知道以下是否正确抛出错误说
错误:'int'之前的预期表达式
码:
switch (i) {
case 0:
int j = 1;
break;
}
Run Code Online (Sandbox Code Playgroud)
为什么NSLog()在它之前拨打电话会导致没有错误?
switch (i) {
case 0:
NSLog(@"wtf");
int j = 1;
break;
}
Run Code Online (Sandbox Code Playgroud) 有没有办法在更少的行上写这个,但仍然容易阅读?
var month = '';
switch(mm) {
case '1':
month = 'January';
break;
case '2':
month = 'February';
break;
case '3':
month = 'March';
break;
case '4':
month = 'April';
break;
case '5':
month = 'May';
break;
case '6':
month = 'June';
break;
case '7':
month = 'July';
break;
case '8':
month = 'August';
break;
case '9':
month = 'September';
break;
case '10':
month = 'October';
break;
case '11':
month = 'November';
break;
case '12':
month = 'December';
break;
}
Run Code Online (Sandbox Code Playgroud) 只要我记得我已经避免使用switch语句.实际上,我不记得它曾经进入我的意识作为一种可能的做事方式,因为它早在我的头脑中钻了它只不过是转换语句中的一个错误.然而,今天我遇到了一些在设计中使用它的代码,这让我立刻想知道社区中的每个人都认为有关switch语句的漏洞.
这是编程语言应该明确不允许的东西(比如C#,但它提供了一种解决方法),还是任何语言的功能都足以留给程序员手中?
编辑: 我没有具体到达我的意思.我经常使用这种类型:
switch(m_loadAnimSubCt){
case 0:
case 1:
// Do something
break;
case 2:
case 3:
case 4:
// Do something
break;
}
Run Code Online (Sandbox Code Playgroud)
但是,我很担心这样的事情.
switch(m_loadAnimSubCt){
case 0:
case 1:
// Do something but fall through to the other cases
// after doing it.
case 2:
case 3:
case 4:
// Do something else.
break;
}
Run Code Online (Sandbox Code Playgroud)
这种方式只要大小写为0,1就会在switch语句中执行所有操作.我已经通过设计看到了这一点,我只是不知道我是否同意以这种方式使用switch语句.我认为第一个代码示例非常有用且安全.第二个似乎有点危险.
我正在写一些看起来像这样的代码:
while(true) {
switch(msg->state) {
case MSGTYPE: // ...
break;
// ... more stuff ...
case DONE:
break; // **HERE, I want to break out of the loop itself**
}
}
Run Code Online (Sandbox Code Playgroud)
有没有直接的方法呢?
我知道我可以使用一个标志,并通过在切换后放置一个条件中断来从循环中断.我只是想知道C++是否已经有了一些构造.
switch-statement ×10
java ×3
break ×2
c# ×2
android ×1
c ×1
c++ ×1
coding-style ×1
date ×1
date-format ×1
declaration ×1
go ×1
if-statement ×1
javascript ×1
loops ×1
objective-c ×1
performance ×1
select ×1
syntax ×1
variables ×1