今天面试了一家公司,面试的Java初级开发,实习的岗位。面试题也都挺简单的,给了四道题,让我挑一道做。我就选了第一道:
输入一串数字,输出其大写金额,
如:123
输出:壹佰贰拾叁整
之前一直在搞自己的服务器,外加一个月没碰java了,在准备考公务员,面试的时候突然发现自己啥都忘了,差点连最基础的Scanner都写不出了。
现在回来我好好写一下这个代码,当时在哪里只写到了万位以后的
让我们来先分析一下
输出大写金额,这个第一个想到的就是switch-case
然后就是数位,举个例子123
我们要输出壹佰贰拾叁,那就要从左到右,先是壹,百位,二,十位,三,整
这就需要我们判断一次数字在判断一下数位,
再来个例子,10000和10086
我们这次要输出壹万整 和 壹万零捌拾陆整
这个逻辑就是我们要判断 :
if(前一个数字是否为零&&当前数字不为零){
输出(“零”+数字+数位)
}
输出数字;
输出数位;
下面我们代码实现这个逻辑
/**
* 输入一串数字,输出大写金额,如123 输出壹佰贰拾叁整。
*
* @param args
*/
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("请输入一串数字");
String num = input.nextLine();
// for循环中尽量不要用String +=的方式拼接,可以用StringBuilder
boolean perviousIsZero = false;
StringBuilder stringBuilder = new StringBuilder();
for (int i = 0; i < num.length(); i++) {
int a = num.charAt(i);
// 判断当前是否为零
if (a == 48) {
perviousIsZero = true;
continue;
}
// 判断数字前一个是否是零且当前数字不为零
if (perviousIsZero) {
if (a != 48) {
stringBuilder.append("零");
perviousIsZero = false;
} else {
// 都是零就跳过
continue;
}
}
// 获取数字大写
stringBuilder.append(getUpperCase(a));
// 获取数位
stringBuilder.append(getDigitPlace(num.length() - i));
}
System.out.println(stringBuilder.toString() + "整");
}
/**
* 获取数位
*
* @param i
* @return
*/
private static String getDigitPlace(int i) {
switch (i) {
case 2:
case 6:
case 10:
return "拾";
case 3:
case 7:
case 11:
return "佰";
case 4:
case 8:
case 12:
return "仟";
case 5:
case 13:
return "万";
case 9:
return "亿";
default:
return "";
}
}
/**
* 输出数字的大写
*
* @param a
* @return
*/
private static String getUpperCase(int a) {
switch (a) {
case 49:
return "壹";
case 50:
return "贰";
case 51:
return "叁";
case 52:
return "肆";
case 53:
return "伍";
case 54:
return "陆";
case 55:
return "柒";
case 56:
return "捌";
case 57:
return "玖";
default:
return "";
}
}
我们运行一下看看
输出都正常,那我们看看长一点的
这里十万亿位出现了错误,是因为我们switch case只写到了第13位数,超出
了我们默认就没有数位了。所以这里还有地方可以优化。
这里单位有问题,不应该用万亿这个单位,千亿后面就是兆了,所以一般差不多计算到千亿就可以了,再往后就没太大意义了
其实做这个题的时候发生了两件挺尴尬的事情,我第一眼看到这个题的时候,我还以为只是要把数字转成大写形式,没注意是要有数位,还对面试官说这第一题太简单,我可以把顺便第一道做了后再做一道题(本来是四选一的题)。
结果发现自己眼瞎,其实逻辑还是要想一想的,外加一个月没碰java(之前都在搞自己的服务器和 搞数据清洗)我差点连Scanner都忘记怎么写了,还好面试官当时有事离开了一会,我在这一行Scanner这就卡了几分钟。后来面试官到时间了过来看了看我,发现我还没写好,我当时真的尴尬到头晕,没开玩笑,是真的头晕了,看代码都在晃的那种。
总结了下,现在发现自己的基础真的差呀,这最基本的都能忘记。现在还是在把基础多练练,不然都生疏了。