0

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

我得到的错误是: IO异常

代码

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:我读了这个,但我不明白为什么以及如何工作

4

3 回答 3

5

Alessio,在 Java 中,您有 2 种类型的异常:

  • 例外:他们被检查
  • 运行时异常:未检查

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

为此,您有两种方法:

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

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

PS:如果你正在学习java,最好使用Eclipse之类的IDE,你会更容易理解错误,因为它会通过一些文本突出显示你,它会为你提供解决方案。

于 2013-10-24T12:36:35.330 回答
2

您已经在捕获 a 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();
}
于 2013-10-24T12:30:55.540 回答
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 声明。

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

于 2013-10-24T12:35:43.630 回答