我刚刚开始使用Java,因此我犯了很多错误,我已经解决并了解了很多错误,但现在我遇到了输入问题。我看到有两种输入:InputBufferedReader和Scanner,但我读到第一种更好(我不知道为什么),所以我正在使用它。
我得到的错误是:
代码
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,但我不明白为什么以及如何运作
答案 0 :(得分:5)
Alessio,在Java中,您有两种类型的例外:
当方法可以触发“已检查”异常时,您必须处理它。
为此,您有两种方法:
在您的情况下,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声明。
同样,对于最佳实践,始终打印堆栈跟踪以了解异常的全部内容。