黑马程序员技术交流社区

标题: 关于switch括弧内数据类型的疑问 [打印本页]

作者: 李春阳    时间: 2012-6-6 13:26
标题: 关于switch括弧内数据类型的疑问
本帖最后由 李春阳 于 2012-6-6 13:27 编辑

关于switch括弧内参数的疑问
相信大家经常使用if语句,但是当连续使用if...else if....else if...的时候,我们就会想到用switch
但是switch有一个很纠结的地方,我发现有的数据类型可以用,有的不可以。。

就去查了下标准用法,发现switch语句的判断条件只接受int,byte,char,short。。其他都不行!!!
那我非要~用其他类型的呢,比如String。。。

求助,不要换其他方法- - 我就是想用switch!

作者: 吴小铁你好    时间: 2012-6-6 13:35
你可以用强转啊,把其他类型转换为那四种类型,在Integer中有转换int类型的方法,同理在Character中有转换为char的方法。,例如:你要用String “abc”,可以用int a=Integer.parseInt(abc);就把字符串转换为int了,就可以用a作为while条件。
作者: 张洁    时间: 2012-6-6 13:35
switch()里可以放int,byte,short,char
5.0之后就可以放枚举(enum)
这是因为byte,short,char,枚举(enum),他们会自动转换为int类型
所以~~最后放的还是int类型.
JDk7.0之后就可以放String类型的了。
对于String,可以通过定义枚举来实现的,将字符串作为枚举。
作者: 王超    时间: 2012-6-6 13:46
是的 。switch只能针对基本数据类型使用,这些类型包括int和string等。对于其他类型,则必须使用if语句。
但如果真的想要使用,可以通过定义枚举来实现的。将字符串作为枚举,然后通过toDay方法返回的是一个int的值。这样就可以让switch接受String的条件了。如代码:



作者: 王超    时间: 2012-6-6 13:47
  1. public enum Day

  2. {

  3. SUNDAY, MONDAY, TUESDAY, WEDNESDAY,

  4. THURSDAY, FRIDAY, SATURDAY,

  5. NOVALUE;


  6. public static Day toDay(String str)

  7. {

  8. try {

  9. return valueOf(str);

  10. }

  11. catch (Exception ex) {

  12. return NOVALUE;

  13. }

  14. }

  15. }

  16. main:方法体测试

  17. Scanner s=new Scanner(System.in);

  18. String day=s.next();//输入的字符串

  19. switch(Day.toDay(day.toUpperCase())){

  20. case SUNDAY:

  21. System.out.println("星期天");

  22. break;

  23. case MONDAY:

  24. System.out.println("星期一");

  25. break;

  26. case TUESDAY:

  27. System.out.println("星期二");

  28. break;

  29. }

复制代码

作者: 武剑峰    时间: 2012-6-6 14:51
三楼很强大,基本概念都规定好了,虽然楼主想实现但也不外乎以下说明:以下是复制
switch()里可以放int,byte,short,char
5.0之后就可以放枚举(enum)
这是因为byte,short,char,枚举(enum),他们会自动转换为int类型
所以~~最后放的还是int类型.
JDk7.0之后就可以放String类型的了。
对于String,可以通过定义枚举来实现的,将字符串作为枚举。




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2