JAVA自定义进制类

更新时间:2023-05-14 01:23:58 阅读: 评论:0

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

本文发布于:2023-05-14 01:23:58,感谢您对本站的认可!

本文链接:https://www.wtabcd.cn/fanwen/fan/82/620873.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:进制   列号   参数   定义   转换   数据   字符
相关文章
留言与评论(共有 0 条评论)
   
验证码:
推荐文章
排行榜
Copyright ©2019-2022 Comsenz Inc.Powered by © 专利检索| 网站地图