2016-05-31 13 views
0

これは、精度エラーフォルトのある行です。精度が低下する可能性があります(ただし、そうではありません)

[A] = m%3;

mがlong Aはint []です。 私のエラーは ですエラー:可能性のある精度の低下 [i] = m%3 が必要ですint が見つかりました。

唯一の潜在的な回答が0,1,2の場合、どのようにエラーが発生しますか? Aをlong []と宣言する以外の方法はありませんか? それは潜在的に大きい配列なので、私はそれを望んでいません(実際には私はAを短くすることを好みます) また、私はエラーを試みました:[i] = m%3L、同じ結果です。

+1

[intに値を与えるとき、括弧内の「int型」とは何を意味するのでしょうか?]の可能性のある重複します(http:/あなたがキャスティングされているlongの価値を知っていない、あなたは、整数オーバーフローを有することができます/stackoverflow.com/questions/9875960/what-does-a-int-in-parenthesis-mean-when-givin g-a-value-to-an-int) –

+0

Javaはあなたが3以上の変調をしていることを知らない。もしそれが2^8より大きい数であれば、Aはこの大きな数を保持できないのでエラーを引き起こす。 'A [i] =(int)(m%3);' –

答えて

2

コンパイラは結果を見ないので、型を調べます。 m%3のタイプはlongで、intに入れようとしています。

したがって、longに格納されている値がintに格納できる値よりも大きい可能性があるため、コンパイラは怒っています。問題を除去するために

、あなたはintに戻って結果をキャストする必要があります:あなたがこれを行うと結果は0,1または2である知っているので

A[i] = (int) (m % 3); 

しかし、あなたがこれを行うことができます

public static void main(String[] args) { 
    long l = Integer.MAX_VALUE + 1L; 
    System.out.println(l); 
    // 2147483648 
    System.out.println((int)l); 
    // -2147483648 
} 
+1

あなたがSystem.out.println(l)を書いたとしても、それを無視するか、またはモジュラをintにキャストしてください。 intにキャストせずに結果は-2147483648になります。 Integer.MAX_VALUEはintであり、1もintであるためです。したがって加算の結果はintであり、加算の瞬間にオーバーフローします –

+0

良い点は、関連コードを編集しました。 –

関連する問題