本帖最后由 SailorZhe 于 2013-05-01 16:45:23 编辑

解决方案 »

  1.   

    getSign(int start,String s)方法里面:
    计算完“百”之后,max被赋值成100,这时候再计算“亿”,语句max *= r就多乘了100。
      

  2.   

    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;
    }
    }
      

  3.   

    刚才发的有问题,重发一个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;
    }
    }
      

  4.   

    问题出现在你的这个代码块中,就这个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里面就好了。