Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
使用Java中的对象数组获取.set_Java_Arrays - Fatal编程技术网

使用Java中的对象数组获取.set

使用Java中的对象数组获取.set,java,arrays,Java,Arrays,所以我试着做一个程序,你把一个半径,它吐出面积,直径等,但每当我运行应用程序它崩溃。如果有人能帮忙,我会非常感激的 public static void main(String[] args) { Scanner scan = new Scanner(System.in); MeasureC[] mc = new MeasureC[5]; int i=0; int p =5; for(i=0;i<=p;i++) { Syste

所以我试着做一个程序,你把一个半径,它吐出面积,直径等,但每当我运行应用程序它崩溃。如果有人能帮忙,我会非常感激的

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    MeasureC[] mc = new MeasureC[5];
    int i=0;
    int p =5;
    for(i=0;i<=p;i++)
    {
        System.out.println("What do you want the radius to be?");
        double UserRad = scan.nextDouble();

        mc[i].setRadius(UserRad);
        mc[i].setArea();
        mc[i].setDiameter();
        mc[i].setCircumfrence();
        System.out.println(mc[i].getRadius());
        System.out.println(mc[i].getArea());
        System.out.println(mc[i].getDiameter());
        System.out.println(mc[i].getCircumfrence());

    }
替换:

用于(i=0;i替换:

(i=0;i)的

这不会创建一个包含5个
MeasureC
对象的数组,它只是在内存中为它们分配空间。因此,当前,每个索引都指向
null
。这意味着在
for
循环中,当您尝试访问数组中的特定元素时,将得到一个错误,即
.setRadius()
etc…不是
null
的方法:

mc[i].setRadius(UserRad); // mc[i] is null 
因此,要解决此问题,您可以在每次迭代时创建
MeasureC
类的新实例,并将其设置为索引:

for(i = 0; i < p; i++) { // set to i < p as max index in your array is 4 (not 5)
  mc[i] = new MeasureC();
  // code...
}
for(i=0;i
这不会创建一个包含5个
MeasureC
对象的数组,它只是在内存中为它们分配空间。因此,当前,每个索引都指向
null
。这意味着在
for
循环中,当您尝试访问数组中的特定元素时,将得到一个错误,即
.setRadius()
etc…不是
null
的方法:

mc[i].setRadius(UserRad); // mc[i] is null 
因此,要解决此问题,您可以在每次迭代时创建
MeasureC
类的新实例,并将其设置为索引:

for(i = 0; i < p; i++) { // set to i < p as max index in your array is 4 (not 5)
  mc[i] = new MeasureC();
  // code...
}
for(i=0;i
我假设您在
mc[I].setRadius(UserRad);
行中得到一个
NullPointerException

想一想这意味着什么。然后应该很明显,在这之前你必须添加哪一行来解决问题


提示:想想Java是如何进行数组初始化的。

我假设您在
mc[I].setRadius(UserRad);
行中得到一个
NullPointerException

想一想这意味着什么。然后应该很明显,在这之前你必须添加哪一行来解决问题


提示:想想Java是如何进行数组初始化的。

假设您希望radius是唯一允许的输入数据,我们可以尝试将代码重构为(请参见下面的注释):

公共类度量{
私人双半径、面积、直径、周长;
公共测量(双半径){
直径=2.0d*半径;
周长=数学π*直径;
面积=数学pi*数学功率(半径,2);
}
公共双getRadius(){
返回半径;
}
公共区域(){
返回区;
}
公共双getDiameter(){
回流直径;
}
公共双通道{
回绕;
}
}
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
int p=5;
MeasureC[]mc=新的MeasureC[p];

对于(int i=0;i假设您希望半径是唯一允许的输入数据,我们可以尝试将代码重构为(参见下面的注释):

公共类度量{
私人双半径、面积、直径、周长;
公共测量(双半径){
直径=2.0d*半径;
周长=数学π*直径;
面积=数学pi*数学功率(半径,2);
}
公共双getRadius(){
返回半径;
}
公共区域(){
返回区;
}
公共双getDiameter(){
回流直径;
}
公共双通道{
回绕;
}
}
公共静态void main(字符串[]args){
扫描仪扫描=新扫描仪(System.in);
int p=5;
MeasureC[]mc=新的MeasureC[p];

对于(int i=0;i此处的预期行为是什么?您是否只输入半径,并期望得到所有其他组件?或者,是否可以只输入区域并获得所有其他组件?半径是唯一允许的输入。不可能进入区域欢迎堆栈溢出。请注意,以备将来使用“it崩溃”远不如“it崩溃时出现以下异常”有用-包括堆栈跟踪。此处的预期行为是什么?您是否只输入半径,并期望得到所有其他组件?或者,是否可以只进入该区域并获得所有其他组件?半径是唯一允许的输入。不可能进入该区域欢迎堆栈溢出。请不要对于未来的问题,“it崩溃”远不如“it崩溃时出现以下异常”——包括堆栈跟踪——有用。请注意,OP的代码还有许多其他问题,这里没有包含这些问题。请注意,OP的代码还有许多其他问题,这里没有包含这些问题。
public class MeasureC {
    private double radius, area, diameter, circumference;

    public MeasureC (double radius) {
        diameter = 2.0d * radius;
        circumference = Math.pi * diameter;
        area = Math.pi * Math.pow(radius, 2);
    }

    public double getRadius(){
        return radius;
    }
    public double getArea(){
        return area;
    }
    public double getDiameter(){
        return diameter;
    }
    public double getCircumfrence(){
        return circumfrence;
    }
}

public static void main(String[] args) {
    Scanner scan = new Scanner(System.in);
    int p = 5;
    MeasureC[] mc = new MeasureC[p];
    for (int i=0; i <= p; i++) {
        System.out.println("What do you want the radius to be?");
        double userRad = scan.nextDouble();
        mc[i] = new Measure(userRad);
        System.out.println(mc[i].getRadius());
        System.out.println(mc[i].getArea());
        System.out.println(mc[i].getDiameter());
        System.out.println(mc[i].getCircumfrence());
    }
}