package com.contest;import java.util.HashMap;
import java.util.Map;public class Contest01 { private static int realLength = 0; // 存储数字的真实位数。
private static Map<String, String> map = new HashMap<String, String>(); // 将
// 1~9
// 分别翻译成中文. /**
 * @param args
 */
public static void main(String[] args) {
int counttemp = 0;
String read = args[0];
for (int i = 0; i < read.length(); i++) {
if ("0".equals(read.substring(i, i + 1))) {
counttemp++;
} else {
break;
}
} realLength = read.length() - counttemp; // 这里注意
String realString = read.substring(counttemp); // 获得真实字符串
System.out.println("readResult:" + realString);
System.out.println(realLength);
map.put("0", "零");
map.put("1", "一");
map.put("2", "二");
map.put("3", "三");
map.put("4", "四");
map.put("5", "五");
map.put("6", "六");
map.put("7", "七");
map.put("8", "八");
map.put("9", "九");
String str = readResult(realString, realLength);
System.out.println(str);
System.out.println(realString.length()); } // 定义方法翻译字符串
private static String readResult(String realString, int len) {
String s = ""; // 存储返回的字符串
switch (len) {
case 0: // 位数都为 0 的情况
s = map.get("0");
break;
case 1:
s = map.get(realString.substring(0));
break;
case 2: // 有问题
if (countZero(realString) == 1) { // 有位数为零的情况
if (map.get(realString).substring(0, 1).equals("1")) { // 十位为
// “1”
s = "十";
} else { // 十位不为 ”1“
s = map.get(realString.substring(0, 1)) + "十";
} } else { // 没有位数为 零的情况
if (map.get(realString).substring(0, 1).equals("1")) { // 十位为
// “1”
s = "十" + map.get(realString.substring(1));
} else { // 十位不为 ”1“
s = map.get(realString.substring(0, 1)) + "十"
+ map.get(realString.substring(1));
} }
break;
case 3:
if (countZero(realString) == 0) { // 没有位数为 0
s = map.get(realString.substring(0, 1)) + "百"
+ map.get(realString.substring(1, 2)) + "十"
+ map.get(realString.substring(2));
} else if (countZero(realString) == 1) { // 有一位为 0
if (checkZero(realString, 1)) { // 十位为 0
s = map.get(realString.substring(0, 1)) + "百" + "零"
+ map.get(realString.substring(2));
} else { // 各位为 0
System.out.println("Here");
s = map.get(realString.substring(0, 1)) + "百"
+ map.get(realString.substring(1, 2)) + "十";
}
} else { // 有两位为 0
s = map.get(realString.substring(0, 1)) + "百";
}
break;
case 4:
if (countZero(realString) == 0) { // 没有位数为 0
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百"
+ map.get(realString.substring(2, 3)) + "十"
+ map.get(realString.substring(3));
} else if (countZero(realString) == 1) {
if (checkZero(realString, 1)) {
s = map.get(realString.substring(0, 1)) + "千" + "零"
+ map.get(realString.substring(2, 3)) + "十"
+ map.get(realString.substring(3));
} else if (checkZero(realString, 2)) {
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百" + "零"
+ map.get(realString.substring(3));
} else {
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百"
+ map.get(realString.substring(2, 3)) + "十";
}
} else if (countZero(realString) == 2) {
if (checkZero(realString, 1) && checkZero(realString, 2)) { // 百位和十位为
// 0
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(2, 3))
+ map.get(realString.substring(3));
} else if (checkZero(realString, 1) && checkZero(realString, 3)) { // 百位和个位为
s = map.get(realString.substring(0, 1))
+ "千" // 0
+ map.get(realString.substring(1, 2))
+ map.get(realString.substring(2, 3)) + "十"; } else { // 十位和各位为零
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百";
}
} else { // 三位数为 0
s = map.get(realString.substring(0, 1)) + "千";
}
break;
case 5:
if (countZero(realString) == 0) { // 没有位数为 0
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百"
+ map.get(realString.substring(2, 3)) + "十"
+ map.get(realString.substring(3));
} else if (countZero(realString) == 1) {
if (checkZero(realString, 1)) {
s = map.get(realString.substring(0, 1)) + "千" + "零"
+ map.get(realString.substring(2, 3)) + "十"
+ map.get(realString.substring(3));
} else if (checkZero(realString, 2)) {
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百" + "零"
+ map.get(realString.substring(3));
} else {
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百"
+ map.get(realString.substring(2, 3)) + "十";
}
} else if (countZero(realString) == 2) {
if (checkZero(realString, 1) && checkZero(realString, 2)) { // 百位和十位为
// 0
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(2, 3))
+ map.get(realString.substring(3));
} else if (checkZero(realString, 1) && checkZero(realString, 3)) { // 百位和个位为
s = map.get(realString.substring(0, 1))
+ "千" // 0
+ map.get(realString.substring(1, 2))
+ map.get(realString.substring(2, 3)) + "十"; } else { // 十位和各位为零
s = map.get(realString.substring(0, 1)) + "千"
+ map.get(realString.substring(1, 2)) + "百";
}
} else { // 三位数为 0
s = map.get(realString.substring(0, 1)) + "千";
}
break;
case 6: break;
case 7: break;
case 8: break;
case 9: break; default:
break;
}
return s;
} // 定义方法检查某下标的元素是否为 “0”
public static boolean checkZero(String real, int index) {
if ("0".equals(real.substring(index, index + 1))) {
return true;
} else {
return false;
}
}

// 定义方法计算 0 的个数
public static int countZero(String realString) {
int count = 0;
for (int i = 0; i < realString.length(); i++) {
if (realString.charAt(i) == '0') {
count++;
}
}
return count;
}}问:问题出现在 两位数“case 2 ”那里,
空指针异常!
但是 case 2 的代码及其相关的方法我试试了,都没有问题,但是始终找不到那里有错:
补充:
0001 、1001 、1100 我输入的都很成功,但是到 0010 的时候就出现上述我说的情况了···真心找不到错误!!求帮忙!!