我需要为可以使用的范围值实现switch语句,但我认为switch的性能会更好。
我有这样的要求,如果变量的值在1-150之间,我将处理我的逻辑。如果变量的值在150-300之间,那么其他一些逻辑,如果范围在300-450,那么一些不同的逻辑等等。
所以在这种情况下如何使用开关,因为我通常使用固定值的开关。提前谢谢。
这是不可能的。
如果您检查开关
的Java语言规范,您将看到case
之后的表达式必须是ConstantExpress
或EnumConstantName
。
这两者都不能是范围。
评论中指出了一些替代方案。您可以使用if
语句;除非您有大量的案例,否则它不会在性能方面产生很大差异。
或者您可以(根据此答案,由@tomas在评论中链接)创建单独的函数来区分不同的范围。
如果范围是规则的(例如101-200、201-300等),也可以使用公式。小心舍入错误!测试公式的边缘情况以确保其正确。
我建议你用一个公式
switch (value / 150) {
case 0: // 0 - 149
break;
case 1: // 150 - 299
break;
case 2: // 300 - 449
break;
default: // otherwise.
}
如果使用(value-1)/150,则得到1-150、151-300、301-450等
编辑:案例0也将接受开关((value-1)/150{…}中的-148-0由于整除的性质。为了避免这种情况,可以使用if/else语句以及条件运算符。
我试图理解switch语句。所以我已经解决了这个问题。“软件公司销售的软件包零售价为99美元。数量折扣如下: 10-19=20% 20-49=30% 50-99=40% 100或更多=50% 编写一个程序,要求用户输入购买的软件包数量。然后,程序应显示折扣金额(如果有)和折扣后的购买总额。 我使用结构和几个关系运算符,它看起来像这样 我想知道是否可以将可能的数字范围存储在单个变量中,然后将其用于语
问题内容: 在Java中,是否可以编写一个switch语句,其中每种情况都包含多个值?例如(尽管以下代码显然不起作用): 我认为这可以在Objective C中完成,Java中是否有类似的东西?或者我应该只使用,语句呢? 问题答案: Java没有这种东西。为什么不执行以下操作?
在Java中,是否可以编写一个switch语句,其中每个大小写包含多个值?例如(尽管下面的代码显然不起作用): 我认为目标C可以这样做,Java是否也有类似的事情?还是只使用、语句?
在Java中,当我们声明 它会给编译时间错误,但是 编译得很好。为什么会这样?
我有一个Nx2矩阵,例如: 我需要创建一个Nx3矩阵,它以以下方式反映第一个矩阵中的行之间的关系: 使用右列标识范围边界的候选对象,条件为value 此条件适用于矩阵: 到目前为止,我提出了“M[M[:,1] 到目前为止我想到的是:np。差异(M[:,0]) 这就是我被困的地方。我想用这个条件来定义一个范围的上下边界。例如: 最后,回到第一个矩阵,我想为边界内(包括边界)的每个范围添加右列值。 所