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

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

© 邱成 中级黑马   /  2012-9-6 09:24  /  1033 人查看  /  5 人回复  /   0 人收藏 转载请遵从CC协议 禁止商业使用本文

本帖最后由 邱成 于 2012-9-6 10:44 编辑

我写了一段java代码,结果控制台提示找不到符号c,请帮我看一下哪里出错,下面是代码和错误提示,谢了
import java.io.*;
class  Swich
{
        public static void main(String[] args)
        {
                try{
            //输入流,从键盘接收数据
                        InputStreamReader isr = new InputStreamReader(System.in);
                        BufferedReader br = new BufferedReader(isr);
                        //给出提示
                        System.out.println("请输入一个字符");
                        //从控制台读取一行数据
                        String sr = br.readLine();
                        char[] c = sr.toCharArray();
                }
                catch(Exception e){
            e.printStackTrace();
                }
                switch (c)
                {
                case 'a':
            System.out.println("星期一");
                    break;
                case 'b':
                    System.out.println("星期二");
                        break;
                case 'c':
            System.out.println("星期三");
                    break;
                case 'd':
                    System.out.println("星期四");
                        break;
                case 'e':
            System.out.println("星期五");
                    break;
                case 'f':
                    System.out.println("星期六");
                        break;
                case 'g':
            System.out.println("星期日");
                    break;
                default:
                        System.out.println("输入错误");
                }
        }
}



1.jpg (16.26 KB, 下载次数: 15)

1.jpg

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

5 个回复

倒序浏览
switch 里面只能是基本数据类型,和枚举,别的不行
回复 使用道具 举报
本帖最后由 彭润生 于 2012-9-6 09:50 编辑

try{
             //输入流,从键盘接收数据
                         InputStreamReader isr = new InputStreamReader(System.in);
                         BufferedReader br = new BufferedReader(isr);
                         //给出提示
                         System.out.println("请输入一个字符");
                         //从控制台读取一行数据
                         String sr = br.readLine();
                         char[] c = sr.toCharArray();//你的这个c定义在try块里面,而你的switch(c)在外面,出了c的范围当然没有了。
                 }
                 catch(Exception e){
             e.printStackTrace();
                 }
                 switch (c)
//楼上说的也对,switch里面只能放基本类型和枚举,如果要用可以在try catch外面声明一个变量 然后在里面赋值。
回复 使用道具 举报
本帖最后由 佟亚鹏 于 2012-9-6 10:19 编辑

楼主注意了,首先你的代码11行处,char数组c是定义在try语句中,出了try语句下面的程序肯定找不到这个变量了,其次另外就像二楼说的那样--
switch 里面只能是基本数据类型,和枚举,别的不行
但这个说的是java7之前,java7中的switch支持String类型
例子程序:
                public class Test {                        

                        public void test(String str) {
                                switch (str) {
                                case "abc":
                                        System.out.println("abc");
                                        break;
                                case "def":
                                        System.out.println("def");
                                        break;
                                default:
                                        System.out.println("default");
        
                                }        
                        }
                }
楼主可以装了jdk7,试试看,他的原理是比较hashcode
----------------------------------------------------------------------
楼主的代码稍微改下也能实现你想要的功能
1、把char数组定义在外面
2、把c[0]传入switch语句中,这样就可以通过比较字符的assic码实现功能,代码如下
public static void main(String[] args)
     {
                 char[] c = null;
             try{
         //输入流,从键盘接收数据
                     InputStreamReader isr = new InputStreamReader(System.in);
                     BufferedReader br = new BufferedReader(isr);
                     //给出提示
                     System.out.println("请输入一个字符");
                     //从控制台读取一行数据
                     String sr = br.readLine();
                     c = sr.toCharArray();
             }
             catch(Exception e){
         e.printStackTrace();
             }

                        switch (c[0])
             {
             case 'a':
         System.out.println("星期一");
                 break;
             case 'b':
                 System.out.println("星期二");
                     break;
             case 'c':
         System.out.println("星期三");
                 break;
             case 'd':
                 System.out.println("星期四");
                     break;
             case 'e':
         System.out.println("星期五");
                 break;
             case 'f':
                 System.out.println("星期六");
                     break;
             case 'g':
         System.out.println("星期日");
                 break;
             default:
                     System.out.println("输入错误");
             }
     }

评分

参与人数 1技术分 +1 收起 理由
王德升 + 1 赞一个!

查看全部评分

回复 使用道具 举报
在switch语句中选择值只能是字符或常量,在JDK1.5之后,switch也支持枚举类的判断!
回复 使用道具 举报
  1. import java.io.*;
  2. class  Swich
  3. {
  4.         public static void main(String[] args)
  5.        {
  6.                         char[] c = new  char[1024];
  7.                 try{
  8.             //输入流,从键盘接收数据
  9.                         InputStreamReader isr = new InputStreamReader(System.in);
  10.                         BufferedReader br = new BufferedReader(isr);
  11.                         //给出提示
  12.                         System.out.println("请输入一个字符");
  13.                         //从控制台读取一行数据
  14.                         String sr = br.readLine();
  15.                         c = sr.toCharArray();
  16.                 }
  17.                 catch(Exception e){
  18.                                         e.printStackTrace();
  19.                 }
  20.                 switch (c[0])
  21.                 {
  22.                 case 'a':
  23.             System.out.println("星期一");
  24.                     break;
  25.                 case 'b':
  26.                     System.out.println("星期二");
  27.                         break;
  28.                 case 'c':
  29.             System.out.println("星期三");
  30.                     break;
  31.                 case 'd':
  32.                     System.out.println("星期四");
  33.                         break;
  34.                 case 'e':
  35.             System.out.println("星期五");
  36.                     break;
  37.                 case 'f':
  38.                     System.out.println("星期六");
  39.                         break;
  40.                 case 'g':
  41.             System.out.println("星期日");
  42.                     break;
  43.                 default:
  44.                         System.out.println("输入错误");
  45.                 }
  46.         }
  47. }
复制代码
哥们这样就好了吧  其实switch里面只能放基本类型和枚举,如果要用可以在try catch外面声明一个变量 然后在里面赋值。这样就能行的
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马