在你while(cChar != 'A')之前,循环体就已经执行了一次了!而且当cChar != 'A'时才执行循环体,可是你的循环体里又有 if (cChar == 'A')
System.out.println("退出");
System.out.println("退出");
解决方案 »
- java 声音转数字
- 一个小问题求解
- java调用dll页面切换输入法程序假死!!!急急急,跪求解决
- JSP在用STRUTS1的标签库时总出这个问题
- XML Schema中如何定义二进制字符串类型。
- 新手学hibernate,各位大侠帮帮忙
- <html〉标签出错,Cannot find bean org.apache.struts.taglib.html.BEAN in any scope
- struts标签的bean的使用
- 装J2EE SDK前是不是应该先装J2SE SDK?
- 在分析PetStore1.3时候遇到的问题,关于jndi
- 一个JSP网站在JBuilder 9.0中运行正常,但是在Tomcat 5.0里面不能查询数据。
- 请教一个关于Tomcat的公共库文件的问题。
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':.....;
}具体记不太清楚了,过程大致就是这个样子...
问题是,如果输入的不是A,在下一次的循环中,没有等待我的输入,程序就循环了3遍,才等待我的再一次的输入,我不明白这是怎么了??请教输入的如果是数字,因为使用System.in.read()后,读入的是ASCII码,如何将读入的ASCII码转化为我输入的数字呢??
我机器上的运行结果是:
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:
登 录.. [注 册] 忘记密码 注销登录
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
可以用if...else if...else if.....
就行了
cChar = (char) br.read();
if (cChar >= '0' && cChar <= '9') {
x = cChar - 48;//将ASCII码转换为数字
System.out.println("x = " + x);
}