在你while(cChar != 'A')之前,循环体就已经执行了一次了!而且当cChar != 'A'时才执行循环体,可是你的循环体里又有                         if (cChar == 'A')
System.out.println("退出");

解决方案 »

  1.   

    建议将while语句提到前面去,先while再做
      

  2.   

    建议用case语句,这么多的if else看着自己都容易搞错的!
      

  3.   

    以前用C做过类似的东西,用的是Switch嵌套.
    switch(charIn){
     case 'A':
      {
        for(char charIn_A=null;charIn_A!=null;){charIn_A=(char)System.in.read(); }
        switch(charIn_A){
        case '1':...;
        case '2':...;
        }
      }
      break;
     case 'B':.....;
     ........
     case 'X':.....;
    }具体记不太清楚了,过程大致就是这个样子...
      

  4.   

    不知道你们是否明白我的程序的意图,我的程序的意图是,开始就进入循环体DO...WHILE,开始显示菜单,等待输入字符,那一连串的IF将判断,将根据输入的字符会做哪一步,WHILE将判断如果不是字符A将一直循环下去。
    问题是,如果输入的不是A,在下一次的循环中,没有等待我的输入,程序就循环了3遍,才等待我的再一次的输入,我不明白这是怎么了??请教输入的如果是数字,因为使用System.in.read()后,读入的是ASCII码,如何将读入的ASCII码转化为我输入的数字呢??
      

  5.   

    跟踪了一遍,发现问题了.
    我机器上的运行结果是:
    A--退出BCDEFGEnter a Character:t
    t超出范围A--退出BCDEFGEnter a Character:
    超出范围A--退出BCDEFGEnter a Character:
    问提出在:cChar = (char) System.in.read();
    这是由于你输入的不是't',而是't'+'\n',不信自己跟踪一遍...
    你将输入输出部分再好好看一下吧.
    不过强烈不建议楼主使用那么多的if!switch才是正确的合理的写法.下面是在下修改过的代码,测试通过.import java.io.*;public class TEST {
      public static void main(String[] args) throws IOException {
        char cChar;
        try {
          do {
            System.out.println("A--退出");
            System.out.println("B");
            System.out.println("C");
            System.out.println("D");
            System.out.println("E");
            System.out.println("F");
            System.out.println("G");
            System.out.print("Enter a Character:");
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            cChar = (char) br.read();        System.out.println(cChar);
            switch (cChar) {
              case 'A':
                System.out.println("退出");
                break;
              case 'B':
              case 'C':
              case 'D':
              case 'E':
              case 'F':
              case 'G':
                System.out.println(cChar);
                break;          default:
                System.out.println("超出范围");
                break;
            }
          }
          while (cChar != 'A');
        }
        catch (IOException e) {
          System.out.println("SQLException: " + e.getMessage());
        }
      }
    }
    结果:A--退出BCDEFGEnter a Character:t
    t超出范围A--退出BCDEFGEnter a Character:
      

  6.   

    e恩,放着这么好的SWITCH不用非要用DOWHILE!
      

  7.   


      
       
       
     
            登 录..      [注 册]      忘记密码      注销登录             
    csdn.net  首 页  | 第二书店  | 社 区  | 专 题  | 精 华  | SUN  | IBM  | 微 软  | 微 创  | 书 社  | 《程序员》  | 调 查  | 聊 天  | 黄 页  
    新 闻  | Donews  | 文 档  | FAQ  | 专 栏  | 人 才  | 培 训  | 移 动  | 人 邮  | 清 华  | 《开发高手》  | 搜 索  | 软 件  | 会 员  
     
     2004.10.9   
     CSDN - 技术社区 - Java Java Enterprise Open Source问题  
     回复 | 推荐 | 收藏 | 专题 | 公告 | 管理 | 保存 | 关闭窗口   
     
     
    我的问题 
    我参与问题 
    我得分问题 
    我的短消息 
    我的收藏夹   
     主  题:  请教一个JAVA程序的问题?  
    作  者:  d_4_f_5 (公子小白)  
    等  级:    
    信 誉 值:  100  
    所属社区:  Java Java Enterprise Open Source  
    问题点数:  1  
    回复次数:  7  
    发表时间:  2004-10-08 09:18:02  
       
     
       
    我编写了一个JAVA的菜单选择的程序,如下:
    import java.io.*;
    public class TEST {
    public static void main(String[] args) throws IOException
    { char cChar;
    try 
    {
    do
    {
    System.out.println("A--退出");
    System.out.println("B");
    System.out.println("C");
    System.out.println("D");
    System.out.println("E");
    System.out.println("F");
    System.out.println("G");

    System.out.print("Enter a Character:");

    cChar = (char) System.in.read();

    System.out.println(cChar);

    if (cChar == 'A')
    System.out.println("退出");
    else
    {
    if (cChar == 'B')
    {
    System.out.println("B");
    }
    else
    {
    if (cChar == 'C')
    System.out.println("C");
    else
    {
    if (cChar == 'D') 
    System.out.println("D");
    else
    {
    if (cChar == 'E')
    System.out.println("E");
    else
    {
    if (cChar == 'F')
    System.out.println("F");
    else
    {
    if (cChar == 'G')
    System.out.println("F");
    else
    {
    System.out.println("超出范围");

    }
    }
    }
    }
    }
    }
    }
    }while(cChar != 'A');
    }
    catch (IOException e) 
    {
    System.out.println("SQLException: "+e.getMessage());
    }
    }
    }
    程序可以运行,但是运行的不对,比如我输入T,按照程序的运行顺序,应该显示T,超出范围,再次显示菜单,但是程序运行后,输入T后,显示如下:
    A--退出
    B
    C
    D
    E
    F
    G
    Enter a Character:T
    T
    超出范围
    A--退出
    B
    C
    D
    E
    F
    G
    Enter a Character:超出范围
    A--退出
    B
    C
    D
    E
    F
    G
    Enter a Character:超出范围
    A--退出
    B
    C
    D
    E
    F
    G
    Enter a Character:
    程序应该在输出第二次菜单的时候,等待我的输入,为什么没有呢?
    在我输入正常的字母如“D”时,也是多显示了两次菜单,这是怎么回事?还有,请问,输入的如果是数字,因为使用System.in.read()后,读入的是ASCII码,如何将读入的ASCII码转化为我输入的数字呢??  
      回复人: ww425(W.wEI) ( ) 信誉:100  2004-10-08 15:51:00  得分: 0  
     
     
       在你while(cChar != 'A')之前,循环体就已经执行了一次了!而且当cChar != 'A'时才执行循环体,可是你的循环体里又有                         if (cChar == 'A')
    System.out.println("退出");  
     
    Top  
     
     回复人: bluesky35(蓝天) ( ) 信誉:167  2004-10-09 08:37:00  得分: 0  
     
     
       建议将while语句提到前面去,先while再做
      
     
    Top  
     
     回复人: netskychw(网天) ( ) 信誉:100  2004-10-09 09:02:00  得分: 0  
     
     
       建议用case语句,这么多的if else看着自己都容易搞错的!
      
     
    Top  
     
     回复人: skylovers(琴声刺骨(卖头哭学JAVA)) ( ) 信誉:100  2004-10-09 10:22:00  得分: 0  
     
     
       以前用C做过类似的东西,用的是Switch嵌套.
    switch(charIn){
     case 'A':
      {
        for(char charIn_A=null;charIn_A!=null;){charIn_A=(char)System.in.read(); }
        switch(charIn_A){
        case '1':...;
        case '2':...;
        }
      }
      break;
     case 'B':.....;
     ........
     case 'X':.....;
    }具体记不太清楚了,过程大致就是这个样子...
      
     
    Top  
     
     回复人: d_4_f_5(公子小白) ( ) 信誉:100  2004-10-09 12:12:00  得分: 0  
     
     
       不知道你们是否明白我的程序的意图,我的程序的意图是,开始就进入循环体DO...WHILE,开始显示菜单,等待输入字符,那一连串的IF将判断,将根据输入的字符会做哪一步,WHILE将判断如果不是字符A将一直循环下去。
    问题是,如果输入的不是A,在下一次的循环中,没有等待我的输入,程序就循环了3遍,才等待我的再一次的输入,我不明白这是怎么了??请教输入的如果是数字,因为使用System.in.read()后,读入的是ASCII码,如何将读入的ASCII码转化为我输入的数字呢??
      
     
    Top  
     
     回复人: skylovers(琴声刺骨(卖头哭学JAVA)) ( ) 信誉:100  2004-10-09 14:01:00  得分: 0  
     
     
       跟踪了一遍,发现问题了.
    我机器上的运行结果是:
    A--退出BCDEFGEnter a Character:t
    t超出范围A--退出BCDEFGEnter a Character:
    超出范围A--退出BCDEFGEnter a Character:
    问提出在:cChar = (char) System.in.read();
    这是由于你输入的不是't',而是't'+'\n',不信自己跟踪一遍...
    你将输入输出部分再好好看一下吧.
    不过强烈不建议楼主使用那么多的if!switch才是正确的合理的写法.下面是在下修改过的代码,测试通过.import java.io.*;public class TEST {
      public static void main(String[] args) throws IOException {
        char cChar;
        try {
          do {
            System.out.println("A--退出");
            System.out.println("B");
            System.out.println("C");
            System.out.println("D");
            System.out.println("E");
            System.out.println("F");
            System.out.println("G");
            System.out.print("Enter a Character:");
            BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            cChar = (char) br.read();        System.out.println(cChar);
            switch (cChar) {
              case 'A':
                System.out.println("退出");
                break;
              case 'B':
              case 'C':
              case 'D':
              case 'E':
              case 'F':
              case 'G':
                System.out.println(cChar);
                break;          default:
                System.out.println("超出范围");
                break;
            }
          }
          while (cChar != 'A');
        }
        catch (IOException e) {
          System.out.println("SQLException: " + e.getMessage());
        }
      }
    }
    结果:A--退出BCDEFGEnter a Character:t
    t超出范围A--退出BCDEFGEnter a Character:
      
     
    Top  
     
     回复人: ww425(W.wEI) ( ) 信誉:100  2004-10-09 15:41:00  得分: 0  
     
     
       e恩,放着这么好的SWITCH不用非要用DOWHILE!
      
     
    Top  
     
      
     
     
        
      
     管理 | 关闭窗口  
     
     --------------------------------------------------------------------------------网站简介 - 广告服务 - 网站地图 - 帮助信息 - 联系方式    
    百联美达美公司 版权所有 京ICP证020026号 
    Copyright © CSDN.net, Inc. All rights reserved  
      
      

  8.   

    用不着用那么多的if...else
    可以用if...else if...else if.....
    就行了
      

  9.   

    告诉你原因:你输入字符时,起始是输入了两个字符: T和回车,当执行一遍循环后,再一次运行到cChar = (char) System.in.read()的时候,发现有又有一个字符"回车",于是,会继续执行一遍,因此,它总是执行两遍.
      

  10.   

    有没有人知道,输入的如果是数字,因为使用System.in.read()后,读入的是ASCII码,如何将读入的ASCII码转化为我输入的数字呢??
      

  11.   

    当数字是0-9之间,还可以作为char来处理。BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
            cChar = (char) br.read();
            if (cChar >= '0' && cChar <= '9') {
              x = cChar - 48;//将ASCII码转换为数字
              System.out.println("x = " + x);
            }