java调用输入函数问题
解决时间 2021-06-06 11:36
- 提问者网友:绫月
- 2021-06-05 18:16
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个数字。是哪里错了?
最佳答案
- 五星知识达人网友:妄饮晩冬酒
- 2021-06-05 19:47
System.in.read(); 会连同回车一起读取, 所以就相当于输入了两个
加多一个跳过 System.in.skip(2);
char ch=(char)System.in.read();
System.in.skip(2);
if(ch=='2')
yonghu();
if(ch=='1')
全部回答
- 1楼网友:思契十里
- 2021-06-05 23:53
- 2楼网友:掌灯师
- 2021-06-05 23:05
你没有写对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();
}
- 3楼网友:蓝房子
- 2021-06-05 21:27
呵呵,看明白了,输入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){ }
}
}
我要举报
大家都在看
推荐资讯