簡體   English   中英

我的程序僅使用我的GeometricObject類中的默認值,而不是用戶輸入

[英]My program is only using the default values from my class GeometricObject instead of the user input

我目前正在學習有關Java繼承的知識。 我有一個GeometricObject類:

public class GeometricObject {
    private String color = "white";
    private boolean filled = false;

    /**Default construct*/
    public GeometricObject() {
    }

    /**Construct a geometric object*/
    public GeometricObject(String color, boolean filled) {
        this.color = color;
        this.filled = filled;
    }

    /**Getter method for color*/
    public String getColor() {
        return color;
    }

    /**Setter method for color*/
    public void setColor(String color) {
        this.color = color;
    }

    /**Getter method for filled. Since filled is boolean,
     so, the get method name is isFilled*/
    public boolean isFilled() {
        return filled;
    }

    /**Setter method for filled*/
    public void setFilled(boolean filled) {
        this.filled = filled;
    }

}

然后,我有一個擴展了GemoetricObject的Triangle類:

import static java.lang.Math.sqrt;

public class Triangle extends GeometricObject{
    double side1 = 1.0;
    double side2 = 1.0;
    double side3 = 1.0;

    public Triangle(){
        super();
    }

    public Triangle(double side1, double side2, double side3, String color, boolean isFilled){
        super(color,isFilled);
        if (side1 <=0||side2 <= 0||side3 <= 0) {
            System.out.println("Sides must be greater than 0!");
        }

        if (side1 > (side2 + side3)||side2 > (side1 + side3)||side3 > (side1 + side2)) {
            this.side1 = side1;
            this.side2 = side2;
            this.side3 = side3;
            System.out.println("Invalid side lengths!");
        }
    }

    public double getSide1(){
        return side1;
    }

    public double getSide2(){
        return side2;
    }

    public double getSide3(){
        return side3;
    }

    public double getArea(){
        double s = (side1 + side2+ side3) / 2;
        return sqrt(s*(s - side1)*(s - side2)*(s-side3));
    }

    public double getPerimeter(){
        return side1 + side2 + side3;
    }

}

當我去運行程序時,它運行正常。 周長和區域均正常工作。 但是,程序沒有輸出用戶輸入的值,而是輸出“白色三角形為1.0 X 1.0 X 1.0”。 因此,它僅使用默認值,但老實說,我不確定為什么

編輯:這是我的主要功能,不能相信我忘記了:

import java.util.Scanner;
public class PA6 {

public static void main(String[] args) {

    Triangle t = new Triangle();
    Scanner input = new Scanner(System.in);

    System.out.println("Enter side 1: ");
    double side1 = input.nextDouble();
    System.out.println("Enter side 2: ");
    double side2 = input.nextDouble();
    System.out.println("Enter side 3: ");
    double side3 = input.nextDouble();
    System.out.println("Enter a color: ");
    String color = input.nextLine();
    input.nextLine();
    System.out.println("Is it filled? ");
    boolean fill = input.nextBoolean();
    input.nextLine();


    System.out.println("The " + t.getColor() + " triangle is " + t.getSide1() + " X " + t.getSide2() + " X " + t.getSide3());
    System.out.println("Area: " + t.getArea());
    System.out.println("Perimeter: " + t.getPerimeter());
    System.out.println("Filled? " + t.isFilled());
}

}

問題在這里:

三角形的每一邊應小於其他兩個和。 因此,您的>應該看起來正確。 運算符|| (OR)也應更改為&& (AND)。

if(side1 < (side2 + side3) && side2 < (side1 + side3) && side3 < (side1 + side2)){ 
    this.side1 = side1;
    this.side2 = side2;
    this.side3 = side3;

} else {
    System.out.println("Invalid side lengths!");
}

UPD:

使用next()代替nextLine()

String color = input.next(); 

並刪除額外的input.nextLine();

您使用掃描儀從用戶輸入數據,但從未將這些數據傳遞給Triangle的構造函數。 完成用戶輸入后,只需將這些變量作為參數傳遞給構造函數:

Triangle t = new Triangle(side1, side2, side3, color, fill);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

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