论坛首页 Java企业应用论坛

奇怪的 switch() case 题目

浏览 16572 次
精华帖 (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
一样的道理。
1 请登录后投票
   发表时间:2009-04-02   最后修改:2009-04-03
建立一个公式吧

Y=X<1:0?(X<5?X:5)

这样不知道可以不?没用过嵌套三元表达式
0 请登录后投票
   发表时间: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>


















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");
		}
	}
}

魔幻数字。。。。
0 请登录后投票
   发表时间: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
0 请登录后投票
论坛首页 Java企业应用版

跳转论坛:
Global site tag (gtag.js) - Google Analytics