| 1 32 33 34 42 package stockonline.util; 43 44 import java.util.*; 45 46 public class TranDeck 47 { 48 public static final int TRAN_SIZE = 43; 50 public static final int TRAN_BUY = 1; 51 public static final int TRAN_SELL = 2; 52 public static final int TRAN_QUERY_ID = 3; 53 public static final int TRAN_QUERY_CODE = 4; 54 public static final int TRAN_GETHOLDING = 5; 55 public static final int TRAN_CREATE = 6; 56 public static final int TRAN_UPDATE = 7; 57 58 int maxAccountNo; int deckOrder[]; 60 int deckCards[][]; 61 Stack buyStack; 62 Stack sellStack; 63 int index; 64 65 Random rand; 67 public TranDeck() 68 { 69 this(3000); 71 } 72 73 public TranDeck(int maxAccountNo) 74 { 75 this.maxAccountNo = maxAccountNo; 76 deckOrder = new int[TRAN_SIZE]; 77 deckCards = new int[TRAN_SIZE][2]; 78 buyStack = new Stack(); 79 sellStack = new Stack(); 80 81 for (int i = 0; i < TRAN_SIZE - 2; i++) { 83 if (0 <= i && i <= 2) { 84 deckOrder[i] = TRAN_BUY; 85 continue; 86 } 87 88 if (3 <= i && i <= 5) { 89 deckOrder[i] = TRAN_SELL; 90 continue; 91 } 92 93 if (6 <= i && i <= 20) { 94 deckOrder[i] = TRAN_QUERY_ID; 95 continue; 96 } 97 98 if (21 <= i && i <= 35) { 99 deckOrder[i] = TRAN_QUERY_CODE; 100 continue; 101 } 102 103 if (36 <= i && i <= 40) { 104 deckOrder[i] = TRAN_GETHOLDING; 105 continue; 106 } 107 } 108 109 deckOrder[41] = TRAN_CREATE; 110 deckOrder[42] = TRAN_UPDATE; 111 112 rand = new Random(getCurrentThreadNum()); 113 } 114 115 public void setRandomGen(Random rand) 116 { 117 this.rand = rand; 118 } 119 120 public TranInfo getNext() 121 { 122 TranInfo tranInfo = new TranInfo(); 123 124 tranInfo.tranType = deckOrder[index]; 125 tranInfo.accountNo = deckCards[index][0]; 126 tranInfo.stockID = deckCards[index][1]; 127 index++; 128 129 return tranInfo; 130 } 131 132 public void shuffle() 133 { 134 random_shuffle(deckOrder); 136 137 for (int i = 0; i < TRAN_SIZE; i++) { 139 deckCards[i][0] = Math.abs(rand.nextInt() % maxAccountNo) + 1; deckCards[i][1] = Math.abs(rand.nextInt() % 3000) + 1; } 142 143 for (int i = 0; i < TRAN_SIZE; i++) { 145 if (deckOrder[i] == TRAN_BUY) { 146 if (!sellStack.empty()) { 147 int pos = ((Integer )sellStack.pop()).intValue(); 148 deckOrder[i] = TRAN_SELL; 149 deckOrder[pos] = TRAN_BUY; 150 151 deckCards[pos][0] = deckCards[i][0]; 152 deckCards[pos][1] = deckCards[i][1]; 153 } else { 154 buyStack.push(new Integer (i)); 155 } 156 } else if (deckOrder[i] == TRAN_SELL) { 157 if (!buyStack.empty()) { 158 int pos = ((Integer )buyStack.pop()).intValue(); 159 deckCards[i][0] = deckCards[pos][0]; 160 deckCards[i][1] = deckCards[pos][1]; 161 } else { 162 sellStack.push(new Integer (i)); 163 } 164 } 165 } 166 167 index = 0; 168 } 169 170 protected int getCurrentThreadNum() 179 { 180 try { 183 return Integer.parseInt(Thread.currentThread().getName().substring(7)); 184 } 185 catch (Exception e) { 186 return 0; 187 } 188 } 189 190 197 protected void random_shuffle(int deck[]) 198 { 199 for (int n = 1; n < deck.length; n++) { 200 int m = Math.abs(rand.nextInt() % n); 201 int temp = deck[n]; 203 deck[n] = deck[m]; 204 deck[m] = temp; 205 } 206 } 207 } 208 | Popular Tags |