JAVA⾃定义进制类
项⽬上的需求,需要把⼀个指定的列号(整型)换算为Excel的字符列号(类似于AA、AB等),于是写了下⾯这个类,可⽀持任意⾃定义进制,⽐如3进制,4进制等等诸如此类,并⽀持设置起始最⼩值,起始Excel的列号就是最⼩值为1的27进制,代码如下:
1. import java.util.ArrayList;
2. import java.util.List;
3.
4. /**
5. * ⾃定义进制类
6. *
7. * @category 框架⼯具实体类
8. * @author 王钟沛
9. * @version 1.0
10. */
11. public class CustomDigit {
12.
13. /** ⼗进制数 */
14. private Integer decimal;
15.
16. /** ⽤于储存转换后数据的列表 */
17. private List<CustomInteger> numberList = new ArrayList<CustomInteger>();
18.
19. /** 位数,⽐如2、8、10、16、60等等任意正整数 */
20. private Integer digit;
21.
22. /** 最⼩值,默认为0 */
23. private Integer minValue = 0;
24.
25. public CustomDigit() {
26. super();
27. }
28.
29. public CustomDigit(Integer decimal, Integer digit) {
30. this.decimal = decimal;
31. this.digit = digit;
32. numberList.add(new CustomInteger(0));
33. }
34.
35. public CustomDigit(Integer decimal, Integer digit, Integer minValue) {
36. this.decimal = decimal;
37. this.digit = digit;
38. this.minValue = minValue;
39. numberList.add(new CustomInteger(0));
40. }
41.
42. /**
43. * @return the decimal
44. */
45. public Integer getDecimal() {
46. return decimal;
47. }
48.
49. /**
50. * @param decimal
51. * the decimal to t
52. */
53. public void tDecimal(Integer decimal) {
54. this.decimal = decimal;
55. }
56.
57. /**
58. * @return the numberList
59. */
60. public List<CustomInteger> getNumberList() {
61. return numberList;
62. }
63.
64. /**
65. * @param numberList
66. * the numberList to t
67. */
68. public void tNumberList(List<CustomInteger> numberList) {
69. this.numberList = numberList;
70. }
71.
72. /**
73. * @return the digit
74. */
75. public Integer getDigit() {积累造句
76. return digit;
77. }
78.
79. /**
80. * @param digit
81. * the digit to t
红岩的作者82. */
83. public void tDigit(Integer digit) {
84. this.digit = digit;
85. }
86.
87. /**
88. * @return the minValue
89. */
90. public Integer getMinValue() {
91. return minValue;
92. }
93.
94. /**
95. * @param minValue
96. * the minValue to t
97. */
98. public void tMinValue(Integer minValue) {
99. this.minValue = minValue;
100. }
101.
白茶冲泡方法102. public void clear() {
103. this.decimal = Integer.valueOf(0);
104. this.digit = Integer.valueOf(0);
105. this.minValue = Integer.valueOf(0);
106. this.numberList.clear();
107. }
108.
109. public Integer getLength() {
110. return this.numberList.size();
111. }
112.
113. private List<CustomInteger> formattedNumberList() {
114. int initialNumber = decimal.intValue();
115. while (initialNumber > 0) {
116. int tempNumber = initialNumber > digit.intValue() ? digit
117. .intValue() : initialNumber;
118. CustomInteger lastNumber = (getLength() - 1); 119. lastNumb
er.Value() + tempNumber); 120. initialNumber = initialNumber - tempNumber;
121. arrangementList(getLength() - 1);
122. }
123.
124. return this.numberList;
125. }
126.
127. private void arrangementList(Integer index) {
128. CustomInteger lastNumber = (index);
129. if (Value() >= digit) {
130. boolean flag = fal;
131. int value = Value() - digit + minValue;
132. if(value >= digit){
133. flag = true;
134. // 防⽌+minValue之后⼜再次⼤于进制的阀值
135. value = value - digit + minValue;
136. }
137. // 如果再次⼤于阀值,则向上⼀位进2,否则进1
138. int count = flag ? 2 : 1;
可爱动漫图片
139. lastNumber.tValue(value);
140. if (index.intValue() == 0) {
141. this.numberList.add(0, new CustomInteger(count));
142. return;
藉字组词语143. } el {
144. CustomInteger preNumber = (index - 1); 145. preNumber.Value() + count);
146. }
医后倾城147. }
148. if (index.intValue() == 0) {
149. return;
150. }
151. arrangementList(index - 1);
152. }
153.
154. public List<Integer> getFormattedNumberList() {
155. List<Integer> list = new ArrayList<Integer>();
子宫后位156. this.formattedNumberList();
157. for (CustomInteger ci : this.numberList) {
158. list.Value());
159. }
160. return list;
161. }
162. }
163.短肢剪力墙定义
164. class CustomInteger {
165. private Integer value;
166.
167. public CustomInteger() {
168. }
169.
170. public CustomInteger(Integer value) {
171. this.value = value;
172. }
173.
174. public Integer getValue() {
175. return value;
176. }
177.
178. public void tValue(Integer value) {
179. this.value = value;
180. }
181.
182. public String toString() {
183. return String.valueOf(value);
184. }
185. }
测试代码如下:
1. public static void main(String[] args) {
2. CustomDigit cd = new CustomDigit(750,27,1);
3. for(Integer i :cd.getFormattedNumberList()){
4. // 因为从1开始,所以这边只加上64,即从'A'输出到'Z'
5. System.out.print((char)(i+64));
6. }
7. }
第⼀个参数为10进制的数字,第⼆个参数为进制,第三个参数为该进制下的最⼩值,当最⼩值为0时可省略第三个参数上述测试程序输出结果为:
1. ABV