锁定老帖子 主题:奇怪的 switch() case 题目
精华帖 (0) :: 良好帖 (0) :: 新手帖 (0) :: 隐藏帖 (1)
|
|
---|---|
作者 | 正文 |
发表时间:2009-03-30
最后修改:2009-03-30
寻梦之龙 写道 duduli 写道 public static void testCase(int x) {
switch (x) { case 1: System.out.println("is 1"); break; case 2: case 3: case 4: System.out.println("is 2 3 4"); break; default: x = x>4?5:-1; case 5: System.out.println("big 4"); break; case -1: System.out.println("less 1"); } } Head First设计模式■ 群共同努力 Ta的运行不正确 正确运行: public class SpecialSwitch { public static void main(String[] args){ int data[]=new int[]{5}; int len=data.length; for(int i=0;i<len;i++){ testCase(data[i]); } } public static void testCase(int x) { int data=x; System.out.println(data); switch (data) { case 1: System.out.println("is 1"); break; case 2: case 3: case 4: System.out.println("is 2 3 4"); break; default: data = data>4?5:-1; case -1: System.out.println("less 1"); break; case 5: System.out.println("big 4"); break; } } } 没理解switch的用法,就乱写,换了位置和没换都一样有问题啊。不相信,你测试下6,结果是less 1 default: data = data>4?5:-1; case -1: System.out.println("less 1"); break; case 5: System.out.println("big 4"); break; 这个其实了解一下switch语句用if else来实现就知道了。 始终是判断data的,如果找不到,就按default处理,如果default没有break跳出语句,那么他后面的语句将依次执行。 所以如果data的值不是{1,2,3,4,5,-1}中一个的话,都会执行接下来的case语句,打印less 1。 然后break跳出,所以case 5语句始终是没有执行到的。 你换个位置,只不过是把case 5始终执行,case -1 永远不执行罢了。 其实和 switch(1){ case 1 : System.out.println(1); case 2 : System.out.println(2); break; } 打印 1 2 一样的道理。 |
|
返回顶楼 | |
发表时间:2009-04-02
最后修改:2009-04-03
建立一个公式吧
Y=X<1:0?(X<5?X:5) 这样不知道可以不?没用过嵌套三元表达式 |
|
返回顶楼 | |
发表时间:2009-09-15
纯路过。。。
![]() def bt_case(x) infinity = -1/0.0 case x when (infinity...1) then puts "less then 1" when 1 then puts "x is 1" when (2..4) then puts "one of 2 3 4" when (5..-infinity) then puts " bigger then 4" end end 结果: irb(main):065:0> bt_case(1) x is 1 => nil irb(main):066:0> bt_case(0) less then 1 => nil irb(main):067:0> bt_case(-1) less then 1 => nil irb(main):068:0> bt_case(2) one of 2 3 4 => nil irb(main):069:0> bt_case(3) one of 2 3 4 => nil irb(main):070:0> bt_case(5) bigger then 4 => nil irb(main):071:0> bt_case(8) bigger then 4 => nil irb(main):072:0> bt_case(8.5) bigger then 4 => nil irb(main):073:0> |
|
返回顶楼 | |
发表时间:2009-09-15
ninecat 写道 都不对,题目很明显只让用switch 而不能用其他的判断比如if\3元表达式(for 和while应该也不算)
看看这个怎么样: public class Switch { public static void main(String[] args) { int x =5; try { switch ((x-1)/x) { case 1: case 2: System.out.println("x is less than 1"); break; default: switch ((x+4)/x) { case 5: System.out.println("x is 1"); break; case 3: case 2: System.out.println("x is 2,3,4"); break; case 1: System.out.println("x is greater than 4"); break; } break; } } catch (Exception e) { System.out.println("x is less than 1"); } } } ![]() |
|
返回顶楼 | |
发表时间:2009-09-16
我的处女帖就给了你吧!
以下是我的除了switch case以外没有其他判断的实现。 public class Switch { public static void main(String[] args) { for (int x = -10; x < 10; x++) { System.out.print(x); switch (x) { case 1: System.out.println(" is 1"); break; case 2: case 3: case 4: System.out.println(" is 2,3 or 4"); break; default: switch (-x % (x - 1)) { case -1: System.out.println(" is greater than 4"); break; default: System.out.println(" is less than 1"); break; } break; } } } } 结果 -10 is less than 1 -9 is less than 1 -8 is less than 1 -7 is less than 1 -6 is less than 1 -5 is less than 1 -4 is less than 1 -3 is less than 1 -2 is less than 1 -1 is less than 1 0 is less than 1 1 is 1 2 is 2,3 or 4 3 is 2,3 or 4 4 is 2,3 or 4 5 is greater than 4 6 is greater than 4 7 is greater than 4 8 is greater than 4 9 is greater than 4 |
|
返回顶楼 | |