我很确定我的问题在某个地方的try块中存在,但我似乎无法确定它。我正在做的是从文件中读取并检查输入。如果输入> 0,我想增加goodData,如果没有,它应该为值< 0抛出BPIllegalValueException,或者对非整数的东西抛出InputMismatchException。我希望你们能帮帮忙。
编辑:教授说明:
在您的程序中,您需要两个例外来处理两种不良数据。对于非整数读取,可以使用nextInt()方法从文件中读取整数,如果数据不是整数,则抛出InputMismatchException。您的程序必须捕获此异常。要处理否定读数,您可能希望声明自己的Exception类:BPIllegalValueException(您应该编写包含该类的BPIllegalValueException.java),并在读取负值时抛出此异常。注意:读取错误数据时,程序不应终止。因此,您必须使用try / catch块来处理错误数据。您的程序预计会打印出(在屏幕上)良好的血压读数和不良数据的数量。
我的代码如下:
import java.io.*;
import java.util.*;
public class DemoEx {
public static void main(String[] args) throws IOException
{
FileReader fr = new FileReader("BP.txt");
BufferedReader br = new BufferedReader(fr);
Scanner in = new Scanner(new FileReader("BP.txt"));
int badData = 0;
int goodData = 0;
int data;
String str = "";
while((str = br.readLine()) != null)
{
try
{
data = in.nextInt();
if(data>0)
goodData++;
else if(data<0)
throw new BPIllegalValueException(data);
else
throw new InputMismatchException();
}
catch(InputMismatchException ex)
{
badData++;
}
catch(BPIllegalValueException ex)
{
badData++;
}
}
System.out.println("The number of good data: " + goodData);
System.out.println("The number of bad data: " + badData);
}
}
答案 0 :(得分:3)
为什么在只想增加一个计数器时会抛出异常?
看起来你想要,
if (data > 0)
goodData++
else
badData++;
现在,在你这样做之前,确保数据是一个整数,如果你这样做,你将得到.nextInt,如果有的话,将跳过所有其他的非int值。那么它取决于您读取数据的方式,扫描仪的原因?为什么不是缓冲读取器和readLine然后拆分它做任何你喜欢的事情?
答案 1 :(得分:3)
根据您的示例,您为什么甚至使用例外?你正在做的不是处理错误,看起来你正在执行逻辑。错误应该显示停止,而不是用于在代码中执行逻辑。只是增加坏数据而不是使用异常。例外情况也会降低您的代码速度。
答案 2 :(得分:0)
您不需要迭代两个不同的流。扫描仪应该足够了。
BufferedReader br = new BufferedReader(new FileReader("BP.txt"));
Scanner in = new Scanner(br);
此外,您不应该使用控制流的异常,而是使用if / else语句。
if(data > 0){
goodData++;
}else { //if (data <= 0)
badData++;
}
循环应该由扫描仪控制,扫描仪是寻找数字的那个:
while(in.hasNext()){ ... }
最后,如果你的文件包含不同于数字的其他标记,请确保迭代它们,否则你将编程无限循环:
if(in.hasNextInt()){
data = in.nextInt();
}else{
in.next(); //makes sure you move to the next token if it is not an int.
}
总的来说,这样的事情:
BufferedReader br = new BufferedReader(new FileReader("BP.txt"));
Scanner in = new Scanner(br);
int badData = 0;
int goodData = 0;
int data = 0; //this must be initialized
while(in.hasNext()){
if(in.hasNextInt()){
data = in.nextInt();
if(data > 0){
goodData++;
}else if (data <= 0){
badData++;
}
}else{
in.next(); //move to the next token when it-s not an int.
}
}
System.out.println("The number of good data: " + goodData);
System.out.println("The number of bad data: " + badData);
如果您将BP.txt文件包含为:1 2 A B C 4 5 6 -1 -2 C B
它会输出:
The number of good data: 8
The number of bad data: 4
假设对应于您期望的输出。