我可以描述我正在寻找的最好的方法是向您展示我迄今为止尝试过的失败代码:
case car
when ['honda', 'acura'].include?(car)
# code
when 'toyota' || 'lexus'
# code
end
Run Code Online (Sandbox Code Playgroud)
我有大约4或5种不同的when情况应该由大约50种不同的可能值触发car.有没有办法用case块来做这个或者我应该尝试一个大块if?
我正在研究一些需要高度优化的Java代码,因为它将在我的主程序逻辑中的许多点调用的热函数中运行.此代码的一部分涉及将double变量乘以10凸起到任意非负int exponents.一个快速的方式(编辑:但不是最快的,见下面的更新2)获得相乘的值是switch在exponent:
double multiplyByPowerOfTen(final double d, final int exponent) {
switch (exponent) {
case 0:
return d;
case 1:
return d*10;
case 2:
return d*100;
// ... same pattern
case 9:
return d*1000000000;
case 10:
return d*10000000000L;
// ... same pattern with long literals
case 18:
return d*1000000000000000000L;
default:
throw new ParseException("Unhandled power of ten " + power, 0);
}
}
Run Code Online (Sandbox Code Playgroud)
上面注释的省略号表示case int常量继续递增1,因此case上面的代码片段中确实有19 秒.因为我不知道我是否真的需要10一切权力,并case声明 …
java compiler-construction performance assembly switch-statement
在我的代码中,程序根据用户输入的文本执行某些操作.我的代码看起来像:
switch (name) {
case text1: {
//blah
break;
}
case text2: {
//blah
break;
}
case text3: {
//blah
break;
}
case text4: {
//blah
break;
}
Run Code Online (Sandbox Code Playgroud)
然而,案件里面的代码text1和text4是一样的.因此,我想知道是否有可能实现类似的东西
case text1||text4: {
//blah
break;
}
Run Code Online (Sandbox Code Playgroud)
我知道||运算符不会在case语句中工作,但是我可以使用类似的东西.
我有一个使用switch case for instanceofobject的问题:
例如:我的问题可以用Java重现:
if(this instanceof A)
doA();
else if(this instanceof B)
doB();
else if(this instanceof C)
doC():
Run Code Online (Sandbox Code Playgroud)
如何使用switch...case?
首先,我将说明我对C#中的枚举更加熟悉,看起来java中的枚举非常混乱.
正如您所看到的,我正在尝试在下一个示例中使用switch语句@enums,但无论我在做什么,我总是会收到错误.
我收到的错误是:
SomeClass.AnotherClass.MyEnum.VALUE_A必须使用不合格的枚举常量替换合格的案例标签VALUE_A
事情是我非常理解错误,但我不能只编写VALUE_A,因为枚举位于另一个子类中.有没有办法解决这个问题?为什么它会在Java中发生?
//Main Class
public class SomeClass {
//Sub-Class
public static class AnotherClass {
public enum MyEnum {
VALUE_A, VALUE_B
}
public MyEnum myEnum;
}
public void someMethod() {
MyEnum enumExample //...
switch (enumExample) {
case AnotherClass.MyEnum.VALUE_A: { <-- error on this line
//..
break;
}
}
}
}
Run Code Online (Sandbox Code Playgroud) 在我的第一次代码审查(前一段时间)中,我被告知在所有switch语句中包含一个default子句是一种好习惯.我最近记得这个建议,但不记得理由是什么.这对我来说听起来很奇怪.
总是包含默认声明是否有合理的理由?
这种语言是依赖的吗?我不记得当时我用的是什么语言 - 也许这适用于某些语言而不适用于其他语言?
是一种switch说法实际上比更快的if声明?
我使用/Ox标志在Visual Studio 2010的x64 C++编译器上运行下面的代码:
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
#define MAX_COUNT (1 << 29)
size_t counter = 0;
size_t testSwitch()
{
clock_t start = clock();
size_t i;
for (i = 0; i < MAX_COUNT; i++)
{
switch (counter % 4 + 1)
{
case 1: counter += 4; break;
case 2: counter += 3; break;
case 3: counter += 2; break;
case 4: counter += 1; break;
}
}
return …Run Code Online (Sandbox Code Playgroud) switch case当你需要在同一个案例中测试a 或 b时,你将如何使用?
switch (pageid) {
case "listing-page" || "home-page":
alert("hello");
break;
case "details-page":
alert("goodbye");
break;
}
Run Code Online (Sandbox Code Playgroud) 有没有办法在php开关中使用'OR'运算符或等效运算符?例如,像这样:
switch ($value) {
case 1 || 2:
echo 'the value is either 1 or 2';
break;
}
Run Code Online (Sandbox Code Playgroud) 所以我想使用这样的开关语句:
switch (scrollLeft) {
case (<1000):
//do stuff
break;
case (>1000 && <2000):
//do stuff
break;
}
Run Code Online (Sandbox Code Playgroud)
现在我知道这些语句(<1000)或(>1000 && <2000)中的任何一个都不起作用(显然有不同的原因).我要问的是最有效的方法.我讨厌使用30个if语句,所以我宁愿使用switch语法.有什么我可以做的吗?
switch-statement ×10
java ×4
assembly ×2
javascript ×2
performance ×2
c ×1
case ×1
comparison ×1
default ×1
enums ×1
fall-through ×1
instanceof ×1
jquery ×1
jump-table ×1
php ×1
ruby ×1
syntax ×1