鉴于这种方法,这是否代表了一些令人震惊的风格或语义失误:
private double translateSlider(int sliderVal) {
switch (sliderVal) {
case 0:
return 1.0;
case 1:
return .9;
case 2:
return .8;
case 3:
return .7;
case 4:
return .6;
default:
return 1.0;
}
}
Run Code Online (Sandbox Code Playgroud)
这显然不符合这里的Java教程.
然而,它清晰,简洁,到目前为止已经完全符合我的需要.是否有令人信服的实用理由创建局部变量,在每种情况下为其赋值,为每个案例添加一个中断并在方法结束时返回值?
有人可以建议我如何替换下面的代码如何重写代码以避免重复块 case 3:{code block A; break;}
`
switch(i){
case 1:{code block A; break;}
case 2:{code block b; break;}
case 3:{code block A; break;}
default: {code block default; break;}
}
Run Code Online (Sandbox Code Playgroud)
`
如何结合案例1和案例3的代码
.Net 4(或任何先前版本)是否基于字符串对较长的switch语句执行任何类型的优化?
我正在解决潜在的性能瓶颈,因为一些长的switch语句在这些情况下寻找匹配的字符串,我一直认为这些是在线性时间内搜索的(或接近线性的,即不使用索引来快速找到匹配串).但这似乎是.Net可以优化的一个显而易见的领域,所以我想我会检查是否是这种情况.
这是我最近的一个衍生问题:索引切换语句,或同等的?.net,C#
我必须在switch声明中实现以下内容:
switch(num)
{
case 4:
// some code ;
break;
case 3:
// some code ;
break;
case 0:
// some code ;
break;
case < 0:
// some code ;
break;
}
Run Code Online (Sandbox Code Playgroud)
可以对switch语句进行评估case < 0吗?如果没有,我怎么能这样做?
我有另一种情况.我有一个包含值的变量('Weekly','Monthly','Quarterly','Annual'),我有另一个变量,它保存从1到10的值.
switch ($var2) {
case 1:
$var3 = 'Weekly';
break;
case 2:
$var3 = 'Weekly';
break;
case 3:
$var3 = 'Monthly';
break;
case 4:
$var3 = 'Quarterly';
break;
case 5:
$var3 = 'Quarterly';
break;
// etc.
}
Run Code Online (Sandbox Code Playgroud)
它不漂亮,因为我的代码有很多重复.我想要的是:
switch ($var2) {
case 1, 2:
$var3 = 'Weekly';
break;
case 3:
$var3 = 'Monthly';
break;
case 4, 5:
$var3 = 'Quarterly';
break;
}
Run Code Online (Sandbox Code Playgroud)
我怎么能在PHP中做到这一点?先感谢您.对不起我的英语不好.
我如何打开一个设置了flags属性的枚举(或更精确地用于位操作)?
我希望能够在与所声明的值匹配的开关中击中所有情况.
问题是,如果我有以下枚举
[Flags()]public enum CheckType
{
Form = 1,
QueryString = 2,
TempData = 4,
}
Run Code Online (Sandbox Code Playgroud)
我想用这样的开关
switch(theCheckType)
{
case CheckType.Form:
DoSomething(/*Some type of collection is passed */);
break;
case CheckType.QueryString:
DoSomethingElse(/*Some other type of collection is passed */);
break;
case CheckType.TempData
DoWhatever(/*Some different type of collection is passed */);
break;
}
Run Code Online (Sandbox Code Playgroud)
如果"theCheckType"设置为CheckType.Form | CheckType.TempData我希望它能同时击中两个案例.显然,由于中断,它不会在我的示例中同时出现,但除此之外它也会失败,因为CheckType.Form不等于CheckType.Form | CheckType.TempData
那么我能看到的唯一解决方案就是为每个可能的枚举值组合做一个案例?
就像是
case CheckType.Form | CheckType.TempData:
DoSomething(/*Some type of collection is passed */);
DoWhatever(/*Some different type of collection is passed */);
break; …Run Code Online (Sandbox Code Playgroud) 我发现自己陷入了一件非常微不足道的事情: - ]
我有一个枚举:
object Eny extends Enumeration {
type Eny = Value
val FOO, BAR, WOOZLE, DOOZLE = Value
}
Run Code Online (Sandbox Code Playgroud)
在代码中,我必须将它有条件地转换为数字(varianr-number对应关系因上下文而异).我写:
val en = BAR
val num = en match {
case FOO => 4
case BAR => 5
case WOOZLE => 6
case DOOZLE => 7
}
Run Code Online (Sandbox Code Playgroud)
这给了我每个分支的"无法访问代码"编译器错误,但无论第一个是什么(在这种情况下"情况FOO => 4").我究竟做错了什么?
int a = 10;
switch(a){
case 0:
printf("case 0");
break;
case 1:
printf("case 1");
break;
}
Run Code Online (Sandbox Code Playgroud)
以上代码有效吗?
如果我确定int a不会有除1和0之外的任何其他值,我可以避免default吗?
如果在任何情况下一个值与1和0不同怎么办?
我知道这是一个愚蠢的问题,但我在想,也许这将是非法的或未定义的行为,所以我只是要求确认.
假设有以下代码:
private static int DoSwitch(string arg)
{
switch (arg)
{
case "a": return 0;
case "b": return 1;
case "c": return 2;
case "d": return 3;
}
return -1;
}
private static Dictionary<string, Func<int>> dict = new Dictionary<string, Func<int>>
{
{"a", () => 0 },
{"b", () => 1 },
{"c", () => 2 },
{"d", () => 3 },
};
private static int DoDictionary(string arg)
{
return dict[arg]();
}
Run Code Online (Sandbox Code Playgroud)
通过迭代这两种方法并进行比较,即使"a","b","c","d"扩展为包含更多键,我也会得到字典稍快一些.为什么会这样?
这与圈复杂度有关吗?是因为抖动只将字典中的return语句编译为本机代码一次?是因为字典的查找是O(1),这可能不是switch语句的情况?(这些只是猜测)