2016-10-10 5 views
0

Imはここ指定されたint値を2乗する方法は?

public static MyInt square(MyInt a) { 
    double sqred = a.value; 
    MyInt sqrObjt = new MyInt(sqred); 

    return sqrObjt; 
} 

「の値が解決できません」というエラーを取得することは、私のコンストラクタ

public MyInt(int value){ 
    this.value = value; 
} 
+1

どこがエラーですか? –

+2

あなたの 'square'メソッドで' MyInt.value'が見えますか? –

+0

'value'が' public'であることを確認してください – Arijoon

答えて

1

あなたはミントクラスのintフィールドの値を宣言していることを確認しています。また、正方形のメソッドでdoubleを整数にキャストするようにしてください。それは私のためにうまく動作します。

public class MyInt { 

    int value; // make sure you don't forget to declare the field 

    public static MyInt square(MyInt a) { 
     double sqred = a.value; // you could've just done int sqred = a.value * a.value rather than have a double 
     MyInt sqrObjt = new MyInt((int) sqred); // don't forget to cast sqred to int 
     return sqrObjt; 
    } 

    public MyInt(int value){ 
     this.value = value; 
    } 



    public static void main(String[] args) { 
     MyInt four = new MyInt(4); 
     MyInt fourSquares = square(four); 
     System.out.println(fourSquares.value); 
    } 

} 
2

私はここで、静的メソッドは、クラスMyInt以外の場所であると仮定します。おそらくパブリックな静的メソッドは望ましくありません。これは、オブジェクト指向ではなく、問題に対する手続き的なアプローチです。代わりに、クラスMyIntに非静的メソッドを追加します。

public MyInt square() { 
    return new MyInt(this.value * this.value); 
} 

は使用方法:

MyInt squared = someMyInt.square(); 
0

私はあなたの主な問題は、あなたがクラス中の任意の時点でvalueを宣言したことがないという事実である想像します。しかし、@ junvarがカプセル化のためのgetterとsetterを含めるように答えたところを拡張しました。ここで私はそれを行う方法です....

public class MyInt { 
    private int value; 

    void setValue(int value) { //setter 
     this.value = value; 
    } 

    int getValue() { //getter 
     return this.value; 
    } 

    int square() { //square method 
     int sqred = getValue() * getValue(); 
     return sqred; 
    } 

    public MyInt(int value) { //constructor 
     setValue(value); 
    } 

    public static void main(String[] args) { //main to run it 
     MyInt testCase = new MyInt(3); 
     System.out.println(testCase.square()); 
    } 
} 
関連する問題