2012-03-14 13 views
1

ユーザーから3つの数値を取得し、オーバーロードされたメソッドに渡すプログラムを作成する必要があります(doubleint)。オーバーロードされたメソッドの使い方(intまたはdoubleの区別)

私の質問は、それがintdoubleかどうかをどうやって判断するのですか?彼らはintを入力した場合

Scanner input = new Scanner(System.in); 
double number1 = input.nextDouble(); // read first double 
double number2 = input.nextDouble(); // read second double 
double number3 = input.nextDouble(); // read third double 

MyMathOps MyMathOps = new MyMathOps(); 
double result = MyMathOps.maximum(number1, number2, number3); 
System.out.println(result); 

しかし、どのような:

は、私がこれをやっている入力を取得するには?これを判断して int maximumメソッドに渡したいと思っています。

+1

もちろん、 'int'を入力すると、 「ダブル」に昇格される。入力する特定のタイプを特定する必要があるのはなぜですか?あなたはそれをコンパイラに任せるべきです。 – Lion

答えて

5

浮動小数点入力をサポートしているので、すべての入力をdoubleとして扱います。入力が整数であるためにだけである場合もありますが、intを使用するのは意味がありません。

+0

'int'は' double'に収まると思います(64ビットがあるので)。 'float'には問題がありますか?異議を撤回した。 +1 – Thilo

1

番号1、番号2および番号3は、すべて倍精度として宣言されます。それらが整数値を含む場合でも、それらは依然として倍(つまり、値1.0)になります。

あなたがそれを知りたい場合は、二重値はまた、あなたが文字列に二重に変換することができ、整数値として表すことができます。

String doubleString = Double.valueOf(number1) 

進ドットの周りに文字列を分割する:

String[] split = doubleString.split("\\."); 

その後、ゼロのみ含むように小数部分をチェック:

boolean canBeInt = split[1].matches("0*"); 

をtrueの場合、Integer.parseInt(split [0])を実行して整数値を取得できます(または元のdoubleをintにキャストするだけ)。

このソリューションでは、最大整数値はチェックされません。

+0

こうすれば、 'next()'や 'nextLine()'を使い、実際に何を入力したのかを解析してください。 – Thilo

+1

'String [] split = doubleString.split("。 ");'このようなドット '.'をエスケープするまでは動作しません。String [] split = doubleString.split(" \\。 ");' – Lion

+0

TY 、 ナイスキャッチ。 –

1

実際には、いくつかの方法があります。たとえば、input.nextDouble()の代わりにinput.next()を使用し、返されたStringを解析してデータ型をチェックすることができます(Integerの最大値によって制限され、小数部を含まないかどうか)

関連する問題