Java中未处理的异常类型IOException

时间:2013-10-24 12:28:56

标签: java

我刚刚开始使用Java,因此我犯了很多错误,我已经解决并了解了很多错误,但现在我遇到了输入问题。我看到有两种输入:InputBufferedReader和Scanner,但我读到第一种更好(我不知道为什么),所以我正在使用它。

我得到的错误是: IOException

代码

import java.io.InputStreamReader;
import java.io.BufferedReader;

public class Cerchio{

  private float r;
  private float area;
  private float cfr;
  final double pi = 3.14;


  public static void main(String[] args){
    System.out.println("Programma cerchio\n");

    Cerchio cerchio = new Cerchio(); 
    cerchio.getR();
    cerchio.c_cfr();
    cerchio.c_area();
    System.out.println("La circonferenza è: " + cerchio.cfr);
    System.out.println("L area è: " + cerchio.area);
  }

  private float getR(){
    InputStreamReader input = new InputStreamReader(System.in);
    BufferedReader num = new BufferedReader(input);

    try{
      String sr = num.readLine();
      r = Float.valueOf(sr).floatValue();
    } catch(NumberFormatException nfe){
        System.out.println("Incorrect!!!");
      }
    return r;
  }

  private float c_cfr(){
    cfr =(float)(2 * pi * r); //casting
    return cfr;
  }

  private float c_area(){
    area = (float)(pi * (r*r));
    return area;
 }

}

可能还有其他的误会,但我不知道该怎么回事。

怎么了?谢谢!

PS:我读过this,但我不明白为什么以及如何运作

3 个答案:

答案 0 :(得分:5)

Alessio,在Java中,您有两种类型的例外:

  • 例外:检查它们
  • 运行时例外:未选中

当方法可以触发“已检查”异常时,您必须处理它。

为此,您有两种方法:

  • 在方法签名的末尾添加“抛出IOException”(这是您发布的链接所暗示的内容)
  • 使用try catch块处理您的例外。

在您的情况下,IOException是一个“已检查”的异常,因此您应该向getR方法添加“抛出IOException”或使用try catch处理它。

PS:如果你正在学习java,最好使用像eclipse这样的IDE,你会更容易理解错误,因为它会指向你的一些文字高亮,它会为你提供解决方案

答案 1 :(得分:2)

你已经捕获了NumberFormatException,但是你还需要捕获IOException那个语句(或者从该方法中抛出它,并将其捕获到其他地方。)

try{
    String sr = num.readLine();
    r = Float.valueOf(sr).floatValue();
} 
catch(NumberFormatException nfe){
    System.out.println("Incorrect!!!");
}
catch(IOException ex) {
    ex.printStackTrace();
}

如果您正在使用Java 7(或更高版本),如果您愿意,可以在同一个块中组合两个例外:

catch(NumberFormatException|IOException ex){
    ex.printStackTrace();
}

答案 2 :(得分:2)

试试这个,我会在最后解释这个

public class Cerchio{

  private float r;
  private float area;
  private float cfr;
  final double pi = 3.14;


  public static void main(String[] args){
    System.out.println("Programma cerchio\n");

    Cerchio cerchio = new Cerchio(); 
    cerchio.getR();
    cerchio.c_cfr();
    cerchio.c_area();
    System.out.println("La circonferenza è: " + cerchio.cfr);
    System.out.println("L area è: " + cerchio.area);
  }

  private float getR(){
    InputStreamReader input = new InputStreamReader(System.in);
    BufferedReader num = new BufferedReader(input);

    try{
      String sr = num.readLine();
      r = Float.valueOf(sr).floatValue();
    } catch(NumberFormatException nfe){
        nfe.printStackTrace();
        System.out.println("Incorrect!!!");
      } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }
    return r;
  }

  private float c_cfr(){
    cfr =(float)(2 * pi * r); //casting
    return cfr;
  }

  private float c_area(){
    area = (float)(pi * (r*r));
    return area;
 }

}

您必须捕获正确的异常或在方法中添加throws声明。

同样,对于最佳实践,始终打印堆栈跟踪以了解异常的全部内容。