2016-06-22 11 views
0

こんにちは私はこの宿題を理解するのに少し問題があります。私は数週間前にJavaを始めたばかりです。クラス作りを始めたばかりなので、ここに質問があります。Javaでオブジェクトを構築することを学ぶ

問題:私は最初のコンストラクタとsetRadiusに問題があります。私は一般的にそれらの中で何をすべきか分かりません。 setRadiusに入力して、その値をそのコンストラクタに送りますか?コンストラクタとは何ですか?

は、次のフィールドがありCircleクラスを書く:

  • 半径:ダブル
  • PI:最後のダブル値3.14159

で初期化をクラスには次のメソッドが必要です:

  • コンストラクタ:円の半径を引数として受け取ります。
  • コンストラクタ:半径フィールドを0.0に設定する引数なしのコンストラクタです。
  • setRadius:radiusフィールドのミューテータメソッド。
  • getRadius:radiusフィールドのアクセサメソッド。
  • getArea:円の面積を返します。面積は、面積= PI *半径*半径として計算されます。
  • getDiameterは:=直径として計算される円の直径を返す半径* getCircumference 2.
  • :円周= 2 * PI *半径として算出される円の円周を返します。

サークルの半径をユーザーに確認し、サークルオブジェクトを作成してから、サークルの面積、直径、および円周を報告することによって、Circleクラスを実証するプログラムを作成します。

だから私はこのコードを書いた:

public class CircleClass { 

    final double PI = 3.14159; 
    double radius; 

    // this constructor allows the input of the user 
    public CircleClass (double rad){ 
     radius = rad; 
    } 

    // this is the default constructor in case of no user input 
    public CircleClass(){ 
     radius = 0; 
    } 

    // this method allows you to set the radius 
    public void setRadius (double input){ 
     //CircleClass input; 
     radius = input; 
    } 

    // value returners // 

    // returns radius 
    public double getRadius(){ 
     return radius; 
    } 

    // returns area 
    public double getArea(){ 
     return PI * radius * radius; 
    } 

    // returns diameter 
    public double getDiameter(){ 
     return radius * 2; 
    } 

    // returns circumference 
    public double getCircumference(){ 
     return 2 * PI * radius; 
    } 

} 

だから私は、最初の方法としては困惑しているとも、あなたが何かを見て、あなたが私と思えば、私は、このプログラムのどこかミスを犯したかもしれません私に教えてください。外(

まず、あなたのJavaのドキュメントの先頭に以下のインポートが含まれています(実際には、あなたが作成したプログラムで何かをする方法)mainメソッドを作成することにより

+0

プログラムはユーザー入力に基づいていますが、ユーザー入力が行われる方法はありません。プログラムのその時点にまだ達していないと仮定していますか? setRadius()メソッドが依存しているのは、入力に半径を設定するためです。 – torus

+0

いいえ私はクラスをまとめるだけではありませんでした –

+0

setRadius()メソッドを理解するためには必要です。私はコードにいくつかの変更を加え、私はあなたの質問を説明しようとします。 – torus

答えて

0

クラスのインスタンス/オブジェクトを作成すると、基本的に、このクラスのコンストラクタ(デフォルト/パラメータ化された)コンストラクタが呼び出されます。 NO-(

CircleClass circleClass = new CircleClass(10); 

これは、クラスの(コードの最初のコンストラクタ)パラメータ化されたコンストラクタを呼び出すと、デフォルトのコンストラクタを呼び出す10

CircleClass circleClass = new CircleClass(); 

このように半径の値を設定しますあなたのクラスの2番目のコンストラクタ)を返します。

setRadius(double)メソッドを使用して半径の値を設定する場合は、クラス。クラスのメソッドはクラスのオブジェクトを使ってアクセスできるので、

次のようにそれを行うことができます。メソッドはパブリックstaticとして定義されている場合

Scanner in = new Scanner(System.in); 
CircleClass circleClass = new CircleClass(); // calls the no-arg constructor 
System.out.println("Enter the radius of the circle : "); 
double radius = in.nextDouble(); 
circleClass.setRadius(radius); // this sets the radius of the circle using the method setRadius(double) of the class 

方法はまた、クラス名を使用してJavaで呼び出すことができます。コードフラグメントを考えてみましょう。次のように

public class Class1{ 
    public static final void PrintMessage(){ 
     System.out.println("Just prints a message"); 
    } 
} 

方法PRINTMESSAGE(ボイド)クラス名を使用して呼び出すことができます。

また
Class1.PrintMessage(); // Calls the method PrintMessage(void) 

、私は問題が与えられたコード内の任意のミスが表示されませんステートメント。

ただし、クラス変数に 'this'変数を使用することができます。多くの場合、変数に意味のある名前がなくなることがあります(あなたの場合は、setRadius(double)メソッドのradiusの変数名として入力を使用していますが、他のプログラマーにはあまり意味がないかもしれません)。ただし、 'this'変数を使用すると、これを回避できます。

public class CircleClass{ 
    double radius; // class variable 

    public CircleClass(double radius){ 
     this.radius = radius; // this.radius -> refers to the class variable 
    } 
    public void setRadius(double radius){ 
     this.radius = radius; // radius -> refers to the variable passed as argument 
    } 
} 

ちょっとしたヒントは、ちょっとした驚きです。

0

、あなたはより良い理解を得る可能性がありますクラス)。これは、ユーザー入力を処理するJavaメソッドに建て使用できるようになります:

import java.util.Scanner; 

は、次にmainメソッドで:メインメソッド内

public static void main(String args[]) { 
    Scanner input = new Scanner(System.in); 
    CircleClass cc = new CircleClass(input.nextDouble()); 

    System.out.println(cc.getArea()); 


    } 

には、最初にスキャナオブジェクトを作成し、その私たちを私たちがインポートしたScannerクラスから "input"という名前を与えます。これにより、ユーザー入力を取ることができます。

次にCircleClassオブジェクトを作成します(名前をccとし、任意の名前を付けることができます)。このオブジェクトは、クラス(CircleClass())と同じ名前のメソッドのように、クラスのコンストラクタを直接参照しています。さて、コンストラクタはデータ型doubleのパラメータを取るので、オブジェクトを作成するときには "double"パラメータも指定する必要があります。ユーザー入力(input.nextDouble()、<に設定したもの) - これは、Scannerクラスを使用して行う方法です。

次に、作成したリターンメソッドの1つ(この場合はgetArea())を印刷します。ただし、 "cc"はCircleClassオブジェクトの名前なので、cc.getArea()を追加することに注意してください。 CircleClassオブジェクトを作成することで、このようにCircleClassクラスの内部でメソッドを使用することができます。

これはあまり混乱しないと思っています。

+0

それは1秒ではなかった@LinusAronsson。 –

0

CircleClassクラスのインスタンスを2つ作成できます。

CircleClass uncircle = new CircleClass(); //Default constructor 
CircleClass circle = new CircleClass(5.7); 

0を返しますuncircle.getRadius()方法。出力を確認するには、circle.getRadius()を試してみることをお勧めします。

関連する問題