第1个回答 2008-12-16
//这是我以前写的。。你看下吧。。
其他进制转换成10进制很简单。
//--------------------------------
例如 2进制转换为10进制 110
第一位数 0*1 第二位数1*2 第三位数1*4
0+2+4=6;
//---------------------------------
例如 8进制转换为10进制 776
第一位数 6*1 第二位数7*8 第三位数7*64
6+56+448=510
//---------------------------------
例如 16进制转换为10进制 776
第一位数 6*1 第二位数7*16 第三位数7*256
6+112+1792=1910
思路是这样的。。。。
import javax.swing.JButton;
import javax.swing.JComboBox;
import javax.swing.JFrame;
import javax.swing.JOptionPane;
import javax.swing.JTextField;
import java.awt.Container;
import java.awt.FlowLayout;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.awt.event.ItemEvent;
import java.awt.event.ItemListener;
public class 进制转换 extends JFrame implements ActionListener, ItemListener {
JComboBox a;
JTextField zhuanhuan, xianshi;
JButton anniu;
Container container = getContentPane();
int zz = 0;
public 进制转换() {
container.setLayout(new FlowLayout());
a = new JComboBox();
a.addItem("10进制转换为2进制");
a.addItem("10进制转换为8进制");
a.addItem("10进制转换为16进制");
a.addItem("2进制转换为8进制");
a.addItem("2进制转换为10进制");
a.addItem("2进制转换为16进制");
a.addItem("8进制转换为2进制");
a.addItem("8进制转换为10进制");
a.addItem("8进制转换为16进制");
a.addItem("16进制转换为2进制");
a.addItem("16进制转换为8进制");
a.addItem("16进制转换为10进制");
container.add(a);
zhuanhuan = new JTextField(10);
container.add(zhuanhuan);
xianshi = new JTextField(15);
xianshi.setEditable(false);
container.add(xianshi);
anniu = new JButton("转换");
container.add(anniu);
anniu.addActionListener(this);
a.addItemListener(this);
setSize(190, 150);
setVisible(true);
}
public static void main(String[] arge) {
进制转换 s = new 进制转换();
s.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
}
public void itemStateChanged(ItemEvent event) {
if (event.getStateChange() == ItemEvent.SELECTED) {
if (a.getSelectedItem().equals("10进制转换为2进制"))
zz = 1;
if (a.getSelectedItem().equals("10进制转换为8进制"))
zz = 2;
if (a.getSelectedItem().equals("10进制转换为16进制"))
zz = 3;
if (a.getSelectedItem().equals("2进制转换为8进制"))
zz = 4;
if (a.getSelectedItem().equals("2进制转换为10进制"))
zz = 5;
if (a.getSelectedItem().equals("2进制转换为16进制"))
zz = 6;
if (a.getSelectedItem().equals("8进制转换为2进制"))
zz = 7;
if (a.getSelectedItem().equals("8进制转换为10进制"))
zz = 8;
if (a.getSelectedItem().equals("8进制转换为16进制"))
zz = 9;
if (a.getSelectedItem().equals("16进制转换为2进制"))
zz = 10;
if (a.getSelectedItem().equals("16进制转换为8进制"))
zz = 11;
if (a.getSelectedItem().equals("16进制转换为10进制"))
zz = 12;
}
}
public void actionPerformed(ActionEvent e) {
try{
if (zz == 1||zz == 0)
xianshi.setText(Integer.toBinaryString(Integer.parseInt(zhuanhuan.getText())));
else if (zz == 2)
xianshi.setText(Integer.toOctalString(Integer.parseInt(zhuanhuan
.getText())));
else if (zz == 3)
xianshi.setText(Integer.toHexString(Integer.parseInt(zhuanhuan
.getText())));
}
catch(NumberFormatException nu)
{
JOptionPane.showMessageDialog(null, "你输入非数字");
}
if (zz == 4) {
int a = j1(zhuanhuan.getText(), "[0-1]+", 2);
xianshi.setText(Integer.toOctalString(a));
} else if (zz == 5) {
j1(zhuanhuan.getText(), "[0-1]+", 2);
} else if (zz == 6) {
int a = j1(zhuanhuan.getText(), "[0-1]+", 2);
xianshi.setText(Integer.toHexString(a));
} else if (zz == 7) {
int a = j1(zhuanhuan.getText(), "[0-7]+", 8);
xianshi.setText(Integer.toBinaryString(a));
} else if (zz == 8) {
j1(zhuanhuan.getText(), "[0-7]+", 8);
} else if (zz == 9) {
int a = j1(zhuanhuan.getText(), "[0-7]+", 8);
xianshi.setText(Integer.toHexString(a));
} else if (zz == 10) {
int a = j1(zhuanhuan.getText(), "[0-9,a,b,c,d,e,f]+", 16);
xianshi.setText(Integer.toBinaryString(a));
} else if (zz == 11) {
int a = j1(zhuanhuan.getText(), "[0-9,a,b,c,d,e,f]+", 16);
xianshi.setText(Integer.toOctalString(a));
} else if (zz == 12) {
j1(zhuanhuan.getText(), "[0-9,a,b,c,d,e,f]+", 16);
}
}
public int j1(String zhuanhuan, String a1, int a3) {
if (zhuanhuan.matches(a1)) {
int bb, gg = 0, cc = 1;
String s = zhuanhuan;
StringBuffer ss = new StringBuffer(s);
ss.reverse();
for (int i = 0; i < ss.length(); i++) {
String jj = ss.charAt(i) + "";
if(a3==16){
if (jj.equals("a"))
jj = "10";
if (jj.equals("b"))
jj = "11";
if (jj.equals("c"))
jj = "12";
if (jj.equals("d"))
jj = "13";
if (jj.equals("e"))
jj = "14";
if (jj.equals("f"))
jj = "15";
}
bb = Integer.parseInt(jj);
if (i == 0)
gg += bb * cc;
else
gg += bb * (cc *= a3);
}
xianshi.setText(gg + "");
return gg;
}
else{
JOptionPane.showMessageDialog(null, "请检查输入数字是不是符合要求");
}
return 0;
}
}
第2个回答 2008-12-15
用十进制的转化成其他进制的很简单,只要用这个十进制数除以它,得到余数,每除一次得到一个余数,直到不够除,把余数从下到上排列得到的就是所求,比如十进制125转化成二进制,就用125除以2,依次得62余1,62除以2,得31余0,31除以2,得15余1,15除以2,得7余1,7除以2,得3余1,3除以2,得1余1,1不够除,就写在后面.反排成一列数.得二进制111101.其他进制类似算.至于其他进制转换比较复杂,鉴于楼主很抠不给分,所以也不便详细描述,描述也不一定看的懂```小算一下拿两分闪人.````
第3个回答 2008-12-15
java中自带有将十进制转化成二进制、八进制、十六进制的方法:
toBinaryString()将十进制转换成二进制
toHexString()将十进制转换成十六进制
toOctalString()将十进制转换成八进制
下面是自己写的一个将二进制转换成十进制的代码,你可以看看,自己摸索摸索
import javax.swing.JOptionPane;
public class binaryswitch
{
public static void main(String[] args)
{
String input = JOptionPane.showInputDialog("Please enter a binary number:");
char[] num_c = new char[input.length()];
for (int i=0; i<input.length(); i++)
{
num_c[i] = input.charAt(i);
if((num_c[i]!='1')&&(num_c[i]!='0'))
{
JOptionPane.showMessageDialog(null,"Your input is wrong!",
"Format Check",JOptionPane.INFORMATION_MESSAGE);
return;
}
}
System.out.println("OK");
double sum=0;
int[] num_i = new int[input.length()];
for (int i=0; i<input.length(); i++)
{
num_i[i]=input.charAt(i)-48;
sum += num_i[i] * (Math.pow(2,((input.length()-1)-i)));
}
System.out.println(sum);
System.exit(0);
}
}
视频你可以看看孙鑫的:
www.sunxin.org