出来混总要还的..
最近在把《疯狂JAVA讲义》再看一遍,书真的是要多读几遍 每次读都会有不同的收获和感受
以往我都只是看看课后题 从没做过,所以这次我打算做一遍一些有意义的题目
应该是比较low的,但是毕竟是个学习的过程,记录一下,以后再翻开来看看。
题目是:编写程序,将浮点数转换成人命币读法的字符串。
直接上代码 也比较简单。稍稍改编了一下。
package chapter4;
import java.util.Arrays;
import java.util.Scanner;
public class ChangeRMBFromFloatToString {
private String[] hanArr = {
"零","壹","贰","叁","肆",
"伍","陆","柒","捌","玖"
};
private String[] unitArr = {"分","角","元","十","百","千","万",""};
//private String[] unitDecimalArr = {"分"}
//这里直接用long保留整数部分了
private String[] divide(double num)
{
long zheng = (long)num;
long xiao = Math.round((num - zheng) * 100);
return new String[]{zheng + "", String.valueOf(xiao)};
}
/*
* 这里设计使用一个flag来做分割 整数部分和分数部分
* 本来想把单位分为两个数组 在处理的时候 将unitArr这个数组分成
* 两个一个是{"元","十","百","千","万"} 一个是{"分","角"}
* 在处理不同的部分时传入 不同的数组
* 程序 还是不完整 要在result那边修修补补
* 等有空了再改改
* */
private String toHanStr(String numStr,int flag)
{
String result = "";
int numLen = numStr.length();
if(flag == 1) {
for (int i = 0 ; i < numLen ; i++ )
{
int num = numStr.charAt(i) - 48;
if ( i != numLen - 1 && num != 0)
{
result += hanArr[num] + unitArr[numLen - i + 1];
}
else {
result += hanArr[num];
}
}
result = result + unitArr[2];
}
else {
for (int i = 0 ; i < numLen ; i++ )
{
int num = numStr.charAt(i) - 48;
if ( i != numLen - 1 && num != 0)
{
result += hanArr[num] + unitArr[numLen - i -1];
}
else {
result += hanArr[num];
}
}
result = result + unitArr[0];
}
return result;
}
/*
* 去除多个零
* 运用方法是遍历每个字符
* 前一个和后一个 甚至后几个做对比
* 因为这里我们有千 万 这种单位做隔,因此仅会出现 连续多个零的情况
* 如果相同 则跳过
* 如果不同 则将 j的值 赋值给i 即i也跳过那么多个重复的零
* 最后将newString返回
* */
public static String removeZero(String oldString) {
String newString = "";
int length = oldString.length();
int i = 0;
int j = i + 1;
newString = newString + oldString.charAt(i);
for(;jif(oldString.charAt(i)==oldString.charAt(j)) {
j = j+1;
}else {
i = j;
j += 1;
newString = newString + oldString.charAt(i);
}
}
return newString;
}
public static void main(String[] args)
{
ChangeRMBFromFloatToString nr = new ChangeRMBFromFloatToString();
Scanner scanner = new Scanner(System.in);
while(true) {
System.out.println("请输入要换算的数字,整数部分请不要超过五位数哦哦!");
double inputNumber = scanner.nextDouble();
String[] zhengPart = nr.divide(inputNumber);
String integerPart = zhengPart[0];
String decimalPart = zhengPart[1];
//加个判断吧 整数长度不能过长
if(integerPart.length() > 5) {
System.out.println("过长了 请重新输入");
}else {
System.out.println("整数部分:"+nr.toHanStr(zhengPart[0], 1));
System.out.println("分数部分:"+nr.toHanStr(zhengPart[1], 0));
String all = nr.toHanStr(zhengPart[0], 1) + nr.toHanStr(zhengPart[1], 0);
System.out.println(all);
System.out.println(removeZero(all));
}
}
}
}