簡體   English   中英

在類層次結構中設置變量

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM