这是代码import java.awt.*;
import java.awt.event.*;
import java.lang.Math;
import java.lang.Integer.*;public class RmbConvert extends Frame implements ActionListener
{      
         Panel panel1=new Panel();
        
         Panel panel2=new Panel();
        
         Panel panel3=new Panel();
         
         
              Label label1=new Label("Primitive money");
             // label1.setFont(new Font("黑体",1,30));
              TextField text1=new TextField(20);
              Label label2=new Label("Big money");
              //label2.setFont(new Font("黑体",1,30));
              TextField text2=new TextField(20);       public RmbConvert()
       {
              initComponent();//面板初始化
       }
       private void initComponent()
       {
              setTitle("人民币大写转换");
              setSize(345,216);
              
              setLayout(new GridLayout(3,1));//设置为Grid布局              panel1.add(label1);
              panel1.add(text1);
              
              panel2.add(label2);
              panel2.add(text2);
              
       
              Button bt=new Button("Confirm");
              panel3.add(bt);              add(panel1);
              add(panel2);
              add(panel3);
              //添加事件监听器
              bt.addActionListener(this);
              text1.addActionListener(this);
         }
         public void actionPerformed(ActionEvent e)
         {
              UppercaseRMB cc=new UppercaseRMB();
              text2.setText(cc.changeToUppercase(Double.parseDouble(text1.getText())));
         } 
       
       public static void main(String[] args)
       {
              new RmbConvert().setVisible(true);
       }
}
class UppercaseRMB
{
      String[] digit={"零","壹","贰","叁","肆","伍","陆","柒","捌","玖"};
      String[] segment={"圆","万","亿","万亿"};
      String[] unit={"仟","佰","拾",""};
      String[] cent={"角","分"}; 
      public String changeToUppercase(double value)
      {      
             //保留两位有效数字
             value=Math.round(value*100)/100;
            //大金额的浮点数会被自动表示成科学计数法,转换不方便,所以先将其变成整数
             String valStr=String.valueOf((long)(value*100));
            //取整数部分
             String preStr=valStr.substring(0,valStr.length()-2);
            //取小数部分
            String sufStr=valStr.substring(valStr.length()-2);
            
            String prffixPart="";//存放转换的大写字符
            int temp=preStr.length()/4-1;
            String[] Char=new String[preStr.length()];//逆序存放
               for(int i=1;i<=preStr.length();i++)
               {    
                    Char[preStr.length()-i]=unit[4-i%4];
                    int index=Integer.parseInt(preStr.substring(i,i+1));
                    if(index!=0)
                       prffixPart=digit[index]+Char[i];
               }
            return prffixPart+"整";
      }
}
运行是报如下错:
  txg@txg-System-Product-Name:~/java/JavaDemo$ java RmbConvert
Exception in thread "AWT-EventQueue-0" java.lang.ArrayIndexOutOfBoundsException: 4
at UppercaseRMB.changeToUppercase(RmbConvert.java:87)
at RmbConvert.actionPerformed(RmbConvert.java:55)
at java.awt.Button.processActionEvent(Button.java:392)
at java.awt.Button.processEvent(Button.java:360)
at java.awt.Component.dispatchEventImpl(Component.java:4651)
at java.awt.Component.dispatchEvent(Component.java:4481)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:643)
at java.awt.EventQueue.access$000(EventQueue.java:84)
at java.awt.EventQueue$1.run(EventQueue.java:602)
at java.awt.EventQueue$1.run(EventQueue.java:600)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.AccessControlContext$1.doIntersectionPrivilege(AccessControlContext.java:87)
             
调试时出如下错:
已完成步骤: "thread=main", RmbConvert.main(), line=61 bci=11
61           }main[1] next

出现异常:java.lang.ArrayIndexOutOfBoundsException(未捕捉)"thread=AWT-EventQueue-0", java.awt.EventDispatchThread.run(), line=156 bci=152AWT-EventQueue-0[1] 求解!!!!!!!

解决方案 »

  1.   


                   for(int i=1;i<=preStr.length();i++)
                   {    
                        Char[preStr.length()-i]=unit[4-i%4];
                        int index=Integer.parseInt(preStr.substring(i,i+1));
                        if(index!=0)
                           prffixPart=digit[index]+Char[i];
                   }这里的改成i=1; i <= preStr.length()-1试试。
      

  2.   

    一个字符串的最后一位的下标是length-1的。。你i<=preStr.length()肯定越界的
      

  3.   

    for(int i=1;i<=preStr.length();i++)改成for(int i=0;i<preStr.length();i++)
    一个字符串的字符下标从0~length()-1
    而不是从1~length()
    包括数组也是一样,一定要注意这一点
      

  4.   

    for(int i=1;i<=preStr.length();i++)改成for(int i=0;i<preStr.length();i++)
    一个字符串的字符下标从0~length()-1
    而不是从1~length()
    包括数组也是一样,一定要注意这一点