一道java题
3个回答
展开全部
package com.mlj.source;
public class Num2Rmb {
private String[] hanArr={"零","壹","贰","叁","肆","五","陆","柒","捌","玖"};
private String[] unitArr={"拾","佰","仟","万"};
private String[] xiaoArr={"角","分"};
public Num2Rmb(){}
//整数和小数分成两部分
private String[] divide(double num){
long zheng=(long)num;
long xiao=Math.round((num-zheng)*100);//保留两位有效数
return new String[]{zheng+"",String.valueOf(xiao)};
}
//进行转化
public String toHanStr(String[] number){
int num1;
int num2;
int sum=0;
int length=number[0].length();
int length2=number[1].length();
String result="";
for(int i=0;i<length;i++){
num1=number[0].charAt(i)-48;
if(length>unitArr.length+1){
System.out.println("非法输入!");
return result;
}
if(num1==0){//判断字符串中0的个数
sum++;
}
if(num1!=0&&i!=length-1)//不是最后一个字符且数字不为零
{
result+=hanArr[num1]+unitArr[length-2-i];
if(sum>0){
sum=0;
}
}
else if(num1==0&&i==0){//第一个字符且为零
}
else if(sum>1&&num1==0){//连续出现0的个数大于1且当前数字为零
//result=result;
}
else{
result+=hanArr[num1];
}
if(num1!=0&&i==length-1){//最后一个数字不为0
sum=0;
}
}
if(sum>0){
if(sum==length){//所以数字都为0
result+=hanArr[0];
}
else{//最后数字为0
result=result.substring(0, result.length()-1);
}
}
result+="元";
//处理小数部分
for(int i=0;i<length2;i++){
num2=number[1].charAt(i)-48;
if(length2==1&&num2!=0){//十分位是0,百分位不为0.
result+=hanArr[num2]+xiaoArr[1];
}
else{
if(num2!=0)
{
result+=hanArr[num2]+xiaoArr[i];
}
else{}
}
}
return result;
}
public static void main(String[] args){
Num2Rmb nr=new Num2Rmb();
String[] str=nr.divide(1006.333);
System.out.println(str[0]+"."+str[1]);
String str1=nr.toHanStr(str);
System.out.println(str1);
}
}
public class Num2Rmb {
private String[] hanArr={"零","壹","贰","叁","肆","五","陆","柒","捌","玖"};
private String[] unitArr={"拾","佰","仟","万"};
private String[] xiaoArr={"角","分"};
public Num2Rmb(){}
//整数和小数分成两部分
private String[] divide(double num){
long zheng=(long)num;
long xiao=Math.round((num-zheng)*100);//保留两位有效数
return new String[]{zheng+"",String.valueOf(xiao)};
}
//进行转化
public String toHanStr(String[] number){
int num1;
int num2;
int sum=0;
int length=number[0].length();
int length2=number[1].length();
String result="";
for(int i=0;i<length;i++){
num1=number[0].charAt(i)-48;
if(length>unitArr.length+1){
System.out.println("非法输入!");
return result;
}
if(num1==0){//判断字符串中0的个数
sum++;
}
if(num1!=0&&i!=length-1)//不是最后一个字符且数字不为零
{
result+=hanArr[num1]+unitArr[length-2-i];
if(sum>0){
sum=0;
}
}
else if(num1==0&&i==0){//第一个字符且为零
}
else if(sum>1&&num1==0){//连续出现0的个数大于1且当前数字为零
//result=result;
}
else{
result+=hanArr[num1];
}
if(num1!=0&&i==length-1){//最后一个数字不为0
sum=0;
}
}
if(sum>0){
if(sum==length){//所以数字都为0
result+=hanArr[0];
}
else{//最后数字为0
result=result.substring(0, result.length()-1);
}
}
result+="元";
//处理小数部分
for(int i=0;i<length2;i++){
num2=number[1].charAt(i)-48;
if(length2==1&&num2!=0){//十分位是0,百分位不为0.
result+=hanArr[num2]+xiaoArr[1];
}
else{
if(num2!=0)
{
result+=hanArr[num2]+xiaoArr[i];
}
else{}
}
}
return result;
}
public static void main(String[] args){
Num2Rmb nr=new Num2Rmb();
String[] str=nr.divide(1006.333);
System.out.println(str[0]+"."+str[1]);
String str1=nr.toHanStr(str);
System.out.println(str1);
}
}
展开全部
不知道你写过取出一个数字的各个位上的数字没有?其实就是提取出每个位上的数字用switch,case转换成壹贰叁形式,再加上对应的万千百十分就行。先试着自己写写,有问题问我。实在写不出,我给你写代码。程序还是要自己写的。
追问
遇到的问题太多,只能从个位开始取数,不知道用户输入的是多少位,万千百十分也不好对应,好像得用两个switch嵌套,还是学习一下大侠的代码吧,谢谢了,写完加分
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
package guoqing02;
import java.util.Scanner;
public class Switch {
public static void main(String[] args) {
//用于监听键盘输入
Scanner input = new Scanner(System.in);
// 下面这个是正则表达式,用于匹配用户输入的内容是否符合算术逻辑
String reg1 = "^\\d+$";
String reg2 = "^\\d+.\\d+$";
// 初始化 元、角、分
String yuan = "0";
String jiao = "0";
String fen = "0";
// 使用无限循环方便用户重复操作
while (true) {
//提示用户输入,并接收输入
System.out.print("请输入金额:");
String in = input.nextLine();
//利用正则表达式来匹配输入数据,是否符合要求 输入数据如:1234 1234.12345 否则提示重新输入
if (in.matches(reg1) || in.matches(reg2)) {
//若是用户输入的是一个整数,这在整数后面添加 ".00"
if(in.matches(reg1)) {
in = in + ".00";
}
//利用replace()方法将所有小写数字转换成为大写
in = in.replace("0", "零").replace("1", "壹").replace("2", "贰")
.replace("3", "叁").replace("4", "肆").replace("5", "伍")
.replace("6", "陆").replace("7", "柒").replace("8", "捌")
.replace("9", "玖");
//若是用户输入的数据小数点后面只有一位数,这无法取到 in.dexeOf(".")+3,这样就回出现空异常
try {
in.substring(in.indexOf(".") + 3);
} catch (Exception e) {
//对上面可能发生的异常进行处理,发生这个异常只可能是上述的异常,所以在数后面添加一个 "零"
in = in + "零";
}
//以小数点为标准进行截取数据
yuan = in.substring(0, in.indexOf("."));
//将取到的小数点前面的整数放入char数组内,方便后面在数中添加“单位”
char[] ch = yuan.toCharArray();
//将可能会用到的单位放入utils的String数组里面
String[] utils = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿",
"拾", "佰", "仟" };
String strbuf = "";
//然后对上述2个数组进行遍历并拼接字符串
for (int i = 0; i < ch.length; i++) {
char inte = ch[ch.length - 1 - i];
String util = utils[i];
//字符串的拼接
strbuf = inte + util + strbuf;
}
//获取“角”和“分”
jiao = in.substring(in.indexOf(".") + 1, in.indexOf(".") + 2);
fen = in.substring(in.indexOf(".") + 2, in.indexOf(".") + 3);
//输出最终结果
System.out.println(strbuf + "元" + jiao + "角" + fen + "分");
//程序的缺陷:若是 1001.12 输入结果为:壹仟零佰零拾壹元壹角贰分
//希望有同志改进
} else {
System.out.println("无法正确匹配,请正确输入金额!");
}
}
}
}
import java.util.Scanner;
public class Switch {
public static void main(String[] args) {
//用于监听键盘输入
Scanner input = new Scanner(System.in);
// 下面这个是正则表达式,用于匹配用户输入的内容是否符合算术逻辑
String reg1 = "^\\d+$";
String reg2 = "^\\d+.\\d+$";
// 初始化 元、角、分
String yuan = "0";
String jiao = "0";
String fen = "0";
// 使用无限循环方便用户重复操作
while (true) {
//提示用户输入,并接收输入
System.out.print("请输入金额:");
String in = input.nextLine();
//利用正则表达式来匹配输入数据,是否符合要求 输入数据如:1234 1234.12345 否则提示重新输入
if (in.matches(reg1) || in.matches(reg2)) {
//若是用户输入的是一个整数,这在整数后面添加 ".00"
if(in.matches(reg1)) {
in = in + ".00";
}
//利用replace()方法将所有小写数字转换成为大写
in = in.replace("0", "零").replace("1", "壹").replace("2", "贰")
.replace("3", "叁").replace("4", "肆").replace("5", "伍")
.replace("6", "陆").replace("7", "柒").replace("8", "捌")
.replace("9", "玖");
//若是用户输入的数据小数点后面只有一位数,这无法取到 in.dexeOf(".")+3,这样就回出现空异常
try {
in.substring(in.indexOf(".") + 3);
} catch (Exception e) {
//对上面可能发生的异常进行处理,发生这个异常只可能是上述的异常,所以在数后面添加一个 "零"
in = in + "零";
}
//以小数点为标准进行截取数据
yuan = in.substring(0, in.indexOf("."));
//将取到的小数点前面的整数放入char数组内,方便后面在数中添加“单位”
char[] ch = yuan.toCharArray();
//将可能会用到的单位放入utils的String数组里面
String[] utils = { "", "拾", "佰", "仟", "万", "拾", "佰", "仟", "亿",
"拾", "佰", "仟" };
String strbuf = "";
//然后对上述2个数组进行遍历并拼接字符串
for (int i = 0; i < ch.length; i++) {
char inte = ch[ch.length - 1 - i];
String util = utils[i];
//字符串的拼接
strbuf = inte + util + strbuf;
}
//获取“角”和“分”
jiao = in.substring(in.indexOf(".") + 1, in.indexOf(".") + 2);
fen = in.substring(in.indexOf(".") + 2, in.indexOf(".") + 3);
//输出最终结果
System.out.println(strbuf + "元" + jiao + "角" + fen + "分");
//程序的缺陷:若是 1001.12 输入结果为:壹仟零佰零拾壹元壹角贰分
//希望有同志改进
} else {
System.out.println("无法正确匹配,请正确输入金额!");
}
}
}
}
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询