标题:do while的使用问题
只看楼主
zq1983
Rank: 1
等 级:新手上路
帖 子:110
专家分:0
注 册:2006-4-27
 问题点数:0 回复次数:19 
do while的使用问题

import java.io.*;
class solary
{

public static void main(String[] agrs)throws IOException

{

char oper;



do
{
System.out.println("1.删除");
System.out.println("2.修改");
System.out.println("3.查询");
System.out.println("4.添加");
System.out.println("0.推出");

System.out.print("请输入选择:");
oper=(char)System.in.read();
switch(oper)
{

case '1':
System.out.println("sdsdsdsd");
break;
case '2':
System.out.println("dkfkj");
break;
case '3':
System.out.println("dfdfdfdf");
break;
case '4':
System.out.println("bbbbbbb");
break;
default:
System.out.println("输入错误");
}

}
while(oper!='0');
}

}
这个程序可以运行,但是我输入一个数字以后,他把那个界面给我打出来3次,不知道是为什么。要是没听懂,运行一下就知道那里不对了

搜索更多相关主题的帖子: void 查询 public import 
2006-12-04 18:07
林小羽
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-5-29
得分:0 

oper=(char)System.in.read();
这一句实际上读入了三个字符,一个是你键盘敲的,一个回车,一个换行,所以会打三遍!
修改一下这一句!


java,什么时候才能到达境界呢?
2006-12-04 18:41
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 

我向你解释一下你输入1的过程

首先你输入了1,然后你按了回车,回车就代表一个换行符一回车符'\n'和'\r'
所以,你会输出三遍,
第一遍是为你输入的1而输出
第二遍是为你输入的'\n'而输出,对应的ASCII码10
第三遍是为你输入的'\r'而输入,对应的ASCII码13

为了避免这种情况
你可以用BufferedReader来读取行,这就可以不读\n\r了


可惜不是你,陪我到最后
2006-12-04 18:42
林小羽
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-5-29
得分:0 
也问个问题哈,你这个局部变量oper不附值,编绎如何通过的?
实际是可以通过的,不过好像语法不对

java,什么时候才能到达境界呢?
2006-12-04 18:43
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
没有语法不对啊
它在用之前是确实能被赋值的,这种情况是可以编译通过的

可惜不是你,陪我到最后
2006-12-04 18:45
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 
oper=(char)System.in.read();

把这句删掉就编译通不过了

可惜不是你,陪我到最后
2006-12-04 18:45
myfor
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:357
专家分:6
注 册:2006-3-13
得分:0 

输入一个数字如1之后按回车实际上是输入了(1)、(\r)、(\n)、(-1)、
第一次读1 第二次读\r 第三次读\n 第四次读-1 输入的结尾
我的测试结果是这样的
最好是读行
我改了一下



import java.io.*;
class solary
{

public static void main(String[] agrs)throws IOException

{

int oper;



do
{
System.out.println("1.删除");
System.out.println("2.修改");
System.out.println("3.查询");
System.out.println("4.添加");
System.out.println("0.推出");

System.out.println("请输入选择:");
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
oper=Integer.parseInt(br.readLine());
switch(oper)
{
case 0:System.exit(0);
case 1:
System.out.println("sdsdsdsd");
break;
case 2:
System.out.println("dkfkj");
break;
case 3:
System.out.println("dfdfdfdf");
break;
case 4:
System.out.println("bbbbbbb");
break;
default:
System.out.println("输入错误");
}

}
while(oper!=0);
}

}

[此贴子已经被作者于2006-12-4 18:59:39编辑过]


广告位招租
2006-12-04 18:50
千里冰封
Rank: 16Rank: 16Rank: 16Rank: 16
来 自:灌水之王
等 级:版主
威 望:155
帖 子:28477
专家分:59
注 册:2006-2-26
得分:0 

我又错了

[此贴子已经被作者于2006-12-4 18:55:17编辑过]


可惜不是你,陪我到最后
2006-12-04 18:53
林小羽
Rank: 1
等 级:新手上路
帖 子:43
专家分:0
注 册:2006-5-29
得分:0 
问冰峰:
public class Test
{
public static void main(String[] args)
{
int x;
x=x+1;
System.out.println("x is"+x);
}
}

这啥这个编译通不过?

java,什么时候才能到达境界呢?
2006-12-04 18:54
myfor
Rank: 3Rank: 3
等 级:新手上路
威 望:6
帖 子:357
专家分:6
注 册:2006-3-13
得分:0 

[此贴子已经被作者于2006-12-4 18:59:15编辑过]


广告位招租
2006-12-04 18:55



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-107238-1-1.html




关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.332470 second(s), 7 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved