对于以下小代码,我收到了错误...
import java.io.*;
class test
{
public static void main(String args[]) throws IOException
{
BufferedReader br=new BufferedReader(new InputStreamReader(System.in));
int i;
System.out.println("Enter no of processes ");
int no_of_process=Integer.parseInt(br.readLine());
int process[]=new int[no_of_process];
System.out.println("Enter the values");
for(i=0;i<no_of_process;i++)
process[i]=Integer.parseInt(br.readLine());
for(i=0;i<no_of_process;i++)
System.out.println(process[i]);
}
}
输入:
Enter no of processes
5
Enter the values
1
2
Exception in thread "main" java.lang.NumberFormatException: For input string: ""
at java.lang.NumberFormatException.forInputString(NumberFormatException.java:48)
at java.lang.Integer.parseInt(Integer.java:470)
at java.lang.Integer.parseInt(Integer.java:499)
at test.main(test.java:17)
Process completed.
我认为我已经正确编写了代码并且还给出了正确的整数输入。如何在不使用任何显式异常处理语句的情况下消除上述错误?
谢谢你们的答案......它正在发挥作用。但是我脑子里还有一个新问题。
我在代码中尝试了以下修改并执行了它。令我惊讶的是,输入被正确接受,没有任何运行时错误。
for(i=0;i<no_of_process;i++)
{
System.out.println(Write anything or even keep it blank);
process[i]=Integer.parseInt(br.readLine());
}
通过在for循环中的输入语句之前(或甚至之后)只添加一个Print语句,我的程序正常工作,并且在给出输入时没有抛出任何异常。
你们能解释一下这背后的原因吗?
再次,如果我从那里删除Print语句,则会重复相同的错误。我真的很困惑这背后的原因。请帮忙。
答案 0 :(得分:2)
没有任何错误处理语句?在尝试解析之前检查br.readLine()是否返回“”,如下所示:
String line = br.readLine();
if(!String.isEmpty(line))
{
//Do stuff
}
else
{
//Do other stuff
}
答案 1 :(得分:0)
如何在不使用任何显式异常处理语句的情况下消除上述错误?
for (i = 0; i < no_of_process; i++) {
String input;
do {
input = br.readLine();
if (isInteger(input)) {
process[i]=Integer.parseInt(input);
} else {
//error handling here
System.err.println("you entered an invalid input");
}
} while(isInteger(input));
}
isInteger
看起来像这样:
public static boolean isInteger(String s)
{
try {
Integer.parseInt(s);
}
catch (Exception e) {
return false;
}
return true;
}
我认为我写的正确,也给出了正确的整数输入。
我认为不是;)我认为你在没有打字的情况下按下了回报
答案 2 :(得分:-1)
试试这个:
SOCK_SEQPACKET=5