2

intが値と等しいか、値より1大きい/小さいかどうかをチェックするためのJavaの洗練された方法はありますか?

たとえば、私xが周りにいることを確認した場合54, 5 and 64と6は5から1つだけ離れているので、にtrueを返したいと思います。

これを行うための組み込み関数はありますか?それとも、このように書くほうがいいですか?

int i = 5;
int j = 5;
if(i == j || i == j-1 || i == j+1)
{
    //pass
}
//or
if(i >= j-1 && i <= j+1)
{
    //also works
}

もちろん、上記のコードは醜くて読みにくいです。それで、より良い方法はありますか?

4

2 に答える 2

5

それらの間の絶対差を見つけますMath.abs

private boolean close(int i, int j, int closeness){
    return Math.abs(i-j) <= closeness; 
}

オーバーフローに関する@GregSのコメントに基づいてMath.abs、整数に収まらない差を与えると、オーバーフロー値が得られます

Math.abs(Integer.MIN_VALUE - Integer.MAX_VALUE) //gives 1

引数の 1 つを long にキャストすると、longMath.absが返されます。つまり、違いが正しく返されます。

Math.abs((long) Integer.MIN_VALUE - Integer.MAX_VALUE) //gives 4294967295

したがって、これを念頭に置いて、メソッドは次のようになります。

private boolean close(int i, int j, long closeness){
    return Math.abs((long)i-j) <= closeness; 
}
于 2012-06-12T00:01:46.033 に答える
2

Math.abs(x-5) <= 1簡単なテストとして使用します。しかし、エレガントは見る人の目にあります。代わりに、明確にするよう努めてください。

一般的に、Glitch の良い答えやこれのようなものについては、分析して理解する必要があるオーバーフロー条件があることに注意してください。すべての可能な int を正確に扱うには、引数を long にキャストし、long を使用して比較を実行する必要があります。

于 2012-06-12T00:02:01.370 に答える