A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 李春阳 中级黑马   /  2012-6-6 13:26  /  2007 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 李春阳 于 2012-6-6 13:27 编辑

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

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

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

5 个回复

正序浏览
三楼很强大,基本概念都规定好了,虽然楼主想实现但也不外乎以下说明:以下是复制
switch()里可以放int,byte,short,char
5.0之后就可以放枚举(enum)
这是因为byte,short,char,枚举(enum),他们会自动转换为int类型
所以~~最后放的还是int类型.
JDk7.0之后就可以放String类型的了。
对于String,可以通过定义枚举来实现的,将字符串作为枚举。
回复 使用道具 举报
  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. }

复制代码

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
是的 。switch只能针对基本数据类型使用,这些类型包括int和string等。对于其他类型,则必须使用if语句。
但如果真的想要使用,可以通过定义枚举来实现的。将字符串作为枚举,然后通过toDay方法返回的是一个int的值。这样就可以让switch接受String的条件了。如代码:


回复 使用道具 举报
switch()里可以放int,byte,short,char
5.0之后就可以放枚举(enum)
这是因为byte,short,char,枚举(enum),他们会自动转换为int类型
所以~~最后放的还是int类型.
JDk7.0之后就可以放String类型的了。
对于String,可以通过定义枚举来实现的,将字符串作为枚举。

评分

参与人数 1技术分 +1 收起 理由
袁錦泰 + 1

查看全部评分

回复 使用道具 举报
你可以用强转啊,把其他类型转换为那四种类型,在Integer中有转换int类型的方法,同理在Character中有转换为char的方法。,例如:你要用String “abc”,可以用int a=Integer.parseInt(abc);就把字符串转换为int了,就可以用a作为while条件。
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马