是否可以缩短if-else-if语句,我该怎么做?

Sha*_*olf 0 java if-statement

我创建了这个if-else-if语句,并且想知道我是否能够缩短它以便它不占用太多空间.如果有人知道如何做到这一点,请帮忙!

if (seatNum <= 20) System.out.println("Row 1");
else if (seatNum > 20 && seatNum <= 40) System.out.println("Row 2");
else if (seatNum > 40 && seatNum <= 60) System.out.println("Row 3");
else if (seatNum > 60 && seatNum <= 80) System.out.println("Row 4");
else if (seatNum > 80 && seatNum <= 100) System.out.println("Row 5");
else if (seatNum > 100 && seatNum <= 120) System.out.println("Row 6");
else if (seatNum > 120 && seatNum <= 140) System.out.println("Row 7");
else if (seatNum > 140 && seatNum <= 160) System.out.println("Row 8");
else if (seatNum > 160 && seatNum <= 180) System.out.println("Row 9");
else if (seatNum > 180 && seatNum <= 201) System.out.println("Row 10");
else if (seatNum > 201 && seatNum <= 216) System.out.println("Row 11");
else if (seatNum > 216 && seatNum <= 231) System.out.println("Row 12");
else if (seatNum > 231 && seatNum <= 246) System.out.println("Row 13");
else if (seatNum > 246 && seatNum <= 261) System.out.println("Row 14");
else if (seatNum > 261 && seatNum <= 276) System.out.println("Row 15");
else if (seatNum > 276 && seatNum <= 291) System.out.println("Row 16");
else if (seatNum > 291 && seatNum <= 306) System.out.println("Row 17");
else if (seatNum > 306 && seatNum <= 321) System.out.println("Row 18");
else if (seatNum > 321 && seatNum <= 336) System.out.println("Row 19");
else if (seatNum > 336 && seatNum <= 351) System.out.println("Row 20");
Run Code Online (Sandbox Code Playgroud)

编辑:包括座位201.抱歉所有的混乱!

Tur*_*g85 9

我们可以使用intJava 中的-divisions总是向零舍入,这意味着5 / 2 == 2-5 /2 == -2.

因为seatNum <= 0,行总是1.只要seatNum <= 200,排是((seatNum - 1) / 20) + 1.如果是> 201,我们可以简单地采取((seatNum - 202) / 15) + 11.我们减去202因为数字是由以下因素引起的2:216仍在行中11,217在行中12.同样适用于231232.通过这个计算,未定义的座位201将成排11,但忽略此输入或抛出Exception相反没什么大不了的.

// if (seatNum != 201) { // optional, to neglect seat 201
    System.out.print("Row: "); // yes, I am that lazy...
    if (seatNum <= 0) {
        System.out.println(1);
    } else if ((seatNum <= 200) /* && (seatNum > 0) */) {
        System.out.println(((seatNum - 1)/ 20) + 1);
    } else /* if (seatNum > 200) */ {
        System.out.println(((seatNum - 202) / 15) + 11);   
    }
// }
Run Code Online (Sandbox Code Playgroud)

如果行变得更复杂/不规则,我可能会部署Dale解决方案的略微变化.这似乎具有可读性和可扩展性.

  • 数学不太合适.`setNum == 20`应该产生`"第1行"`,但你的产生`"行:2"`.如果`setNum`为负,它也会产生与OP不同的结果. (4认同)
  • 是的,但可维护/可读,而不是. (4认同)