有没有办法在switch语句中创建一个case条件,你会说一个字符串是否以某个东西开头?
前
Switch (mystring)
{
case("abc")://String begins with abc (abcd or abc1 or abcz or abc.. or abc will fall in this condition).
//Do Something
break;
default:
break;
}
Run Code Online (Sandbox Code Playgroud)
更新 其他字符串可以是不同的长度.
ABC ..
abczyv
dcs2.
QWERTY
问
我的老师已经分配了一个程序来使用if-else语句和switch语句,因此我们了解如何实现它们.该程序要求我们提示用户分别以磅和米为单位输入他们的体重和身高.这是我的尝试:
没有开关
#include "stdafx.h"
#include <iostream>
using namespace std;
int main()
{
double height, weight, BMI, heightMeters, weightKilo;
const double KILOGRAMS_PER_POUND = 0.45359237;
const double METERS_PER_INCH = 0.0245;
cout << "Please enter your height (inches) and weight (pounds)" << endl;
cin >> height >> weight;
weightKilo = weight*KILOGRAMS_PER_POUND;
heightMeters = height*METERS_PER_INCH;
BMI = weightKilo / (heightMeters*heightMeters);
if (BMI < 18.5) {
cout << "You are underweight " << endl;
}
else if (BMI >= 18.5 && …Run Code Online (Sandbox Code Playgroud) 我同意以下代码:
var y = switch (0) {
case 0 -> '0';
case 1 -> 0.0F;
case 2 -> 2L;
case 3 -> true;
default -> 4;
};
System.out.println(y);
System.out.println(((Object) y).getClass().getName());
Run Code Online (Sandbox Code Playgroud)
返回此:
0
java.lang.Character
Run Code Online (Sandbox Code Playgroud)
但是,如果删除布尔值:
var y = switch (0) {
case 0 -> '0';
case 1 -> 0.0F;
case 2 -> 2L;
default -> 4;
};
System.out.println(y);
System.out.println(((Object) y).getClass().getName());
Run Code Online (Sandbox Code Playgroud)
返回此:
48.0
java.lang.Float
Run Code Online (Sandbox Code Playgroud)
我想这个结果是出乎意料的。
在C switch-case流控件中,需要在该块中定义if变量之后放置花括号{}case.
case无论变量声明如何,在每次之后放置大括号是不好的做法吗?
例如:
switch(i) {
case 1: {
int j = 4;
...code...
} break;
case 2: { //No variable being declared! Brace OK?
...code...
} break;
}
Run Code Online (Sandbox Code Playgroud) 如果我将一个对象传递给case语句,并且有一个未定义的情况,我可以处理这种情况吗?如果是这样呢?如果不可能,那么处理交换机的未定义情况的最佳做法是什么?
我有以下枚举
enum EditMode {
View = 0,
Edit = 1,
Delete = 2
}
Run Code Online (Sandbox Code Playgroud)
假设我有一个枚举类型的变量
var editMode = EditMode.Edit;
Run Code Online (Sandbox Code Playgroud)
为什么以下代码不起作用(直接默认)?
switch (editMode) {
case EditMode.Delete:
...
break;
case EditMode.Edit:
...
break;
default:
...
break;
}
Run Code Online (Sandbox Code Playgroud) 我不确定这个有效的C#,但希望你能得到这个想法.:)
switch (msg.GetType()) {
case ClassA:
// blah
case ClassB:
// blah 2
case ClassC:
// blah 3
}
Run Code Online (Sandbox Code Playgroud)
我如何使用VB.NET打开对象的类型Select Case?
我知道有些人可能会建议使用多态,但我使用的是小型消息类的层次结构,所以在我的情况下真的不行.
假设您有n个案例,我想知道switch语句的最坏情况运行时复杂性是什么.
我一直认为它是O(n).不过,我不知道编译器是否能做任何聪明的事情.如果答案是特定于实现的,我想知道以下语言:
我在C/Objective-C/C++中使用大括号和我的所有switch case语句
直到不久之前,我还没有考虑过break;在括号内加入声明是好还是坏.我怀疑它没关系,但我认为它仍然值得问.
switch (foo) {
case 1: {
// stuff
break;
}
default: {
break;
}
}
Run Code Online (Sandbox Code Playgroud)
VS
switch (foo) {
case 1: {
// stuff
} break;
default: {
// stuff
} break;
}
Run Code Online (Sandbox Code Playgroud) 我正在尝试switch使用字符串的char索引和使用此包装器的Enum 创建语句,以从描述中获取所选枚举的值.它几乎允许您将字符串存储到枚举值.
这是我的if发言:
if (msgComingFromFoo[1] == Convert.ToChar(Message.Code.FOO_TRIGGER_SIGNAL.EnumDescriptionToString()))
{
//foo
}
Run Code Online (Sandbox Code Playgroud)
这是我的switch发言:
switch (msgComingFromFoo[1])
{
case Convert.ToChar(Message.Code.FOO_TRIGGER_SIGNAL.EnumDescriptionToString()):
break;
}
Run Code Online (Sandbox Code Playgroud)
为什么接受if声明而不是switch?我尝试将它转换为char,因为我从字符串中选择索引,但不幸的是它没有用.
更新:
这是Message.CodeEnum
public class Message
{
public enum Code
{
[Description("A")]
FOO_TRIGGER_SIGNAL
}
}
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,我需要分配给枚举不枚举值是0.使用说明Message.Code.FOO_TRIGGER_SIGNAL.EnumDescriptionToString()自提包装回报A不0
错误:
期望一个恒定的价值
switch-statement ×10
c ×2
c# ×2
algorithm ×1
big-o ×1
c++ ×1
case ×1
coding-style ×1
curly-braces ×1
enums ×1
if-statement ×1
java ×1
java-12 ×1
javascript ×1
select-case ×1
string ×1
typescript ×1
vb.net ×1