Java 在类层次结构中设置变量

Java 在类层次结构中设置变量,java,class,variables,inheritance,hierarchy,Java,Class,Variables,Inheritance,Hierarchy,我正在写一个程序,根据学校的班级等级来查找形状的体积和表面积。我试图在主类中获得一个方法来设置抽象类中的变量,但它不起作用 以下是主要课程: import java.util.Scanner; public class ShapeDriver{ public double cubeSide; public static void main(String[] args){ Scanner input = new Scanner(System.in); System.

我正在写一个程序,根据学校的班级等级来查找形状的体积和表面积。我试图在主类中获得一个方法来设置抽象类中的变量,但它不起作用

以下是主要课程:

import java.util.Scanner;

public class ShapeDriver{

  public double cubeSide;

  public static void main(String[] args){

    Scanner input = new Scanner(System.in);
    System.out.println("Enter 1 for cube, 2 for rectangular prism, 3 for cylinder, 4 for cone, or 5 for sphere.");
    int shapeNum = input.nextInt();

    if(shapeNum == 1){
      ShapeDriver shDriver = new ShapeDriver();
      PrismSet prism = new PrismSet();
      System.out.println("Enter the length of a side of the cube.");
      shDriver.cubeSide = input.nextDouble();
      prism.setCubeLength();

      Cube cu = new Cube();
      System.out.println("Surface area: " + cu.surfaceArea());
      System.out.println("Volume: " + cu.volume());
    }

  }

}
下面是一个抽象类,其中包含我要更改的变量prismWidth和prismHeight:

public abstract class Prisms implements ShapeFunctions{

  public double prismWidth;
  public double prismHeight;
  public double prismDepth;

  public double findFrontBackFaceArea(double prismHeight, double prismWidth){
    double prismFrontBackFaceArea = prismHeight * prismWidth * 2;
    return prismFrontBackFaceArea;
  }

  public double findRightLeftFaceArea(double prismHeight, double prismDepth){
    double prismRightLeftFaceArea = prismHeight * prismWidth * 2;
    return prismRightLeftFaceArea;
  }

  public double findTopBottomFaceArea(double prismWidth, double prismDepth){
    double prismTopBottomFaceArea = prismWidth * prismDepth * 2;
    return prismTopBottomFaceArea;
  }

}
下面是我编写的用来访问抽象类中变量的类:

public class PrismSet extends Prisms{

  public double surfaceAreaHolder;
  public double volumeHolder;

  public void setCubeLength(){
    ShapeDriver sDriver = new ShapeDriver();
    super.prismHeight = sDriver.cubeSide;
    super.prismWidth = sDriver.cubeSide;
  }

  public double surfaceArea(){
    return surfaceAreaHolder;
  }

  public double volume(){
    return volumeHolder;
  }


}
当我输入一个数字作为cubeSide的值时,表面积和体积都返回0.0。我做错了什么

编辑:以下是多维数据集类:

public class Cube extends Prisms implements ShapeFunctions{

  public double surfaceArea(){
    double cubeSurfaceArea = super.findFrontBackFaceArea(super.prismHeight, super.prismWidth) * 3;
    return cubeSurfaceArea;
  }

  public double volume(){
    double cubeVolume = Math.pow(super.prismWidth, 3);
    return cubeVolume;
  }

 }

尝试在PrismSet中修改此方法

public void setCubeLength(ShapeDriver sDriver){
 super.prismHeight = sDriver.cubeSide;
 super.prismWidth = sDriver.cubeSide;
}
并将其传递给
shDriver


同时将ShapeDriver类更改为:

public static void main(String[] args){

    Scanner input = new Scanner(System.in);
    System.out.println("Enter 1 for cube, 2 for rectangular prism, 3 for cylinder, 4 for cone, or 5 for sphere.");
    int shapeNum = input.nextInt();

    if(shapeNum == 1){
      ShapeDriver shDriver = new ShapeDriver();
      Cube cube = new Cube();
      System.out.println("Enter the length of a side of the cube.");
      shDriver.cubeSide = input.nextDouble();
      cube.setCubeLength(shDriver); // change this also

      System.out.println("Surface area: " + cu.surfaceArea());
      System.out.println("Volume: " + cu.volume());
    }

  }

好的,我想你想要你的立方体扩展棱镜集,否则,我不确定你想要实现什么。 我通过以下代码实现了这一点:

import java.util.Scanner;

public class ShapeDriver {

    public double cubeSide;

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.println("Enter 1 for cube, 2 for rectangular prism, 3 for cylinder, 4 for cone, or 5 for sphere.");
        int shapeNum = input.nextInt();

        if (shapeNum == 1) {
            ShapeDriver shDriver = new ShapeDriver();
            Cube cube = new Cube();
            System.out.println("Enter the length of a side of the cube.");
            shDriver.cubeSide = input.nextDouble();
            cube.setCubeLength(shDriver);

            System.out.println("Surface area: " + cube.surfaceArea());
            System.out.println("Volume: " + cube.volume());
        }
    }
}
棱镜:

public abstract class Prisms implements ShapeFunctions {

    public double prismWidth;
    public double prismHeight;
    public double prismDepth;

    public double findFrontBackFaceArea(double prismHeight, double prismWidth) {
        double prismFrontBackFaceArea = prismHeight * prismWidth * 2;
        return prismFrontBackFaceArea;
    }

    public double findRightLeftFaceArea(double prismHeight, double prismDepth) {
        double prismRightLeftFaceArea = prismHeight * prismWidth * 2;
        return prismRightLeftFaceArea;
    }

    public double findTopBottomFaceArea(double prismWidth, double prismDepth) {
        double prismTopBottomFaceArea = prismWidth * prismDepth * 2;
        return prismTopBottomFaceArea;
    }

}
棱镜组

public class PrismSet extends Prisms {

    public double surfaceAreaHolder;
    public double volumeHolder;

    public void setCubeLength(ShapeDriver sDriver) {
        super.prismHeight = sDriver.cubeSide;
        super.prismWidth = sDriver.cubeSide;
    }

    public double surfaceArea() {
        return surfaceAreaHolder;
    }

    public double volume() {
        return volumeHolder;
    }

}
立方体


尝试在PrismSet中修改此方法

public void setCubeLength(ShapeDriver sDriver){
 super.prismHeight = sDriver.cubeSide;
 super.prismWidth = sDriver.cubeSide;
}
并将其传递给
shDriver


同时将ShapeDriver类更改为:

public static void main(String[] args){

    Scanner input = new Scanner(System.in);
    System.out.println("Enter 1 for cube, 2 for rectangular prism, 3 for cylinder, 4 for cone, or 5 for sphere.");
    int shapeNum = input.nextInt();

    if(shapeNum == 1){
      ShapeDriver shDriver = new ShapeDriver();
      Cube cube = new Cube();
      System.out.println("Enter the length of a side of the cube.");
      shDriver.cubeSide = input.nextDouble();
      cube.setCubeLength(shDriver); // change this also

      System.out.println("Surface area: " + cu.surfaceArea());
      System.out.println("Volume: " + cu.volume());
    }

  }

好的,我想你想要你的立方体扩展棱镜集,否则,我不确定你想要实现什么。 我通过以下代码实现了这一点:

import java.util.Scanner;

public class ShapeDriver {

    public double cubeSide;

    public static void main(String[] args) {

        Scanner input = new Scanner(System.in);
        System.out.println("Enter 1 for cube, 2 for rectangular prism, 3 for cylinder, 4 for cone, or 5 for sphere.");
        int shapeNum = input.nextInt();

        if (shapeNum == 1) {
            ShapeDriver shDriver = new ShapeDriver();
            Cube cube = new Cube();
            System.out.println("Enter the length of a side of the cube.");
            shDriver.cubeSide = input.nextDouble();
            cube.setCubeLength(shDriver);

            System.out.println("Surface area: " + cube.surfaceArea());
            System.out.println("Volume: " + cube.volume());
        }
    }
}
棱镜:

public abstract class Prisms implements ShapeFunctions {

    public double prismWidth;
    public double prismHeight;
    public double prismDepth;

    public double findFrontBackFaceArea(double prismHeight, double prismWidth) {
        double prismFrontBackFaceArea = prismHeight * prismWidth * 2;
        return prismFrontBackFaceArea;
    }

    public double findRightLeftFaceArea(double prismHeight, double prismDepth) {
        double prismRightLeftFaceArea = prismHeight * prismWidth * 2;
        return prismRightLeftFaceArea;
    }

    public double findTopBottomFaceArea(double prismWidth, double prismDepth) {
        double prismTopBottomFaceArea = prismWidth * prismDepth * 2;
        return prismTopBottomFaceArea;
    }

}
棱镜组

public class PrismSet extends Prisms {

    public double surfaceAreaHolder;
    public double volumeHolder;

    public void setCubeLength(ShapeDriver sDriver) {
        super.prismHeight = sDriver.cubeSide;
        super.prismWidth = sDriver.cubeSide;
    }

    public double surfaceArea() {
        return surfaceAreaHolder;
    }

    public double volume() {
        return volumeHolder;
    }

}
立方体


您正在到处初始化新对象。你的立方体类看起来怎么样?你做得有点不对。一旦发现它是if(ShapeEnum==1)中的立方体,为什么要创建PrismSet对象。定义一个多维数据集对象并坚持使用它要简单得多。我必须在Prisms类中设置变量才能使多维数据集类工作。你在任何地方初始化新对象。你的立方体类看起来怎么样?你做得有点不对。一旦发现它是if(ShapeEnum==1)中的立方体,为什么要创建PrismSet对象。定义一个多维数据集对象并坚持使用它要简单得多。我必须在Prisms类中设置变量才能使多维数据集类工作。对不起,我对Java相当陌生。将它传递给shDriver是什么意思?将sDriver放在参数中不会带走它的构造函数,这意味着它不再存在吗?您已经初始化了该对象。为什么要再次初始化它?shDriver.cubeSide=input.nextDouble();意味着ShapeDriver得到了输入。然后,在setCubeLength中初始化一个新的ShapeDrive,它与shDriver无关。所以棱柱高度和宽度被初始化(奇怪的是,我可能会添加)为0…谢谢!成功了。使它工作的是使多维数据集扩展PrismSet。对不起,我对Java相当陌生。将它传递给shDriver是什么意思?将sDriver放在参数中不会带走它的构造函数,这意味着它不再存在吗?您已经初始化了该对象。为什么要再次初始化它?shDriver.cubeSide=input.nextDouble();意味着ShapeDriver得到了输入。然后,在setCubeLength中初始化一个新的ShapeDrive,它与shDriver无关。所以棱柱高度和宽度被初始化(奇怪的是,我可能会添加)为0…谢谢!成功了。使它工作的是使立方体扩展棱镜集。