[英]Setting variables in class hierarchy
我正在編寫一個程序,根據學校的班級層次結構查找形狀的體積和表面積。 我正在嘗試在主類中獲取一種方法來在抽象類中設置變量,但是它不起作用。
這是主要的課程:
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和prismicHeight的抽象類:
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());
}
}
好的,所以,我認為您希望多維數據集擴展PrismSet,否則,我不確定您要實現什么。 我設法用下面的代碼來工作:
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;
}
}
PrismSet
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;
}
}
立方體
public class Cube extends PrismSet 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;
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.