<ruby id="bdb3f"></ruby>

    <p id="bdb3f"><cite id="bdb3f"></cite></p>

      <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
        <p id="bdb3f"><cite id="bdb3f"></cite></p>

          <pre id="bdb3f"></pre>
          <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

          <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
          <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

          <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                <ruby id="bdb3f"></ruby>

                企業??AI智能體構建引擎,智能編排和調試,一鍵部署,支持知識庫和私有化部署方案 廣告
                ### 使用二維數組 我們還可以進一步簡化實現兩路分發的解決方案。我們注意到,每個 enum 實例都有一個固定的值(基于其聲明的次序),并且可以通過 ordinal() 方法取得該值。因此我們可以使用二維數組,將競爭者映射到競爭結果。采用這種方式能夠獲得最簡潔、最直接的解決方案(很可能也是最快速的,雖然我們知道 EnumMap 內部其實也是使用數組實現的)。 ```java We can simplify the solution even more by noting that each enum instance has a fixed value (based on its declaration order) and that ordinal() produces this value. A two- dimensional array mapping the competitors onto the outcomes produces the smallest and most straightforward solution (and possibly the fastest, although remember that EnumMap uses an internal array): // enums/RoShamBo6.java // Enums using "tables" instead of multiple dispatch // {java enums.RoShamBo6} package enums; import static enums.Outcome.*; enum RoShamBo6 implements Competitor<RoShamBo6> { PAPER, SCISSORS, ROCK; private static Outcome[][] table = { { DRAW, LOSE, WIN }, // PAPER { WIN, DRAW, LOSE }, // SCISSORS { LOSE, WIN, DRAW }, // ROCK }; @Override public Outcome compete(RoShamBo6 other) { return table[this.ordinal()][other.ordinal()]; } public static void main(String[] args) { RoShamBo.play(RoShamBo6.class, 20); } } ``` 輸出為: ``` ROCK vs. ROCK: DRAW SCISSORS vs. ROCK: LOSE SCISSORS vs. ROCK: LOSE SCISSORS vs. ROCK: LOSE PAPER vs. SCISSORS: LOSE PAPER vs. PAPER: DRAW PAPER vs. SCISSORS: LOSE ROCK vs. SCISSORS: WIN SCISSORS vs. SCISSORS: DRAW ROCK vs. SCISSORS: WIN SCISSORS vs. PAPER: WIN SCISSORS vs. PAPER: WIN ROCK vs. PAPER: LOSE ROCK vs. SCISSORS: WIN SCISSORS vs. ROCK: LOSE PAPER vs. SCISSORS: LOSE SCISSORS vs. PAPER: WIN SCISSORS vs. PAPER: WIN SCISSORS vs. PAPER: WIN SCISSORS vs. PAPER: WIN ``` table 與前一個例子中 initRow() 方法的調用次序完全相同。 與前面一個例子相比,這個程序代碼雖然簡短,但表達能力卻更強,部分原因是其代碼更易于理解與修改,而且也更直接。不過,由于它使用的是數組,所以這種方式不太“安全”。如果使用一個大型數組,可能會不小心使用了錯誤的尺寸,而且,如果你的測試不能覆蓋所有的可能性,有些錯誤可能會從你眼前溜過。 事實上,以上所有的解決方案只是各種不同類型的表罷了。不過,分析各種表的表現形式,找出最適合的那一種,還是很有價值的。注意,雖然上例是最簡潔的一種解決方案,但它也是相當僵硬的方案,因為它只能針對給定的常量輸入產生常量輸出。然而,也沒有什么特別的理由阻止你用 table 來生成功能對象。對于某類問題而言,“表驅動式編碼”的概念具有非常強大的功能。
                  <ruby id="bdb3f"></ruby>

                  <p id="bdb3f"><cite id="bdb3f"></cite></p>

                    <p id="bdb3f"><cite id="bdb3f"><th id="bdb3f"></th></cite></p><p id="bdb3f"></p>
                      <p id="bdb3f"><cite id="bdb3f"></cite></p>

                        <pre id="bdb3f"></pre>
                        <pre id="bdb3f"><del id="bdb3f"><thead id="bdb3f"></thead></del></pre>

                        <ruby id="bdb3f"><mark id="bdb3f"></mark></ruby><ruby id="bdb3f"></ruby>
                        <pre id="bdb3f"><pre id="bdb3f"><mark id="bdb3f"></mark></pre></pre><output id="bdb3f"></output><p id="bdb3f"></p><p id="bdb3f"></p>

                        <pre id="bdb3f"><del id="bdb3f"><progress id="bdb3f"></progress></del></pre>

                              <ruby id="bdb3f"></ruby>

                              哎呀哎呀视频在线观看