使用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());
}
}