[英]How to only allow user to use certain values and have to make them use a $ in their input for my program
[英]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.