2017-11-05 6 views
0

私は現在javaで継承について学んでいます。私はクラスGeometricObject持っている:私のプログラムでは、ユーザ入力ではなく、クラス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を拡張するクラスの三角形を持っている:私はプログラムを実行するために行くとき

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"を出力しています。だから、唯一の不履行値を使用してだが、

はEDITなぜ私は正直わからない:

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()); 
} 

} 
+0

オフラインですが、これは問題ありません。 'Triangle'インスタンスを作成する場所でスニペットを共有できますか? – Mureinik

+0

@Mureinik私は投稿を編集し、私の主な機能を追加しました。投稿をしたとき何らかの理由で忘れました。 – ANewProgrammer

答えて

0

問題はここにある:

ここに私の主な機能はだ、私がいることを忘れてしまった信じることができません三角形の各辺はより小さく、他の2つの合計より小さいでなければなりません。したがって、>は正しく見えるはずです。オペレータ||(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();

+0

ねえ、ありがとう!私がそれを書いたときに私が何を考えていたのか分からない。私は数日前にこれを開始し、その部分は修正されました! – ANewProgrammer

+0

@anewProgrammer問題を解決した場合は、この問題を正しく記入してください。または私に書いてください。 – icarumbas

+0

私はまだ私の主な機能に問題があります。私は私のユーザー入力をコンストラクタに渡しています。Triangle t =新しい三角形(side1、side2、side3、color、fill);そして側面と塗りつぶしがすべて正しく追跡されている間に、白のデフォルト値を出力していません。 – ANewProgrammer

0

あなたはユーザーからの入力データにスキャナを使用していますが、このデータを渡すことはありませんTriangleのコンストラクタに渡します。ユーザー入力が完了したら、これらの変数をコンストラクタの引数として渡します。

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

これを行ったので、t.getColor() 。デフォルト値の白さえも出力されません。期待どおりに他のすべてが完全に動作しています。 – ANewProgrammer

関連する問題