我有一个data.txt文件,其中包含数字
12 45 345 500 45.67684 33
一旦执行了readData方法,它应该只打印整数值,print元素对任何其他类型都无效,然后像这样继续
readData(“data.txt”)会 打印出以下内容: 12 45 345 500元素无效33
我的问题是,一旦元素无效语句被打印,我的代码不会继续打印33它只是停在12 45 345 500元素无效
import java.io.*;
import java.util.*;
public class Ex7 {
public static void readData(String nameFile){
try{
BufferedReader br = new BufferedReader(new FileReader(nameFile));
String line = br.readLine();
int i = 0;
while((line != null)){
try{
String[] lines = line.split(" ");
int[] result = new int[lines.length];
result[i] = Integer.parseInt(lines[i]);
if(result[i] ==(int)result[i]){
System.out.print(result[i] + " ");
}
i++;
}
}
}catch(NumberFormatException e){
System.out.println("element not valid " );
}catch(IOException e){
System.out.println("IO error");
System.exit(0);
}
}
public static void main (String[] args){
readData("data.txt");
}
}
答案 0 :(得分:2)
我建议不要使用Exception,而应检查它是否为数字。例外情况很慢,只能作为后备使用。查看此链接以获取有关数字字符串的更多信息,或通过其他方式搜索谷歌。 Numeric
答案 1 :(得分:1)
您提出问题的原因是您不了解发生的控制流程。
这很简单:你有一个从文件中读取的循环。但是你的 catch 不在那个循环中。所以,当某些东西抛出,并且你在循环之外“捕获”时,那个循环就会“结束”;没有办法回来。
所以,立即回答是:将NumberFormatException的try / catch移动到实际可能发生的 one 位置。:
try {
result[i] = Integer.parseInt(lines[i]);
} catch (NumberFormatException ...
但当然......这直接导致代码的下一个问题:您使用数组存储“有效”输入...数组具有固定大小。您如何提前知道有多少会员有效?你没有。因此:您必须从使用数组更改为动态列表,如ArrayList。现在你可以添加“有效”行。但是,无论如何,这并不重要。因为您的方法不返回收集的值。但是如果没有使用数据;首先收集它是没有意义的。
除了代码之外的答案你必须做出改变:转回书本;和学习您正在使用的构造/概念是如何工作的。盲目地输入try / catch是没有意义的,只是因为它们出现在某个地方,或者因为你的IDE告诉你某种程度上需要对异常做些什么。含义:当你写下代码时...确保你真的理解这段代码在做什么。你知道,就像其他陈述if (result[i] == (int) result[i])
......总是如此;根本没有任何意义。
答案 2 :(得分:1)
将NumberFormatException放入While应该工作。
public static void readData(String nameFile){
try{
BufferedReader br = new BufferedReader(new FileReader(nameFile));
String line = br.readLine();
int i = 0;
while((line != null)){
try{
String[] lines = line.split(" ");
int[] result = new int[lines.length];
result[i] = Integer.parseInt(lines[i]);
if(result[i] ==(int)result[i]){
System.out.print(result[i] + " ");
}
i++;
}catch(NumberFormatException e){
System.out.println("element not valid " );
}
}
}catch(IOException e){
System.out.println("IO error");
System.exit(0);
}
}
答案 3 :(得分:0)
将catch块捕获循环中的NumberFormatException,但也要考虑@ХристоСтайков给出的答案。
答案 4 :(得分:0)
使用以下代码:
public static void readData(String nameFile) {
try {
BufferedReader br = new BufferedReader(new FileReader(nameFile));
String line = br.readLine();
String[] lines = line.split(" ");
int[] result = new int[lines.length];
for(int i=0;i<lines.length;i++){
try{
result[i] = Integer.parseInt(lines[i]);
if(result[i] ==(int)result[i]){
System.out.print(result[i] + " ");
}
}catch(NumberFormatException nfe){
System.out.println("Number Invalid");
}
}
}catch(Exception ex){
ex.printStackTrace();
}
}