这是代码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] 求解!!!!!!!
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] 求解!!!!!!!
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试试。
一个字符串的字符下标从0~length()-1
而不是从1~length()
包括数组也是一样,一定要注意这一点
一个字符串的字符下标从0~length()-1
而不是从1~length()
包括数组也是一样,一定要注意这一点