2017-09-06 19 views
0

次のプログラムに問題があります。バイナリ演算子 '*'の型が不正です型をint型に変換する方法

public static void main(String[] args) { 

    Int x =new Int(3); 
    int y= square() +twice() +once(); 
    System.out.println(y); 
} 

private int square (Int x) 
{ 
    x= x*x; 
    return x; 
} 

private int twice (Int x) 
{ 
    x= 2*x; 
    return x; 
} 

private int once (Int x) 
{ 
    x= x; 
    return x; 
} 

とこのプログラムの出力は45

である必要があり、ここでのIntクラスです。

public class Int { 
private int x; 
public Int (int x) 
{ 
    this.x=x; 
} 

私が持っている問題は

private int square (Int x) 
    { 
     x= x*x; 
     return x; 
    } 

X = X でのxバイナリ演算子のために悪いオペランドの種類のエラーを与えている 'は' INT、第二のタイプのIntを入力1次回。

int型が必要な '*'は知っていますが、Integer.parseInt(x)を使用しようとしましたが、xは文字列ではありません。

誰かが私を助けることができますか? この問題の原因と解決方法

+0

'parseInt()'にはStringを渡す必要があります。あなたは 'Int'オブジェクトを渡そうとしています。 – Zephyr

+0

また、あなたの 'Int'クラスは無用です。あなたは単にあなたの目的のためにプリミティブ 'int'を使うことができます。 – Zephyr

答えて

1

問題は単純です:あなたはIntタイプを定義し、それが原始的intに暗黙的に変換することを期待するが、これはあなたのIntタイプは、デザインであることが予想されているものとは何の関係もない、それは代わりにFooと呼ばれることができそのIntでも同じです。

あなたは、あなたが例えばそれを行うには、あなた自身の方法、提供しなければならないIntインスタンス内にラップint値を取得できるようにしたい場合は:あなたが行うことができるように

class Int { 
    int x; 

    public int intValue() { return x; } 
} 

Int x = new Int(3); 
int square = x.intValue() * x.intValue(); 

または、破壊カプセル化を避けるために:

class Int 
{ 
    int x; 

    public Int(int x) { this.x = x; } 

    public Int square() { return new Int(x*x); } 
    /* or: int square() { return x*x; }*/ 
} 
+0

ありがとうございますが、Intクラスのint intValue()を公開したくありません。私はメインメソッドの下にプライベートメソッドを保持したい。私のIntクラスを変更しないで、x = x * xをprivateメソッドで動作させる方法はありますか? – user8571514

0

あなたのクラスIntは、(非常に軽く)Integerラッパーのようです。本当にラッパーが必要な場合は、非常にテストされたJavaのIntegerを使用してください。それ以外の場合は、プリミティブintを使用してください。 Javaは演算子のオーバーロードをサポートしていないことに注意してください。

関連する問題