您可能会推断,我是Java的新手。
我正在使用Java Main和关联的构造函数来计算半径范围内的面积。我用静态值弄清楚了。
我正在使用将其值发送到构造函数的输入,首先将其作为字符串,然后将其转换为双精度型。在特定位置使用println(),我看到字符串,然后是强制转换的双精度字符,然后是Null。
下降的值发生在Cercle1(构造函数)的第14行和第23行之间。 在搜索了在线示例并修改了它们的Java代码之后,这就是我所拥有的。
主要:
import java.util.Scanner;
public class Cercle {
public static void main(String[] args)
{
/////---------------------------------------
/// USER INPUT
String rad;
Scanner ss = new Scanner(System.in);
System.out.print("Input radius: ");
rad = ss.nextLine();
Cercle1 a = new Cercle1(rad);
System.out.println("Cercle: "+rad);
/////---------------------------------------
Cercle1 pi = new Cercle1();
Cercle1 radius= new Cercle1();
Cercle1 circle= new Cercle1();
Cercle1 perimeter = new Cercle1();
System.out.println("PI : "+pi.getPI());
System.out.println("Radius : "+radius.getRadius());
System.out.println("Area : "+circle.computeArea());
System.out.println("Perimeter: "+perimeter.computePerimeter());
}
}
建设者:
public class Cercle1 {
public double radius;
/////---------------------------------------
/// PASS USER INPUT
Double rad2;
public Cercle1(String rad) {
rad2 = Double.valueOf(rad);
System.out.println("Cercle1 rad2 line14: "+rad2);
}
/////---------------------------------------
Cercle1() {
System.out.println("Cercle1 rad2 line23: "+rad2);
radius = rad2; //1.0;
pi = (Math.PI);
}
public void setRadius(double radius) {
rad2 = radius;
}
private double pi;
double getPI() {
return pi;
}
double getRadius() {
return rad2;
}
public double computeDiameter() {
return rad2*2;
}
double computePerimeter() {
return pi * (2 * rad2);
}
double computeArea() {
return (Math.PI * Math.pow(rad2,2));
}
}
IntelliJ控制台中的输出:
Input radius: 1
Cercle1 rad2 line14: 1.0
Cercle line17 rad: 1
Cercle1 rad2 line23: null
Exception in thread "main" java.lang.NullPointerException
at Cercle1.<init>(Cercle1.java:22)
at Cercle.main(Cercle.java:20)
我看到在Cercle1的第17行和第23行之间,我的double rad2变为Null。 我尝试了多种方法将值从公共类Cercle1 {...}传递给Cercle1(),但没有成功。
问题:您能解释一下我在这里想念的明显之处吗? 谢谢