用三種語言寫的人民幣小寫轉換大寫的小程式
阿新 • • 發佈:2019-01-09
執行起來是這樣的:package cn.faisco.jenkin.lowToUper; import java.awt.GridLayout; import java.awt.LinearGradientPaint; import java.awt.event.ActionListener; import java.awt.event.MouseAdapter; import java.awt.event.MouseEvent; import java.lang.reflect.Array; import javax.swing.JButton; import javax.swing.JFrame; import javax.swing.JLabel; import javax.swing.JTextArea; import javax.swing.JTextField; public class LowToUper { JFrame jf; JLabel jl; JLabel jl1; JTextArea jta; JTextField jtf; JButton jb; int num_t; private void init() { GridLayout gl = new GridLayout(5, 1); MouseAdapter ma = new MouseAdapter() { @Override public void mouseClicked(MouseEvent e) { // TODO Auto-generated method stub int num = -1; super.mouseClicked(e); try { num = Integer.parseInt(jtf.getText().toString()); } catch (ClassCastException cce) { System.out.println("輸入有誤!"); } num_t = num; String str = transform(num); jta.setText(str); } }; jl = new JLabel(); jl.setText("請輸入要轉換的金額:"); jtf = new JTextField(); jl1 = new JLabel(); jl1.setText("對應的大寫金額為:"); jta = new JTextArea(); jta.setAutoscrolls(true); jta.setLineWrap(true); jb = new JButton("轉換"); jb.addMouseListener(ma); jf = new JFrame("小寫金額化大寫金額"); jf.setBounds(300, 200, 400, 300); jf.setLayout(gl); jf.add(jl); jf.add(jtf); jf.add(jl1); jf.add(jta); jf.add(jb); jf.pack(); jf.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE); jf.setVisible(true); jf.setResizable(true); } String toUper(int num) { switch (num) { case 1: return "壹"; case 2: return "貳"; case 3: return "叄"; case 4: return "肆"; case 5: return "伍"; case 6: return "陸"; case 7: return "柒"; case 8: return "捌"; case 9: return "玖"; case 0: return "零"; default: return "k"; } } String transform(int num) { String str = ""; int flag = -1; int[] tmp = new int[10]; String arr[] = { "億", "仟", "佰", "拾", "萬", "仟", "佰", "拾", "" }; if (num_t < 0) { return "非法的輸入!"; } // ///////////////////////////////////////////////////////////////////////////////////////////////////// // 這裡是對陣列的處理過程,這個陣列的每一個元素,依次從高位到低位對應要轉換數字的各位 // // ///////////////////////////////////////////////////////////////////////////////////////////////////// for (int i = 8; i > 0; i--)// 這裡是將陣列與要轉換的數字的各位一一對應 { int tm; tm = (int) Math.pow(10, i); tmp[8 - i] = (int) (num / tm); num %= tm; } tmp[8] = num % 10; System.out.println(tmp[0]); for (int i = 1; i < 5; i++) // 這裡是對"萬"的處理過程,明確哪裡需要加"萬",將這個索引賦給flag標記 if (tmp[i] != 0 && tmp[4] == 0) flag = i; int i = 0; if (tmp[0] == 0) // 這裡是對開頭位數為0的處理,僅將前面的0標記為-1 while (tmp[i] == 0) { tmp[i] = -1; i++; } for (i = 0; i < 9; i++) // 這裡是對中間為0的情況的處理,將中間n(n>1)個0中的n-1個標記為-1,最低位的0保持不變 { if (tmp[i] == 0 && tmp[i + 1] == 0) tmp[i] = -1; } if (tmp[8] == 0) // 這裡上面的特殊情況,最低位的0在個位,實際上不需要改成大寫,因此直接賦值為-1 tmp[8] = -1; // for(int j:tmp) // System.out.println(j); // ///////////////////////////////////////////////////////////////////////////////////////////////////// // 這裡是對陣列的處理過程,這個陣列的每一個元素,依次從高位到低位對應要轉換數字的各位 // // ///////////////////////////////////////////////////////////////////////////////////////////////////// for (i = 0; i < 9; i++)// 這裡是由數字到漢字的轉換,而且是有選擇的轉換 { if (tmp[i] == -1) // 這裡是根據已整理好的換算關係進行換算 continue; str += toUper(tmp[i]);// 加數字 if (tmp[i] != 0) // 加單位 str += arr[i]; if (flag == i) // 這裡是對"萬"這個單位的特殊處理,根據flag標記在字串中加入"萬",上面有具體的處理過程 str += "萬"; } if (num_t == 0) { return "金額為零"; } return str + "圓整"; } public static void main(String[] args) { // TODO Auto-generated method stub new LowToUper().init(); } }