永发信息网

java调用输入函数问题

答案:5  悬赏:30  手机版
解决时间 2021-06-06 11:36

import java.io.*;
public class cuowu{
public static void main (String[] args) {
System.out.println("输入1则由电脑自动输出10000以内的素数;输入2则自行输入5个数字");
try{
char ch=(char)System.in.read();
if(ch=='2')
yonghu();
if(ch=='1')
;
}catch(IOException e){
}}
static void yonghu(){ //由用户定义一个有5个数字的数组
System.out.println("输入5个数:");
String str[]=new String[5];
byte buf[]=new byte[5];
int shuzu[]=new int[5];
try{
for(int i=0;i<5;i++){

System.in.read(buf);
str[i]=new String(buf,0);
shuzu[i]=Integer.parseInt(str[i].trim());}
}catch(Exception e){ }
} }

程序如上。为什么我运行后,输入2,程序的结果为:

--------------------Configuration: <Default>--------------------
输入1则由电脑自动输出10000以内的素数;输入2则自行输入5个数字
2
输入5个数:

Process completed.
它只显示“输入5个数”,然后程序就完了。我是想在我输入2后,继续输入5个数字。是哪里错了?

最佳答案
System.in.read(); 会连同回车一起读取, 所以就相当于输入了两个
加多一个跳过 System.in.skip(2);
char ch=(char)System.in.read();
System.in.skip(2);
if(ch=='2')
yonghu();
if(ch=='1')
全部回答

哎 无能为力啊 看了头都晕了嗨

你没有写对5个输入数字的输出

byte[] a=new byte[1024]; String[] str=new String[5]; try { char cc=(char)System.in.read(); if (cc=='1'){ System.out.println(cc); } else if (cc=='2') { for (int i=0;i<5;i++){ System.in.read(a); str[i]=new String(a); } for (int j=0;j<5;j++){ System.out.println(str[j]); } } } catch (IOException e) { // TODO 自动生成 catch 块 e.printStackTrace(); }

呵呵,看明白了,输入2以后你按回车了吧

现在的情况是这样的,你实际输入的内容是{'2','\r','\n'}

char ch=(char)System.in.read();的时候从System.in流里面读取了一个字符,System.in里面还剩下{'\r','\n'}

然后进入yonghu()

System.out.println(...);输出信息

....

System.in.read(buf);把System.in里面剩下的{'\r','\n'}读入到buf里面

str[i] = new String(buf,0); 此时str[0] = "\r"

然后Integer.parseInt(str[0].trim());的时候会因为str[0]不是数字而抛出异常,然后被}catch(Exception e){ } catch掉了

你在catch段里面把错误信息输出来就明白了

用System.in.read读入的话,你在一开始输入2后面的换行也被读入了(13),后面无法转换成整型,就被异常退出了。

建议用读一行的来写,这是用BufferedReader改过的每次读一行的代码:

import java.io.*; public class cuowu{

// 放到这里,让两个方法一起用

static BufferedReader reader = new BufferedReader(new InputStreamReader(System.in));

public static void main (String[] args) { System.out.println("输入1则由电脑自动输出10000以内的素数;输入2则自行输入5个数字"); try{ String line = reader.readLine(); // 读一行 if("2".equals(line)) { yonghu(); } if("1".equals(line)) ; }catch(IOException e){ } } static void yonghu(){ //由用户定义一个有5个数字的数组 System.out.println("输入5个数:"); String str[]=new String[5]; int shuzu[]=new int[5]; try{ for(int i=0;i<5;i++){ str[i] = reader.readLine(); shuzu[i]=Integer.parseInt(str[i].trim()); } }catch(Exception e){ } } }

我要举报
如以上问答信息为低俗、色情、不良、暴力、侵权、涉及违法等信息,可以点下面链接进行举报!
大家都在看
农场损失能找回来不
爱国者的照相机怎么样?
谁知道这首歌谁唱的
卡莱青蛙王子咋才有16集不是40集吗?
商城县信阳无限极专卖店这个地址在什么地方,
诺基亚5630XM和6220c哪个好,哪个要便宜些
招商银行壹基金信用卡
企业法人被吊销营业执照,其债权人应列谁为被
温州哪里有学鞋类设计(2D模型、画图)培训的
经常用有很浓的漂白水味的水会不会有害啊?
太念旧注定会受伤?
那位朋友知道沈阳五谷杂粮的进货渠道
一下东西就黑屏
犬夜叉中谁最好看?
丝路英雄图标可以升级吗?
推荐资讯
谁有大话仙剑的激活码加我1192323620急求
DNF战法的技能加法
最好的朋友伤害了你、让你失望了,你还会对她
齐家家具下次展览会在哪举办
dnf圣骑士什么时候觉醒~
未来的工作好找吗?
用play soccer 造长句子
为什么我的身高长这么慢???
www.80s.cn.怎样下电影啊?
当今世界什么牌值得车子最值钱?
一道数列求和的问题
绍兴联想维修点
正方形一边上任一点到这个正方形两条对角线的
阴历怎么看 ?