gpt4 book ai didi

Main 中的 Java 构造函数用户输入在构造函数中以 Null 结尾

转载 作者:行者123 更新时间:2023-12-02 01:14:30 25 4
gpt4 key购买 nike

正如您所推断的,我是 Java 新手。

我正在使用 Java Main 和关联的构造函数来计算面积、半径的周长。我用静态值算出来的。

我正在使用一个输入,它的值被发送到构造函数,首先作为字符串,然后我可以将其转换为 double 。在特定位置使用 println() ,我看到字符串,然后是转换后的 double 值,然后是 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 行之间,我的双 rad2 变为 Null。我尝试了很多方法将值从 public class Cercle1{...} 传递到 Cercle1() 但没有成功。

问题:你能解释一下我在这里缺少的明显内容是什么吗?谢谢

最佳答案

每次编写 new Circle1() 时,您都会创建一个全新的对象,并且它独立于其他对象。

当你这样做

Cercle1 pi = new Cercle1();
Cercle1 radius= new Cercle1();
Cercle1 circle= new Cercle1();
Cercle1 perimeter = new Cercle1();

您创建了 4 个新的Cercle1 对象,它们没有半径。因此,当您尝试进行任何涉及半径(直径、周长、面积)的计算时,您会得到一个 NullPointerException,因为半径未定义(为空)。

您想要做的是创建一个带有半径的 Cercle 并查询其 getter 方法。

此外,您也不需要第二类Cercle1。你只需要你的Cercle

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();
Cercle myCercle = new Cercle(rad);

// That's it, that's all you have to do,
// you now have a circle and you can get its area and perimeter

System.out.println("Cercle: "+rad);
System.out.println("PI : "+myCercle.getPI());
System.out.println("Radius : "+myCercle.getRadius());
System.out.println("Area : "+myCercle.computeArea());
System.out.println("Perimeter: "+myCercle.computePerimeter());
}


private Double radius;
private Double pi = Math.PI;

public Cercle(String rad) {
radius = Double.valueOf(rad);
}

double getPI() {
return pi;
}
double getRadius() {
return radius;
}
public double computeDiameter() {
return 2 * radius;
}
double computePerimeter() {
return pi * 2 * radius;
}
double computeArea() {
return (pi * Math.pow(radius, 2));
}
}

现在,当你说

I am using a Java Main and associated Constructor

我不确定您是否理解它们没有关联,main 不必位于 Cercle 类中。它们可能属于 2 个不同的类,位于 2 个不同的文件中:

public class MyUserInputClass {

public static void main(String[] args)
{
// USER INPUT
String rad;
Scanner ss = new Scanner(System.in);
System.out.print("Input radius: ");
rad = ss.nextLine();
Cercle myCercle = new Cercle(rad);

// That's it, that's all you have to do,
// you now have a circle and you can get its area and perimeter

System.out.println("Cercle: "+rad);
System.out.println("PI : "+myCercle.getPI());
System.out.println("Radius : "+myCercle.getRadius());
System.out.println("Area : "+myCercle.computeArea());
System.out.println("Perimeter: "+myCercle.computePerimeter());
}
}
public class Cercle {

private Double radius;
private Double pi = Math.PI;

public Cercle(String rad) {
radius = Double.valueOf(rad);
}

double getPI() {
return pi;
}
double getRadius() {
return radius;
}
public double computeDiameter() {
return 2 * radius;
}
double computePerimeter() {
return pi * 2 * radius;
}
double computeArea() {
return (pi * Math.pow(radius, 2));
}
}

关于Main 中的 Java 构造函数用户输入在构造函数中以 Null 结尾,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58885612/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com