jeudi 7 septembre 2017

How can I shorten my if statements

Good afternoon folks. I am trying to code a little program which mimics the code wheel which was included in the computer game The Secret Of Monkey Island. It consists of two cardboard wheels with pirate faces on it. Combining the upper half of the face with another lower half shows different year dates in windows cut out of the second disk. You can see it here: Dial-A-Pirate

So far the task seems pretty straight forward for me. I have an array for my years and two array lists for the identifier of the images file names:

private int [][] years = {  {1710,  1651,   1679,   1719,   1694,   1632,   1668,   1703,   1726,   1564,   1615,   1599,   1669,   1660,   1687},
                            {1658,  1702,   1725,   1630,   1709,   1594,   1614,   1563,   1649,   1693,   1577,   1678,   1686,   1597,   1718},
                            {1724,  1667,   1691,   1685,   1613,   1580,   1723,   1717,   1684,   1628,   1643,   1559,   1573,   1708,   1701},
                            {1672,  1562,   1721,   1666,   1673,   1670,   1692,   1656,   1567,   1674,   1662,   1655,   1646,   1671,   1611},
                            {1627,  1707,   1688,   1699,   1568,   1705,   1579,   1585,   1665,   1706,   1506,   1722,   1716,   1584,   1551},
                            {1566,  1592,   1654,   1635,   1639,   1695,   1704,   1711,   1609,   1681,   1712,   1542,   1565,   1720,   1664},
                            {1690,  1682,   1601,   1619,   1680,   1621,   1652,   1689,   1713,   1697,   1696,   1624,   1604,   1653,   1641}};

ArrayList<Integer> disk1 = new ArrayList<Integer>();
ArrayList<Integer> disk2 = new ArrayList<Integer>();


public void createDisks() {
    int i;
    for(i=1; i <=29; i = i +2 ){
        disk1.add(i);
    }
    for(i=2; i <=30; i = i +2 ){
        disk2.add(i);
    }
}

I use collections.rotate to rotate my lists by one and am only looking at [0] [0]. Since there are only 15 really different combination of the wheel I created an int pirateID to set the labels to the corresponding years in the arrays. And this lead me to my question. The only possible way of doing that I came up with is a huge if-statement:

    private int getPirateID() {

    String temp = Integer.toString(disk1.get(0)) + Integer.toString(disk2.get(0));
    pirateID = Integer.parseInt(temp);

    if (pirateID == 12 || pirateID == 34 || pirateID == 56 || pirateID == 78 || pirateID == 910 || pirateID == 1112 || pirateID == 1314 || pirateID == 1516 || pirateID == 1718 || pirateID == 1920 || pirateID == 2122 || pirateID == 2324 || pirateID == 2526 || pirateID == 2728 || pirateID == 2930) {

        pirateID = 0;
    }

    if (pirateID == 130 || pirateID == 32 || pirateID == 54 || pirateID == 76 || pirateID == 98 || pirateID == 1110 || pirateID == 1312 || pirateID == 1514 || pirateID == 1716 || pirateID == 1918 || pirateID == 2120 || pirateID == 2322 || pirateID == 2524 || pirateID == 2726 || pirateID == 2928) {

        pirateID = 1;
    }

    if (pirateID == 128 || pirateID == 330 || pirateID == 52 || pirateID == 74 || pirateID == 96 || pirateID == 118 || pirateID == 1310 || pirateID == 1512 || pirateID == 1714 || pirateID == 1916 || pirateID == 2118 || pirateID == 2320 || pirateID == 2522 || pirateID == 2724 || pirateID == 2926) {
        pirateID = 2;
    }

    if (pirateID == 126 || pirateID == 328 || pirateID == 530 || pirateID == 72 || pirateID == 94 || pirateID == 116 || pirateID == 138 || pirateID == 1510 || pirateID == 1712 || pirateID == 1914 || pirateID == 2116 || pirateID == 2318 || pirateID == 2520 || pirateID == 2722 || pirateID == 2924) {
        pirateID = 3;
    }

    if (pirateID == 124 || pirateID == 326 || pirateID == 528 || pirateID == 730 || pirateID == 92 || pirateID == 114 || pirateID == 136 || pirateID == 158 || pirateID == 1710 || pirateID == 1912 || pirateID == 2114 || pirateID == 2316 || pirateID == 2518 || pirateID == 2720 || pirateID == 2922) {
        pirateID = 4;
    }

    if (pirateID == 122 || pirateID == 324 || pirateID == 526 || pirateID == 728 || pirateID == 930 || pirateID == 112 || pirateID == 134 || pirateID == 156 || pirateID == 178 || pirateID == 1910 || pirateID == 2112 || pirateID == 2314 || pirateID == 2516 || pirateID == 2718 || pirateID == 2920) {
        pirateID = 5;
    }

    if (pirateID == 120 || pirateID == 322 || pirateID == 524 || pirateID == 726 || pirateID == 928 || pirateID == 1130 || pirateID == 132 || pirateID == 154 || pirateID == 176 || pirateID == 198 || pirateID == 2110 || pirateID == 2312 || pirateID == 2514 || pirateID == 2716 || pirateID == 2918) {
        pirateID = 6;
    }

    if (pirateID == 118 || pirateID == 320 || pirateID == 522 || pirateID == 724 || pirateID == 926 || pirateID == 1128 || pirateID == 1330 || pirateID == 152 || pirateID == 174 || pirateID == 196 || pirateID == 218 || pirateID == 2310 || pirateID == 2512 || pirateID == 2714 || pirateID == 2916) {
        pirateID = 7;
    }

    if (pirateID == 116 || pirateID == 318 || pirateID == 520 || pirateID == 722 || pirateID == 924 || pirateID == 1126 || pirateID == 1328 || pirateID == 1530 || pirateID == 172 || pirateID == 194 || pirateID == 216 || pirateID == 238 || pirateID == 2510 || pirateID == 2712 || pirateID == 2914) {
        pirateID = 8;
    }

    if (pirateID == 114 || pirateID == 316 || pirateID == 518 || pirateID == 720 || pirateID == 922 || pirateID == 1124 || pirateID == 1326 || pirateID == 1528 || pirateID == 1730 || pirateID == 192 || pirateID == 214 || pirateID == 236 || pirateID == 258 || pirateID == 2710 || pirateID == 2912) {
        pirateID = 9;
    }

    if (pirateID == 112 || pirateID == 314 || pirateID == 516 || pirateID == 718 || pirateID == 920 || pirateID == 1122 || pirateID == 1324 || pirateID == 1526 || pirateID == 1728 || pirateID == 1930 || pirateID == 212 || pirateID == 234 || pirateID == 256 || pirateID == 278 || pirateID == 2910) {
        pirateID = 10;
    }

    if (pirateID == 110 || pirateID == 312 || pirateID == 514 || pirateID == 716 || pirateID == 918 || pirateID == 1120 || pirateID == 1322 || pirateID == 1524 || pirateID == 1726 || pirateID == 1928 || pirateID == 2130 || pirateID == 232 || pirateID == 254 || pirateID == 276 || pirateID == 298) {
        pirateID = 11;
    }
    if (pirateID == 18 || pirateID == 310 || pirateID == 512 || pirateID == 714 || pirateID == 916 || pirateID == 1118 || pirateID == 1320 || pirateID == 1522 || pirateID == 1724 || pirateID == 1926 || pirateID == 2128 || pirateID == 2330 || pirateID == 252 || pirateID == 274 || pirateID == 296) {
        pirateID = 12;
    }
    if (pirateID == 16 || pirateID == 38 || pirateID == 510 || pirateID == 712 || pirateID == 914 || pirateID == 1116 || pirateID == 1318 || pirateID == 1520 || pirateID == 1722 || pirateID == 1924 || pirateID == 2126 || pirateID == 2328 || pirateID == 2530 || pirateID == 272 || pirateID == 294) {
        pirateID = 13;
    }
    if (pirateID == 14 || pirateID == 36 || pirateID == 58 || pirateID == 710 || pirateID == 912 || pirateID == 1114 || pirateID == 1316 || pirateID == 1518 || pirateID == 1720 || pirateID == 1922 || pirateID == 2124 || pirateID == 2326 || pirateID == 2528 || pirateID == 2730 || pirateID == 292) {
        pirateID = 14;
    }


    return pirateID;
}

But that really can't be it? There has to be a much shorter way of doing this, right?

Aucun commentaire:

Enregistrer un commentaire