2

私はJavaで働いていて、仲間の大学が書いた奇妙なコードブロックに出くわしました。モジュラス演算子が機能すると確信していますが、何らかの理由で、演算子から期待した結果が得られません。

現在、コードは次のように記述されています。

long divisionID = myMaxId % 40;
                if (divisionID == 0) {
                    divisionID = 1;
                }
                long empiresubID = 1;
                if (myMaxId >= 1600) {
                    empiresubID = 2;
                }
                if (myMaxId >= (1600 * 2)) {
                    empiresubID = 3;
                }
                if (myMaxId >= (1600 * 3)) {
                    empiresubID = 4;
                }
                if (myMaxId >= (1600 * 4)) {
                    empiresubID = 5;
                }
                if (myMaxId >= (1600 * 5)) {
                    empiresubID = 6;
                }

他のいくつかの場所でも同様で、これは 1600*40 まで上がります。

myMaxId %1600 にモジュラス演算子を使用することを考えましたが、それは間違った結果をもたらしました。

最終目標は 40 の部門があることです。まず、ユーザー登録時に myMaxID % 40 を使用して、すべての部門のサブ部門 1 を埋めます。

それが完了すると、サブディビジョンは 2 に反転し、すべてのディビジョンのサブディビジョン 2 を埋めます。

現在プログラムされている方法は効率的ではないと思います。これを行うには他の方法があるはずです。

これに関する考えや助けは素晴らしいでしょう。

4

3 に答える 3

7

ifに置き換えることで s のチェーンを取り除くことができると思います

long empiresubID = (myMaxId / 1600) + 1;
于 2013-01-09T03:49:23.220 に答える
4

メソッドは次の 2 行に置き換えることができます。

long divisionID = myMaxId % 40 == 0 ? 1 : myMaxId % 40;
long empiresubID = (myMaxId / 1600) + 1;
于 2013-01-09T04:19:06.953 に答える
2

myMaxId(整数除算を使用して)1600で除算しないのはなぜですか?

empiresubID次に、結果に1を加えて直接設定できます...

このようなコードが本番環境にどれだけ存在するかを見ると、いつも驚かされます!

于 2013-01-09T03:50:28.263 に答える