关于Java switch语句-在每种情况下使用return和省略break

关于Java switch语句-在每种情况下使用return和省略break,java,return,switch-statement,case,break,Java,Return,Switch Statement,Case,Break,考虑到这种方法,这是否代表了一些令人震惊的文体或语义失误: private double translateSlider(int sliderVal) { switch (sliderVal) { case 0: return 1.0; case 1: return .9; case 2: return .8; case 3: r

考虑到这种方法,这是否代表了一些令人震惊的文体或语义失误:

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;
    }
}  
这显然与Java教程不一致


然而,它清晰、简洁,到目前为止已经产生了我所需要的东西。是否有令人信服的、实用的理由创建一个局部变量,在每个案例中为其赋值,在每个案例中添加一个中断,并在方法末尾返回值

将一个值赋给局部变量,然后在最后返回该值被认为是一种良好的做法。具有和的方法可能很难阅读

也就是说,这是这个范例唯一的优点。它起源于只有低级过程语言存在的时候。这在当时更有意义


当我们谈论这个话题时,你必须。这是一本有趣的书。

不,你有的很好。您也可以使用公式(
sliderVal<5?(1.0-0.1*sliderVal):1.0
)或使用
Map
,但您所拥有的一切都很好。

我建议您不要使用文字


除此之外,样式本身看起来很好。

如果您要有一个方法,它只运行开关,然后返回一些值,那么请确保这种方法有效。但是,如果您希望在方法中使用其他内容进行切换,则不能使用return,否则方法中的其余代码将无法执行。注意,在教程中,代码后面是如何打印的?你的人不能这样做。

为什么不

private double translateSlider(int sliderval) {
if(sliderval > 4 || sliderval < 0)
    return 1.0d;
return (1.0d - ((double)sliderval/10.0d));
}
专用双平移滑动器(int sliderval){
如果(sliderval>4 | | sliderval<0)
返回1.0d;
返回(1.0d-((双)滑动/10.0d));
}
还是类似的?

是的,这很好。 教程并不总是体贴整洁的。
不仅如此,创建局部变量是浪费空间和低效的

从人类智能的角度看,您的代码很好。从静态代码分析工具的角度来看,存在多个返回,这使得调试更加困难。e、 不能在返回之前设置一个且唯一的断点

此外,您不会在专业应用程序中硬编码4个滑块步骤。 使用max-min等计算值,或者 在数组中查找它们:

public static final double[] SLIDER_VALUES = {1.0, 0.9, 0.8, 0.7, 0.6};
public static final double SLIDER_DEFAULT = 1.0;


private double translateSlider(int sliderValue) {
  double result = SLIDER_DEFAULT;
  if (sliderValue >= 0 && sliderValue < SLIDER_VALUES.length) {
      ret = SLIDER_VALUES[sliderValue];
  }

  return result;
}
publicstaticfinaldouble[]SLIDER_值={1.0,0.9,0.8,0.7,0.6};
公共静态最终双滑块_默认值=1.0;
专用双translateSlider(int sliderValue){
双结果=滑块\默认值;
if(sliderValue>=0&&sliderValue
我认为你写的很好。我也不认为有多个return语句有任何可读性问题

当我知道返回时,我总是希望从代码中的点返回,这将避免在返回下面运行逻辑

对于调试和日志记录,可以使用一个返回点。
但是,在您的代码中,如果我们使用它,就不会有调试和日志记录的问题。按照您编写的方式,它非常简单且可读。

将人类逻辑转换为计算机生成的字节码的最佳情况是使用如下代码:

private double translateSlider(int sliderVal) {
  float retval = 1.0;

  switch (sliderVal) {
    case 1: retval = 0.9; break;
    case 2: retval = 0.8; break;
    case 3: retval = 0.7; break;
    case 4: retval = 0.6; break;
    case 0:
    default: break;
  }
  return retval;
}
从而消除方法中的多个出口,并在逻辑上使用该语言。(即,当sliderVal为1-4的整数范围时,更改浮点值,否则如果sliderVal为0和所有其他值,则retval保持相同的浮点值1.0)

然而,如果sliderVal的每个整数值都是
(n-(n/10))
的话,我们真的可以做一个lambda,得到更快的结果:

private double translateSlider = (int sliderVal) -> (1.0-(siderVal/10));
编辑:
模数4可以是为了保持逻辑(即
(n-(n/10))%4)

尽管问题已经足够老了,但现在仍然可以引用它


从语义上讲,这正是Java12引入的(),因此,在这个简单的示例中,我看不到任何问题或缺点。

我觉得这很好。switch语句是该方法的唯一内容,它清晰易读,因此非常有意义。这种比较在哪里?开关在一个int上。在我自己的错觉中:)误读,认为双返回是一个
case
语句。这不会给出与OP code相同的返回值
0.1
没有精确的二进制表示法,将其与
sliderVal
相乘,会使精度误差增加。@RohitJain在一般情况下,当然;但是在这种情况下,你得到了
0的相同值?不鼓励操作员:您提出的解决方案解决了多次返回警告,但触发了?操作人员warning@AlexWien“被劝阻了”?不要让这听起来像是一条绝对的规则;有很多人对一个不受约束的三元运算符很满意。如果你不喜欢它,对你头脑中的If-else进行琐碎的扩展;我的主要观点是,这个问题可以解决,而无需对6个选项进行粗暴的强化。地图是个坏主意。这里不需要用大炮射击小鸟(可能翻译得不好)。一个简单的固定数组就足够了。这在计算上不如你的解决方案“快”,因此如果你想节省周期,浮点运算可能不是一个好的选择——或者如果你想寻找更多的“配置”(也就是说,数学不总是这么好).@SubSeven当用户用缓慢的手指移动滑块时,永远不需要保存循环。即使是速度最慢的嵌入式设备也远远超过了他的手指。代码的可读性和清晰性是最高标准。硬编码的4触发了另一个警告(幻数),不应该是如果(sliderVal>0&&sliderVal IDK,在那里你学会了这样的黑客行为,但是本地变量总是被垃圾收集器删除,并且只停留在方法的上下文中,因为它被调用了,所以永远不会低效或无效“浪费空间”。链接到一个SO帖子,说多个出口都不好。到目前为止,在这个问题上,投票最多的答案是“它主要是com”