java学习——99.进制间的转换

计算机中的计算机器是可以直接实现进制间转换的功能的。

也可以自己写用户界面来实现各种进制之间的转换。

本篇即采用用户界面来实现进制的转换,代码有点长,感兴趣的朋友看看,主要是结合了前两篇的转换,再加上了用户界面。

完整代码如下:

import java.awt.*;

import javax.swing.*;

import java.awt.event.*;

public class 进制转换 extends JFrame implements ActionListener,FocusListener{

private JTextField text,jieguo;//一个用作输入,一个用作显示

private JRadioButton radio[];//用单选按钮组来选择转换的进制

private JLabel l;//主要用作提示

private int radix;//进制

public 进制转换(){

super("进制转换");

this.setVisible(true);

this.setSize(400,150);

this.setLocation(200,200);

JPanel top=new JPanel();

top.add(new JLabel("请输入:"));

text=new JTextField(20);

text.addFocusListener(this);//添加焦点动作事件,目的是为了在输入数据有误的情况下,清空提示文本框

top.add(text);

this.getContentPane().add(top,"North");

JPanel pane=new JPanel();

this.getContentPane().add(pane);

String s[]={"二进制","八进制","十进制","十六进制"};

ButtonGroup group=new ButtonGroup();

radio=new JRadioButton[s.length];

for(int i=0;i<s.length;i++){

radio[i]=new JRadioButton(s[i]);

group.add(radio[i]);

pane.add(radio[i]);

radio[i].addActionListener(this);

}

l=new JLabel();

pane.add(l);

jieguo=new JTextField(20);

this.getContentPane().add(jieguo,"South");

}

public void actionPerformed(ActionEvent e){//响应动作事件

String s=text.getText();

int n=parseInt(s);//调用方法将文本框中的数据转换成十进制

if(l.getText()==""){//在提示为空的情况下,才进行转换

if(e.getSource().equals(radio[0])){//如果单击的是二进制按钮

jieguo.setText(s+parseInto(n,2));//转换为二进制,调用方法parseInto(n,2)

}

if(e.getSource().equals(radio[1])){

jieguo.setText(s+parseInto(n,8));//转换为八进制,调用方法parseInto()

}

if(e.getSource().equals(radio[2])){

jieguo.setText(s+parseInto(n,10));//转换为十进制,调用方法parseInto()

}

if(e.getSource().equals(radio[3])){

jieguo.setText(s+parseInto(n,16));//转换为十六进制,调用方法parseInto()

}

}

}

public int parseInt(String s)//将文本框中的数据转换为十进制

{

if(s.length()==0){//如果文本框中未输入数据,要提示输入

l.setForeground(Color.red);

l.setText("您未输入数据,请输入");

return 0;

}

else{

charch=s.charAt(0);

int value=0, i=0,sign=1;

radix=10;

if (ch>='1' && ch<='9' || ch=='+' || ch=='-'||ch=='0'&&s.length()==0)

{

radix=10;

if (ch=='+' || ch=='-')

i++;

sign = ch=='-' ? -1 : 1;

}

elseif (ch=='0' &&s.charAt(1)!='x')

{

radix=8;

i++;

}

elseif (ch=='0' &&s.charAt(1)=='x')

{

radix=16;

i+=2;

}

else {

l.setForeground(Color.red);

l.setText("整数不能识别\'"+ch+"\'字符");

}

while(i<s.length())

{

ch=s.charAt(i++);

if (ch>='0' && ch-'0'<radix)

value =value*radix+ch-'0';

elseif (radix==16 &&ch>='a' && ch<='f')

value =value*radix+ch-'a'+10;

elseif (radix==16 &&ch>='A' && ch<='F')

value =value*radix+ch-'A'+10;

else

{

l.setForeground(Color.red);

l.setText(radix+"进制整数不能识别'"+ch+"\'字符");

}

}

return value*sign;

}

}

public String parseInto(int value,int radix) {//转换进制的方法,其中value是整数,radix是要转化的进制

if(radix==10)//因为输入的即为十进制数,所以不需要转换,直接输出即可。

return"的十进制数是"+value;

elseif(radix==2||radix==8||radix==16) {//如果是其他进制,都是用除radix取余法

int n=value;//用n来存储value的值,目的是为了后面的转换

String s="";//用字符串来存储转换之后的进制值

while(n>0) {//当n>0时,执行此循环

if((n%radix)>=10) {//因为采用“除radix取余法”,二进制和八进制数可直接用其余数,而十六进制不可以,本if语句主要是10~15转换为a~f这六个十六进制中的符号

switch(n%radix) {

case 10:s+='a';break;

case 11:s+='b';break;

case 12:s+='c';break;

case 13:s+='d';break;

case 14:s+='e';break;

case 15:s+='f';break;

}

n=n/radix;

}

else {//二进制或者八进制可直接取余,但用此方法取出来的字符均是顺序放在字符串s中的

s+=n%radix;

n=n/radix;

}

}

String s1="";

for(int i=s.length()-1;i>=0;i--)//将s中的字符倒换顺序,得到正确的“除radix取余法”的解

s1+=s.charAt(i);

return"的"+radix+"进制数是"+s1;//将结果输出

}

else

return value+"不能转换为"+radix+"进制";//本例只输出二进制、八进制或者十六进制,计算机当中一般也不用其他进制,如果radix的值为其他,则会提示输出错误

}

publicstaticvoid main(String args[]){

new进制转换();

}

@Override

publicvoid focusGained(FocusEvent e) {

// TODO Auto-generatedmethod stub

l.setText("");

}

@Override

publicvoid focusLost(FocusEvent e) {

// TODO Auto-generatedmethod stub

}

}

其运行结果如下:

如果输入一个错误数据,会提示错误:

如果未输入数据,也会提示:

若输入十进制数据10,其转换结果如下:

当输入其他的数据,比如八进制,十六进制时,也能得到正确的结果,感兴趣的朋友可以复制并代码运行试试。

(0)

相关推荐

  • 常用各种进制之间的转换

    原创大军电工2021-05-16 09:21:10 在电学中经常会遇到数字间的进制转换,比如plc就必须了解相关知识点.很多人对这一块一直都是很模糊,或者说时间一长呢,总有点忘.今天我整理了一下,常用 ...

  • java学习——97.进制间的转换

    这两个星期被各种杂事充斥了生活,不过,生活,本来就是充满了波折,波折也是一种成长,希望我能继续成长下去. 今天要写的是进制间的转换. 其实这是一个很简单的题目,现在大学里就算是非计算机专业,也会有一门 ...

  • java学习——98.十进制转换为其它进制

    本篇介绍如何将十进制转换为二进制.八进制或十六进制. 十进制转换为二进制的方法是"除2取余法",其他进制也可依此类推. 本例是通过main方法输入一个整数,并根据main中的语句将 ...

  • 进制转换及算法!进阶必学!

         首先,祝贺视频课程学员数突破10万!全5分好评!      非常,非常,非常感谢大家的认可和支持!      将继续发放50元视频直购优惠券,文末点"阅读原文"即可领取! ...

  • (7条消息) 进制转换( QString 转换为 Hex ByteArray)

    QString 转换为 Hex ByteArray void SimSerialPort::convertStringToHex(const QString &str, QByteArray ...

  • 4.13 进制转换与符号函数base和sign

    4.13 进制转换与符号函数base和sign

  • 每日一题C++版(进制转换)

    编程是很多偏计算机.人工智能领域必须掌握的一项技能,此编程能力在学习和工作中起着重要的作用.因此小白决定开辟一个新的板块"每日一题",通过每天一道编程题目来强化和锻炼自己的编程能力 ...

  • 【编程练习】进制转换问题

    【编程练习】进制转换问题

  • 5万人冲进直播间,法学老师卡成表情包,淘宝上可以学习了?

    2020年的春天,据说有不少网友都因为同一个男人,彻底掉进了法学的大坑. 明明只是在人群中对他的视频多看了一眼,却一发不可收拾,越看越上头. 这个人,就是新晋流量之王,中国政法大学教授罗翔. 一个月吸 ...