TA的每日心情 | 开心 2021-3-12 23:18 |
---|
签到天数: 2 天 [LV.1]初来乍到
|
运行界面:
- /*
- *文件名:ChangeType.java
- *
- *
- *
- *题目:数字转中文
- *说明:
- *1。有两个编辑框,一个用于输入阿拉伯数字,一个用于输出中文字符串,一个按钮。
- *2。阿拉伯数字可包括小数,整数部分不超过13位,小数部分不超过4位。
- * 1205404.36---转换为---壹佰二拾万五仟肆佰零肆点叁陆
- *
- *编程思路:
- *编制两个编辑框,和一个按钮
- *在文本框内输入数字,捕捉键盘输入,将键盘输入:数字,小数点,
- *已经退格键和非法输入区别开。
- *将键盘的输入传送给String型的result_1。
- *对result_1进行分解,分解成整数和小数。
- *整数要分成几个单位:个位到千位,万位到千万位,亿位到万亿位
- *分别传入转化成中文的函数ChangeChinese(),进行转化。
- *之后在第二个文本框中显示。
- *
- *注意的地方:
- *输入零的问题:1)零在中间,两个以上的零,只能显示一个零 2)零在末尾,不能显示零。
- *待改进的地方
- *用鼠标在中间位置插入数字不能正确计算
- *用鼠标进行剪贴,粘贴,复制则不能正确计算
- */
- import java.awt.* ;
- import java.awt.event.* ;
- public class ChangeType
- {
- private Frame f1 ;
- private Button b1 ;
- private TextField t1,t2 ;
- private int dot_1,length_1 ;
- private String result_1;
- public ChangeType()
- {
- f1 = new Frame("数字转中文 ") ;
- b1 = new Button("转换") ;
- t1 = new TextField("",40) ;
- t2 = new TextField("",40) ;
- }
- public void launch( ) //实现窗口
- {
- f1.add(t1,BorderLayout.NORTH);
- f1.add(b1,BorderLayout.CENTER);
- f1.add(t2,BorderLayout.SOUTH) ;
- f1.setSize(450,100 ) ;
- f1.setVisible(true);
- f1.addWindowListener(new WindowAdapter() //匿名类实现出口关闭功能 ;
- { public void windowClosing(WindowEvent e)
- { System.exit(0); } } );
- b1.addActionListener(new Handle()) ; //注册button按钮
- t1.addKeyListener( new NewHandler()) ; //注册textfiled按钮
- t2.addKeyListener( new NewHandler1()) ; //注册textfiled按钮
- }
- private class Handle implements ActionListener
- {
- private int zhengshu_1,xiaoshu_1 ;
- private String result_2 ;
- private boolean zero_null_1 = true ;
- private boolean bo1= true ;
- public void actionPerformed(ActionEvent e)
- {
- if(result_1==null) //如果没有输入任何数字,则提示输入
- {t2.setText("请输入数字");}
- else
- { if(dot_1==0) //若输入数字中没有小数
- {
- zhengshu_1 = result_1.length() ;
- ChangeInteger(zhengshu_1) ;
- }
- else //若输入的数字中有小数
- {
- zhengshu_1 = dot_1-1 ;
- ChangeInteger(zhengshu_1) ;
- xiaoshu_1 = dot_1-1 ;
- ChangeXiaoshu(xiaoshu_1) ;
- }
- t2.setText(result_2) ;
- }
- }
- public void ChangeInteger(int a)
- {
- String temp_s1 ;
- int temp_1 = 0 ;
- bo1 = true ;
- result_2 = "" ;
- if(a==13) //若为十三位整数,即到万亿
- {
- result_2 = ChangeChinese(result_1.substring(0,5)) + "亿" ;
- if(ChangeChinese(result_1.substring(5,9))!=null) //第5,9位输入不全是零
- result_2 =result_2+ChangeChinese(result_1.substring(5,9)) +"万" ;
- else {}
- if(ChangeChinese(result_1.substring(9,13))!=null) //第9,13位输入不全是零
- result_2 =result_2+ChangeChinese(result_1.substring(9,13)) ;
- else {}
- }
- else //小于十三位整数,即小于万亿
- {
- for( int i = 0 ; i < 3 ; i ++ )
- {
- if ((a-4) <= 0 )
- {
- temp_1 ++ ;
- temp_s1 = ChangeChinese(result_1.substring(0,a)) ;
- if(zero_null_1) //如果返回值不等于null
- {
- if(temp_1==2) {result_2 = temp_s1+"万"+result_2 ;}
- else if(temp_1==3) {result_2 =temp_s1+"亿"+result_2 ;}
- else { result_2 =temp_s1 ; }
- break ;
- }
- else{}
- }
- else
- {
- temp_1 ++ ;
- temp_s1 = ChangeChinese(result_1.substring(a-4,a)) ;
- if( zero_null_1) //如果返回值不等于null
- {
- if(temp_1==2) {result_2 = temp_s1+"万"+result_2 ;}
- else if(temp_1==3) {result_2 = temp_s1+"亿"+result_2 ;}
- else { result_2 = temp_s1; }
- }
- else{}
- }
- a = a - 4 ;
- }
- }
- }
- public void ChangeXiaoshu (int a )
- {
- bo1 = false ;
- result_2 = result_2 + ChangeChinese(result_1.substring(a,result_1.length())) ;
- }
- public String ChangeChinese(String st1)
- {
- int ai1 = st1.length() ;
- int ai2 = 0 ;
- int ai3 = 0 ;
- String st2 = null ;
- String st3 = null ;
- for(int i = ai1-1 ; i>=0 ; i--)
- {
- char c1 = st1.charAt(i) ;
- switch(c1)
- {
- case"1":
- st2 = "壹" ;
- break ;
- case"2":
- st2 = "贰" ;
- break ;
- case"3":
- st2 = "叁" ;
- break ;
- case"4":
- st2 = "肆" ;
- break ;
- case"5":
- st2 = "伍" ;
- break ;
- case"6":
- st2 = "陆" ;
- break ;
- case"7":
- st2 = "柒" ;
- break ;
- case"8":
- st2 = "捌" ;
- break ;
- case"9":
- st2 = "玖" ;
- break ;
- case"0":
- st2 = "零" ;
- break ;
- case"." :
- st2 = "点";
- break ;
- }
- if(bo1) //解决整数部分输入为两个零,或者末尾为零的情况
- {
- if(ai2==0&&st2=="零") { st2 = null ;ai3++;}
- else if(ai2==0&&st2!="零") st2 = st2 ;
- else if(ai2==1&&st2!="零")st2 = st2 +"拾" ;
- else if(ai2==2&&st2!="零")st2 = st2 +"佰";
- else if(ai2==3&&st2!="零")st2 = st2 +"仟";
- else if(ai2==4&&st2!="零")st2 = st2 +"万";
- else {ai3++;if(ai3>1){st2 = null;}else{st2 = st2 ;}}
- ai2++ ;
- if (st2==null) {st3 = st3 ;}
- else if(st3 == null) {st3 = st2 ;}
- else {st3 = st2+ st3 ; }
- }
- else //小数部分
- {
- if (st3==null){st3 = st2 ;}
- else {st3 = st2+ st3; }
- }
- }
- if(st3==null){zero_null_1 = false;}
- else{zero_null_1 = true;}
- return st3 ;
- }
- }
- private class NewHandler extends KeyAdapter
- {
- private int test1;
- private int test2 = 13 ;
- public void keyPressed(KeyEvent e)
- {
- char c1 = e.getKeyChar( );
- if( Character.isDigit(c1)||c1==".") //排除错误输入问题,只接受数字和小数点
- {
- if(c1==".") //输入的为小数点
- {
- test1++ ;
- if(test1> 1) //仅准许有一个小数点
- { e.consume() ; }
- else
- {
- length_1++;
- test2 = length_1+4;
- dot_1 = result_1.length()+1 ;
- }
- }
- else //输入的不是小数点
- { length_1++; }
- if(length_1>test2) //限定整数部分不超过13位,小数部分不超过4位
- {
- e.consume() ;
- length_1-- ;
- }
- else
- {
- if(length_1==1)
- {result_1=String.valueOf(c1);}
- else
- { result_1 = result_1 + c1;}
- }
- }
- else
- {
- if(e.getKeyCode()==KeyEvent.VK_BACK_SPACE) //退格键
- {
- try //退没了,会抛出exception
- {
- if(result_1.charAt(result_1.length()-1)==".")
- {
- result_1=result_1.substring(0,result_1.length()-1);
- length_1--;
- dot_1 = 0 ;
- test1--;
- test2 = 13 ;
- }
- else
- {
- result_1=result_1.substring(0,result_1.length()-1);
- length_1--;
- }
- }catch(RuntimeException ex){result_1 = null ; }
- }
- else{e.consume();}
- }
- }
- }
- private class NewHandler1 extends KeyAdapter
- {
- public void keyPressed(KeyEvent e)
- {e.consume( );}
- }
- public static void main(String args[ ]){
- ChangeType changetype1 = new ChangeType( ) ;
- changetype1.launch( ) ;
- }
- }
复制代码
源码下载:http://file.javaxxz.com/2014/10/1/115828453.zip |
|