A股上市公司传智教育(股票代码 003032)旗下技术交流社区北京昌平校区

 找回密码
 加入黑马

QQ登录

只需一步,快速开始

范俊

初级黑马

  • 黑马币:0

  • 帖子:7

  • 精华:0

  1. import java.awt.*;
  2. import javax.swing.*;
  3. import java.awt.event.*;

  4. class JZChange extends JFrame implements ActionListener,MouseListener{

  5. <FONT color=red>……省略组件的定义
  6. </FONT>
  7. /*
  8. *进制转换具体实现方法
  9. */

  10. //1、二进制转八进制
  11. public static String binToOct(String s){ //先将二进制转化为十进制存储,再进行位运算
  12. int data = 0; //临时数据,初始化为0
  13. for(int i=0;i<s.length();i++){ //循环位移再或,初始化为0,将数据左移一位再或运算
  14. data = (s.charAt(i)-'0')|(data<<1);
  15. }
  16. s = "";
  17. while(true){
  18. int tmp = data & 7; //与7进行与运算
  19. System.out.println(tmp);
  20. s = tmp + s;
  21. data >>= 3; //右移三位
  22. if(data == 0)
  23. break;
  24. }
  25. return s;
  26. }
  27. public static String binToDec(String s){ //2、二进制转十进制
  28. int data = 0; //临时数据,初始化为0
  29. for(int i=0;i<s.length();i++){ //循环位移再或,初始化为0,将数据左移一位再或运算
  30. data = (s.charAt(i)-'0')|(data<<1);
  31. }
  32. s = Integer.toString(data); //将数字再转化为字符串
  33. return s;
  34. }
  35. public static String binToHex(String s){ //3、二进制转十六进制
  36. int data = 0; //临时数据,初始化为0
  37. for(int i=0;i<s.length();i++){ //循环位移再或,初始化为0,将数据左移一位再或运算
  38. data = (s.charAt(i)-'0')|(data<<1);
  39. }
  40. s = "";
  41. while(true){
  42. int tmp = data & 15; //与15进行与运算
  43. if(tmp >= 10){
  44. char tmpChar = (char)((char)tmp + '7');
  45. s = tmpChar + s;
  46. }else
  47. s = tmp + s;
  48. data >>= 4; //右移四位
  49. if(data == 0)
  50. break;
  51. }
  52. return s;
  53. }
  54. public static String octToBin(String s){ //4、八进制转二进制
  55. int data = 0; //临时数据,初始化为0
  56. for(int i=0;i<s.length();i++){ //循环位移再或,初始化为0,将数据左移三位再或运算
  57. data = (s.charAt(i)-'0')|(data<<3);
  58. }
  59. s = "";
  60. while(true){
  61. int tmp = data & 1; //与1做与运算
  62. s = tmp + s;
  63. data >>= 1; //右移一位
  64. if(data == 0) //判断原始数据是否为0
  65. break;
  66. }
  67. return s;
  68. }
  69. public static String octToDec(String s){ //5、八进制转十进制
  70. int data = 0; //临时数据,初始化为0
  71. for(int i=0;i<s.length();i++){ //循环位移再或,初始化为0,将数据左移三位再或运算
  72. data = (s.charAt(i)-'0')|(data<<3);
  73. }
  74. s = Integer.toString(data);
  75. return s;
  76. }
  77. public static String octToHex(String s){ //6、八进制转十六进制
  78. int data = 0; //临时数据,初始化为0
  79. for(int i=0;i<s.length();i++){ //循环位移再或,初始化为0,将数据左移三位再或运算
  80. data = (s.charAt(i)-'0')|(data<<3);
  81. }
  82. s = "";
  83. while(true){
  84. int tmp = data & 15; //与15做与运算
  85. if(tmp >= 10){
  86. char tmpChar = (char)((char)tmp + '7');
  87. s = tmpChar + s;
  88. }else
  89. s = tmp + s;
  90. data >>= 4; //右移四位
  91. if(data == 0) //判断原始数据是否为0
  92. break;
  93. }
  94. return s;
  95. }
  96. public static String decToBin(String s){ //7、十进制转二进制
  97. int data = 0;
  98. data = Integer.parseInt(s);
  99. s = "";
  100. while(true){
  101. int tmp = data & 1; //与1做与运算
  102. s = tmp + s;
  103. data >>= 1; //右移一位
  104. if(data == 0) //判断原始数据是否为0
  105. break;
  106. }
  107. return s;
  108. }
  109. public static String decToOct(String s){ //8、十进制转八进制
  110. int data = 0;
  111. data = Integer.parseInt(s);
  112. s = "";
  113. while(true){
  114. int tmp = data & 7; //与7做与运算
  115. s = tmp + s;
  116. data >>= 3; //右移三位
  117. if(data == 0) //判断原始数据是否为0
  118. break;
  119. }
  120. return s;
  121. }
  122. public static String decToHex(String s){ //9、十进制转十六进制
  123. int data = 0;
  124. data = Integer.parseInt(s);
  125. s = "";
  126. while(true){
  127. int tmp = data & 15; //与15进行与运算
  128. if(tmp >= 10){
  129. char tmpChar = (char)((char)tmp + '7');
  130. s = tmpChar + s;
  131. }else
  132. s = tmp + s;
  133. data >>= 4; //右移四位
  134. if(data == 0)
  135. break;
  136. }
  137. return s;
  138. }
  139. public static String hexToBin(String s){ //10、十六进制转二进制
  140. int data = 0; //临时数据,初始化为0
  141. for(int i=0;i<s.length();i++){ //循环位移再或,初始化为0,将数据左移四位再或运算
  142. char tmpChar = s.charAt(i);
  143. if(tmpChar >= 'A')
  144. data = (s.charAt(i)-'7')|(data<<4);
  145. else
  146. data = (s.charAt(i)-'0')|(data<<4);
  147. }
  148. s = "";
  149. while(true){
  150. int tmp = data & 1; //与1做与运算
  151. s = tmp + s;
  152. data >>= 1; //右移一位
  153. if(data == 0) //判断原始数据是否为0
  154. break;
  155. }
  156. return s;
  157. }
  158. public static String hexToOct(String s){ //11、十六进制转八进制
  159. int data = 0; //临时数据,初始化为0
  160. for(int i=0;i<s.length();i++){ //循环位移再或,初始化为0,将数据左移四位再或运算
  161. char tmpChar = s.charAt(i);
  162. if(tmpChar >= 'A')
  163. data = (s.charAt(i)-'7')|(data<<4);
  164. else
  165. data = (s.charAt(i)-'0')|(data<<4);
  166. }
  167. s = "";
  168. while(true){
  169. int tmp = data & 7; //与7做与运算
  170. s = tmp + s;
  171. data >>= 3; //右移三位
  172. if(data == 0) //判断原始数据是否为0
  173. break;
  174. }
  175. return s;
  176. }
  177. public static String hexToDec(String s){ //12、十六进制转十进制
  178. int data = 0; //临时数据,初始化为0
  179. for(int i=0;i<s.length();i++){ //循环位移再或,初始化为0,将数据左移四位再或运算
  180. char tmpChar = s.charAt(i);
  181. if(tmpChar >= 'A')
  182. data = (s.charAt(i)-'7')|(data<<4);
  183. else
  184. data = (s.charAt(i)-'0')|(data<<4);
  185. }
  186. s = Integer.toString(data);
  187. return s;
  188. }

  189. public void actionPerformed(ActionEvent e) {
  190. //点击二进制按钮
  191. if(e.getSource() == jRB_2){
  192. jRB_2.setSelected(true);
  193. jRB_8.setSelected(false);
  194. jRB_10.setSelected(false);
  195. jRB_16.setSelected(false);
  196. for(int i = 0;i < 2;i++){
  197. jButtons[i].setEnabled(true);
  198. }
  199. for(int i = 2;i < 16;i++){
  200. jButtons[i].setEnabled(false);
  201. }
  202. jTextField.setText("");
  203. switch(curFlag){
  204. case 8:
  205. if(displayStr != "")
  206. displayStr = this.octToBin(displayStr);
  207. break;
  208. case 10:
  209. if(displayStr != "")
  210. displayStr = this.decToBin(displayStr);
  211. break;
  212. case 16:
  213. if(displayStr != "")
  214. displayStr = this.hexToBin(displayStr);
  215. break;
  216. default:
  217. break;
  218. }
  219. curFlag = 2;
  220. jTextField.setText(displayStr);
  221. }
  222. //点击八进制按钮
  223. if(e.getSource() == jRB_8){
  224. jRB_2.setSelected(false);
  225. jRB_8.setSelected(true);
  226. jRB_10.setSelected(false);
  227. jRB_16.setSelected(false);
  228. for(int i = 0;i < 8;i++){
  229. jButtons[i].setEnabled(true);
  230. }
  231. for(int i = 8;i < 16;i++){
  232. jButtons[i].setEnabled(false);
  233. }
  234. jTextField.setText("");
  235. switch(curFlag){
  236. case 2:
  237. if(displayStr != "")
  238. displayStr = this.binToOct(displayStr);
  239. break;
  240. case 10:
  241. if(displayStr != "")
  242. displayStr = this.decToOct(displayStr);
  243. break;
  244. case 16:
  245. if(displayStr != "")
  246. displayStr = this.hexToOct(displayStr);
  247. break;
  248. default:
  249. break;
  250. }
  251. curFlag = 8;
  252. jTextField.setText(displayStr);
  253. }
  254. //点击十进制按钮
  255. if(e.getSource() == jRB_10){
  256. jRB_2.setSelected(false);
  257. jRB_8.setSelected(false);
  258. jRB_10.setSelected(true);
  259. jRB_16.setSelected(false);
  260. for(int i = 0;i < 10;i++){
  261. jButtons[i].setEnabled(true);
  262. }
  263. for(int i = 10;i < 16;i++){
  264. jButtons[i].setEnabled(false);
  265. }
  266. jTextField.setText("");
  267. switch(curFlag){
  268. case 2:
  269. if(displayStr != ""){
  270. displayStr = this.binToDec(displayStr);
  271. }
  272. break;
  273. case 8:
  274. if(displayStr != ""){
  275. displayStr = this.octToDec(displayStr);
  276. }
  277. break;
  278. case 16:
  279. if(displayStr != ""){
  280. displayStr = this.hexToDec(displayStr);
  281. }
  282. break;
  283. default:
  284. break;
  285. }
  286. curFlag = 10;
  287. jTextField.setText(displayStr);
  288. }
  289. //点击十六进制按钮
  290. if(e.getSource() == jRB_16){
  291. jRB_2.setSelected(false);
  292. jRB_8.setSelected(false);
  293. jRB_10.setSelected(false);
  294. jRB_16.setSelected(true);
  295. for(int i = 0;i < 16;i++){
  296. jButtons[i].setEnabled(true);
  297. }
  298. jTextField.setText("");
  299. switch(curFlag){
  300. case 2:
  301. if(displayStr != ""){
  302. displayStr = this.binToHex(displayStr);
  303. }
  304. break;
  305. case 8:
  306. if(displayStr != ""){
  307. displayStr = this.octToHex(displayStr);
  308. }
  309. break;
  310. case 10:
  311. if(displayStr != ""){
  312. displayStr = this.decToHex(displayStr);
  313. }
  314. break;
  315. default:
  316. break;
  317. }
  318. curFlag = 16;
  319. jTextField.setText(displayStr);
  320. }
  321. }

  322. public void mouseClicked(MouseEvent e){
  323. for(int i=0;i<16;i++){
  324. if(e.getSource() == jButtons[i]){
  325. if(jButtons[i].isEnabled() == true){ //判断按钮是否已经启用
  326. if(i>=0&&i<10){
  327. displayStr = displayStr + i;
  328. System.out.println("点击了按钮"+i);
  329. }else{
  330. char tmp = (char)(i+55);
  331. displayStr = displayStr + tmp;
  332. System.out.println("点击了按钮"+tmp);
  333. }
  334. }
  335. jTextField.setText(displayStr);
  336. }
  337. }
  338. if(e.getSource() == jb_clear){
  339. System.out.println("点击了按钮清空");
  340. displayStr = "";
  341. jTextField.setText("");
  342. }
  343. if(e.getSource() == jb_delete){
  344. System.out.println("点击了按钮删减");
  345. int length = displayStr.length();
  346. if(length > 1){
  347. displayStr = displayStr.substring(0,displayStr.length()-1);
  348. }else
  349. displayStr = "";
  350. jTextField.setText(displayStr);
  351. }
  352. }

  353. <FONT color=red>…………省略空函数
  354. </FONT>
  355. public static void main(String[] args){
  356. JZChange jzChange = new JZChange();
  357. }
  358. }

  359. 程序存在BUG,当数据存储达到32bit,就会出现问题,比如十六进制转二进制,输入AB234545,再点击二进制,程序就卡住了,百思不得其解,难道跟符号位有关?
复制代码

评分

参与人数 1技术分 +1 收起 理由
蒋映辉 + 1 很给力!鼓励一下...

查看全部评分

3 个回复

倒序浏览
组件的定义:
  1. private JRadioButton jRB_2,jRB_8,jRB_10,jRB_16;         //进制转换单选按钮
  2.     private JTextField jTextField;                          //显示文本框
  3.     private JPanel jPanel1,jPanel2;
  4.     private JButton[] jButtons;
  5.     private JButton jb_delete,jb_clear;
  6.     private static int curFlag = 0;                             //标识当前进制,取值为2、8、10、16,初始化为0
  7.     private static String displayStr = "";
  8.    
  9.    
  10.     public JZChange(){
  11.         //设置标题
  12.         super("进制转换器");
  13.         //初始化面板
  14.         jRB_2 = new JRadioButton("二进制");                 //二进制单选按钮
  15.         jRB_2.setFont(new Font("宋体",Font.PLAIN,12));
  16.         jRB_8 = new JRadioButton("八进制");                 //八进制单选按钮
  17.         jRB_8.setFont(new Font("宋体",Font.PLAIN,12));
  18.         jRB_10 = new JRadioButton("十进制");                //十进制单选按钮
  19.         jRB_10.setFont(new Font("宋体",Font.PLAIN,12));
  20.         jRB_16 = new JRadioButton("十六进制");              //十六进制单选按钮
  21.         jRB_16.setFont(new Font("宋体",Font.PLAIN,12));
  22.         jb_delete = new JButton("删减");
  23.         jb_delete.setFont(new Font("宋体",Font.PLAIN,12));
  24.         jb_clear = new JButton("清空");
  25.         jb_clear.setFont(new Font("宋体",Font.PLAIN,12));
  26.         
  27.         jPanel1 = new JPanel(new GridLayout(3,2));
  28.         jPanel1.add(jRB_2);
  29.         jRB_2.addActionListener(this);
  30.         jPanel1.add(jRB_8);
  31.         jRB_8.addActionListener(this);
  32.         jPanel1.add(jRB_10);
  33.         jRB_10.addActionListener(this);
  34.         jPanel1.add(jRB_16);
  35.         jRB_16.addActionListener(this);
  36.         jPanel1.add(jb_clear);
  37.         jb_clear.addMouseListener(this);
  38.         jPanel1.add(jb_delete);
  39.         jb_delete.addMouseListener(this);
  40.         jTextField = new JTextField();
  41.         jTextField.setEditable(false);
  42.         //jTextField.setFont(new Font("新宋体",Font.BOLD,17));
  43.         
  44.         jPanel2 = new JPanel(new GridLayout(4,4));
  45.         jButtons = new JButton[16];
  46.         //初始化0-9的数字按钮
  47.         for(int i = 0;i < 10;i++){
  48.             String digitStr = "";
  49.             digitStr = digitStr+i;
  50.             //System.out.println(digitStr);
  51.             jButtons[i] = new JButton(digitStr);
  52.         }
  53.         //初始化A-Z的字母按钮
  54.         for(int i = 10;i < 16;i++){
  55.             String letterStr = "";
  56.             char letter = (char)(i+55);
  57.             letterStr = letterStr+letter;
  58.             //System.out.println(letterStr);
  59.             jButtons[i] = new JButton(letterStr);
  60.         }
  61.         //添加按钮
  62.         for(int i = 0;i < 16;i++){
  63.             jPanel2.add(jButtons[i]);
  64.             jButtons[i].addMouseListener(this);
  65.         }
  66.         this.add(jTextField,BorderLayout.NORTH);
  67.         this.add(jPanel1,BorderLayout.CENTER);
  68.         this.add(jPanel2,BorderLayout.SOUTH);
  69.         //初始化按钮状态
  70.         for(int i = 0;i < 16;i++){
  71.                 jButtons[i].setEnabled(false);
  72.         }
  73.         this.setSize(250,250);
  74.         this.setResizable(false);
  75.         this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
  76.         this.setLocationRelativeTo(null);
  77.         this.setVisible(true);
  78.     }
复制代码
回复 使用道具 举报
空函数:
  1. public void mousePressed(MouseEvent e){
  2.         }
  3.         public void mouseReleased(MouseEvent e){
  4.         }
  5.         public void mouseEntered(MouseEvent e){
  6.         }
  7.         public void mouseExited(MouseEvent e){
  8.         }
复制代码
回复 使用道具 举报
程序存在BUG,当数据存储达到32bit,就会出现问题,比如十六进制转二进制,输入AB234545,再点击二进制,程序就卡住了,百思不得其解,难道跟符号位有关?
回复 使用道具 举报
您需要登录后才可以回帖 登录 | 加入黑马