当前位置:编程学习 > JAVA >>

输入大写输出阿拉伯数字bug

--------------------编程问答-------------------- getSign(int start,String s)方法里面:
计算完“百”之后,max被赋值成100,这时候再计算“亿”,语句max *= r就多乘了100。
--------------------编程问答-------------------- 不是太懂能讲详细点吗刚学老师进度有点更不上 --------------------编程问答-------------------- public class Test{
long total=0;
public static void main(String[] args) {
Test t= new Test();
t.f2();

}
void f2(){
String s="一亿三千五百六十四万两千两百四十八";
String[] s1=new String[3];
s1[0]=s.substring(0,s.indexOf("亿"));
s1[1]=s.substring(s.indexOf("亿")+1,s.indexOf("万"));
s1[2]=s.substring(s.indexOf("万")+1,s.length());


for(int i =0;i<s1.length;i++){
s1[i]=s1[i].replace("一","1");
s1[i]=s1[i].replace("两","2");
s1[i]=s1[i].replace("三","3");
s1[i]=s1[i].replace("四","4");
s1[i]=s1[i].replace("五","5");
s1[i]=s1[i].replace("六","6");
s1[i]=s1[i].replace("七","7");
s1[i]=s1[i].replace("八","8");
s1[i]=s1[i].replace("九","9");
}

parse(s1[0], 100000000);
parse(s1[1], 10000);
parse(s1[2],1);

System.out.println("转换前:"+s);
System.out.println("转换后:"+total);

}
void parse(String s,long N){
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(c=='千'){
total+=(s.charAt(i-1)-48)*1000*N;
}
if(c=='百'){
total+=(s.charAt(i-1)-48)*100*N;
}
if(c=='十'){
total+=(s.charAt(i-1)-48)*10*N;
}
}
total+=(s.charAt(s.length()-1)-48)*N;
}
} --------------------编程问答-------------------- 刚才发的有问题,重发一个

import java.util.ArrayList;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map;

public class Test{
long total=0;
public static void main(String[] args) {
Test t= new Test();
t.f2();

}

void f2(){
// String s="六十四万两千两百四十八";
String s="一亿三千五百六十四万两千两百四十八";
String old=s.toString();


for(int i =0;i<s.length();i++){
s=s.replace("一","1");
s=s.replace("两","2");
s=s.replace("三","3");
s=s.replace("四","4");
s=s.replace("五","5");
s=s.replace("六","6");
s=s.replace("七","7");
s=s.replace("八","8");
s=s.replace("九","9");
}
ArrayList<String> list = new ArrayList<String>();
Map<String,String> map = new HashMap<String,String>();
if(s.indexOf("亿")!=-1){
map.put("亿",s.substring(0,s.indexOf("亿")));
s=s.substring(s.indexOf("亿")+1);
}
if(s.indexOf("万")!=-1){
map.put("万",s.substring(0,s.indexOf("万")));
s=s.substring(s.indexOf("万")+1);
}
if(s.length()>0){
map.put("个",s);
}

for(Iterator<String>it=map.keySet().iterator();it.hasNext();){
String key=it.next();
if(key.equals("亿")) parse(map.get(key), 100000000);
if(key.equals("万")) parse(map.get(key), 10000);
if(key.equals("个")) parse(map.get(key), 1);
}

System.out.println("转换前:"+old);
System.out.println("转换后:"+total);

}
void parse(String s,long N){
for(int i=0;i<s.length();i++){
char c=s.charAt(i);
if(c=='千'){
total+=(s.charAt(i-1)-48)*1000*N;
}
if(c=='百'){
total+=(s.charAt(i-1)-48)*100*N;
}
if(c=='十'){
total+=(s.charAt(i-1)-48)*10*N;
}
}
total+=(s.charAt(s.length()-1)-48)*N;
}
} --------------------编程问答-------------------- 问题出现在你的这个代码块中,就这个private long getSign(int start,String s) 。因为你的Max是在for外面定义的,当你在for中使用时,如你输入的是一百万,在for中当i=1时,max就变为了100,再赋值给sign,然后运行i=2,但开始运行前,你的max是多少?是100,因为它没有被从新赋值或者从新定义初始化,所以在i=2运行到了亿就会这样,max *= r (100 *= 100000000),结果就成了一万亿了,你必须在for中定义max并初始化为1才可以,因为这样在for每次循环时都可以保证max=1,这样就不会出现max保持前面赋的100而出错了。所以这个主要是max的定义初始化的位置不对,放for里面就好了。
补充:Java ,  Java SE
CopyRight © 2012 站长网 编程知识问答 www.zzzyk.com All Rights Reserved
部份技术文章来自网络,