最近笔试遇到的编程题很多都需要从键盘输入数据,尤其是输入一个int数组。现做一下总结:
思路:
- 从控制台输入的一行数据按字符串形式获取
- 使用 String 的 split 方法将字符串按指定方式切分成字符串数组
- 将该字符串数组转换成整型数组
实现代码:
public class Test1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str = input.nextLine();
String[] numStr = str.split(" ");
int[] numsInt = new int[numStr.length];
for(int i = 0; i< numStr.length; i++) {
numsInt [i] = Integer.parseInt(numStr[i]);
}
for (int nums : numsInt ) {
System.out.print(nums + " ");
}
}
}
上面是我之前一直写的代码,但是现在发现了很多问题,自己考虑问题过于片面,考虑不周。
问题:输入数据格式错误时在 String 转 Integer 时会抛出异常。(java.lang.NumberFormatException)
解决方法:将 String 转 int 数组 抽取成一个方法,String 转 Integer 时, 如果有一个出错,那么就直接返回,不作任何操作。
1.首先判断输入是否为空,当输入为空时,直接返回。
2.给可能出现异常的代码添加 try - catch 处理异常。
完善后的代码:
public class Test2 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
String str = input.nextLine();
stringToIntegerArray(str);
}
private static void stringToIntegerArray(String str) {
if (str.isEmpty()) {
return;
}
String[] numStr = str.split(" ");
int[] numsInt = new int[numStr.length];
for (int i = 0; i < numStr.length; i++) {
try {
numsInt[i] = Integer.parseInt(numStr[i]);
} catch (NumberFormatException e) {
e.printStackTrace();
return;
}
}
for (int nums : numsInt) {
System.out.print(nums + " ");
}
}
}
小结:写程序要考虑周全,才能写出尽可能健壮的程序。