JAVA中System.in.read中的小问题
编了一个鸡兔同笼的程序,需要读取腿和头的数据,编译通过,运行时程序在执行完leg=System.in.read();,输入完数字后不理head=System.in.rea...
编了一个鸡兔同笼的程序,需要读取腿和头的数据,编译通过,运行时程序在执行完leg=System.in.read();,输入完数字后不理head=System.in.read();就直接运行到最后了。。这是怎么回事? 下面是出问题的部分程序 System.out.println("请输入头的数量");
leg=1;
leg=System.in.read();
System.out.println("请输入腿的数量");
head=System.in.read();
for(numc=0;numc<=head;numc++)
for(numr=0;numr<=head;numr++)
{
if(numc*2+numr*4==leg&&numc+numr==head)
head=System.in.read();
System.out.println("有鸡"+numc+"只");
System.out.println("有兔"+numr+"只");
} 谢谢了 展开
leg=1;
leg=System.in.read();
System.out.println("请输入腿的数量");
head=System.in.read();
for(numc=0;numc<=head;numc++)
for(numr=0;numr<=head;numr++)
{
if(numc*2+numr*4==leg&&numc+numr==head)
head=System.in.read();
System.out.println("有鸡"+numc+"只");
System.out.println("有兔"+numr+"只");
} 谢谢了 展开
3个回答
推荐于2018-03-01
展开全部
楼上说出了改写你这个程序的方法,那么我来说一下你的问题吧.你使用的legs=System.in.read(); 只能读取用户输入的数据的第一个字节,唧你在控制台输入"13回车"时,当你输入到"1"的时候,其实代码"legs=System.in.read();" 已经运行完,接收到的是"1"这一个字节的ascii码(键盘输入为Ascii码,还没有把这个Ascii码转成Unicode), 顺理成章,下面的"head=System.in.read();"就会读到"3",程序再跑下去,就完了.你按照楼上的方法改写你的代码,应该就能完成你想要的功能.楼上用了一个BufferedReader去处理输入,这个的String str=br.readLine();方法可以读取数据直到读到"\n"(回车)时才把这句字串返回.另外说一下,BufferReader br=new BufferedReader(new InputStreamReader(System.in));还可以加上一个参数:"BufferReader br=new BufferedReader(new InputStreamReader(System.in,"Ascii"));"由于你输入的字符一定是纯英文或Ascii码,所以可以不用写,但如果你需要输入中文,这时就要指定编码为"GBK","UTF-8"等等,不加这个参数,JAVA会使用系统中默认的字符编码去处理这堆字节流,我们的系统默认是"GB2312"的.
展开全部
Scanner input = new Scanner(System.in);
System.out.println("请输入头的数量");
int leg=input.nextInt();
//leg=System.in.read();
System.out.println("请输入腿的数量");
int head=input.nextInt();
for(int numc=0;numc<=head;numc++)
for(int numr=0;numr<=head;numr++)
{
if(numc*2+numr*4==leg&&numc+numr==head)
head=System.in.read();
System.out.println("有鸡"+numc+"只");
System.out.println("有兔"+numr+"只");
}
System.in.read()返回一个整型字节数据,该数据表示的是字节因此是Unicode的第一个字节或是字符的ASCII码值。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
2013-09-01
展开全部
首先你必须先学下 “JAVA.IO.*” 的内容不然你不会懂的read 方法返回的是int 类型,但它是返回输入的字符的UNICODE码,例如你输入'3' ,如果你用int legs去接收,得到的是它的码值51,此时要想得到原数据必须 (char)legs其次输入输出流是会抛出异常的,必须对其进行捕获:try{ legs=System.in.read(); }catch(IOExection e){ e.printStackTrace();}如果不进行捕获,将会报错所以、、、我也不讨论你为何你敢说你能编译成功我的建议是read()方法不是用来输入的,改为:import java.io.*;try{BufferReader br=new BufferedReader(new InputStreamReader(System.in));String str=br.readLine(); int legs=Integer.parseInt(str); //字符串转换为整形}catch(IOException e){ System.out.println(e);}是不是很麻烦呢,其实等你学到IO这个包的时候,你就会用更多的方法了
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询