代码
/**
* @author ObitoSnn
*/
public class Util {
/**
* 输出整数各个位数的值,例如:1234,输出 千位数 = 1,百位数 = 2,十位数 = 3,个位数 = 4
*
* @param num 要输出的整数
*/
public static void print(int num) {
print(num, String.valueOf(num).length(), getDigits(num));
}
private static Digit[] getDigits(int num) {
Digit[] values = Digit.values();
int length = String.valueOf(num).length();
if (values.length < length) {
throw new RuntimeException("第" + length + "位数[" + String.valueOf(num).charAt(0) + "]没有对应的枚举值" + ",请添加相应位数的枚举值");
}
int index = 0;
for (int i = 0; i < values.length; i++) {
if (values[i].count == length) {
index = i;
break;
}
}
Digit[] result = new Digit[length];
int pos = 0;
for (int i = index; i < values.length; i++) {
result[pos++] = values[i];
}
return result;
}
private static void print(int num, int digitsCount, Digit[] digits) {
if (digitsCount != digits.length) {
System.out.println("枚举值不匹配!!!");
return;
}
int digitIndex = 0;
for (int i = 0; i < digitsCount; i++) {
Digit digit = digits[digitIndex++];
if (digitsCount == 1) {
// num为一位数时
System.out.println("" + digit + (num / 1));
return;
}
int zeroCount = digitsCount - 1;
if (i == 0) {
// 第一位,例如:1234,输出1
System.out.println("" + digit + (num / Integer.parseInt("1" + getZeroByCount(zeroCount))));
} else if (i == digitsCount - 1) {
// 个位,例如:1234,输出4
System.out.println("" + digit + (num % 10));
} else {
// 其它位,例如:1234,输出2和3
int sZeroCount = zeroCount - i;
int fZeroCount = sZeroCount + 1;
System.out.println("" + digit + (num % Integer.parseInt("1" + getZeroByCount(fZeroCount)) / Integer.parseInt("1" + getZeroByCount(sZeroCount))));
}
}
/*
上面这个for循环,根据以下代码理解
int num = 1234;
System.out.println("千位数 = " + (num / 1000));
System.out.println("百位数 = " + (num % 1000 / 100));
System.out.println("十位数 = " + (num % 100 / 10));
System.out.println("个位数 = " + (num % 10));
*/
}
private static String getZeroByCount(int zeroCount) {
StringBuilder sb = new StringBuilder(zeroCount);
for (int i = 0; i < zeroCount; i++) {
sb.append("0");
}
return sb.toString();
}
/**
* 位数枚举类
* 必须以从大到小的顺序声明枚举值,否则结果会出错
*/
private enum Digit {
/**
* 百万位
*/
MILLION_DIGIT("百万位", 7),
/**
* 十万位
*/
ONE_HUNDRED_THOUSAND_DIGIT("十万位", 6),
/**
* 万位
*/
TEN_THOUSAND_DIGIT("万位数", 5),
/**
* 千位
*/
THOUSAND("千位数", 4),
/**
* 百位
*/
HUNDRED("百位数", 3),
/**
* 十位
*/
TEN_DIGIT("十位数", 2),
/**
* 个位
*/
DIGIT("个位数", 1);
/**
* 字段描述
*/
private final String desc;
/**
* 对应第几位数,例如:个位数 ---> 1,十位数 ---> 2,百位数 ---> 3,以此类推,该字段写错会导致最终输出结果异常
*/
private final int count;
private Digit(String desc, int count) {
this.desc = desc;
this.count = count;
}
@Override
public String toString() {
return desc + " = ";
}
}
}
运行结果
public class MyApp {
public static void main(String[] args) {
Util.print(12345);
}
}
版权声明:本文为weixin_48206895原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。