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…谢谢!成功了。使它工作的是使立方体扩展棱镜集。