この回答のどこが問題で何が問題か
Java - Doubleとdoubleの使い方(43331)|teratail より:
質問:
import java.awt.geom.Arc2D.Double; public class RoundSample { public static void main(String[] args) { // TODO 自動生成されたメソッド・スタブ Double d = 1234.56789; double rd = Math.round(d); double rid = Math.rint(d); double cd = Math.ceil(d); double fd = Math.floor(d); int i = d.intValue(); } }上記のコードは参考書のコードです。
Doubleの初期化の所で初期化ができずに、eclipseにdoubleにしてくださいとエラーが出てしまいます。
なぜダメなのかがわかりません。
宜しくお願いします。
回答:
Doubleはオブジェクトなのでコンストラクタを使って初期化してください。
(当初はもう1件回答がついていたはずですが、現時点で既に削除されているようです。)
ちなみに正解は、質問者が自己回答しているとおり、想定外の import
を行っている( java.lang.Double
を使うつもりがそうなっていない)ためです。
私が回答を見て思ったのは以下の通りです。
- IDEに貼り付けるだけで正解にたどり着くのに回答者はそれすら怠っている。
- 「コンストラクタを使って初期化」という表現は不正確で、何が言いたいか分からない人からしてみると具体的にどうすれば良いのか分からない。
- おそらく
new Double(1234.56789);
のようにせよ、ということだと思われる。
- おそらく
- (
java.lang.Double
ではないということに気づかなかったとしても) オートボクシングが働くのでこのままでエラーとなることはない。 - 質問に「参考書のコード」だと書いているのを踏まえると、そんな書き間違いをしているわけではないだろうということは想像できるはず。
double
をDouble
にしたいのであれば使用すべきなのはnew
ではなくDouble.valueOf(double) である。
つまり、十分に理解できるべき質問を理解せず、基礎的な言語知識に誤りがある状態で回答がなされ、それが特にツッコまれもせず存在していることが問題である、と考えています。
変な質問を問題視する声はしばしば聞こえますが(例)、そんなものは無視すれば良いだけです。
一方、変な回答は無視すべきものかどうなのか回答を受けた人が判断つかないので非常に害悪です。
過去にteratailのファーストインプレッションとしてマイルドにこの問題に言及したことがありますが、傾向としては今も変わらずこのとおりであると感じます。
本回答者、現時点でteratailランキング総合5位、Javaタグランキングで3位の方なのですが、やはり回答/回答者に対するモデレーションが弱いのが原因の一端にあるのかなと。