用Java写一个简单的数字进制转换程序
适合初学者
我是一名java初学者,近期正在学习一本Java书籍。跟着老师写了一个简单的数字进制转换程序,我在老师的基础上做出了一定的改进。
接下来就直接看代码吧。
代码部分
import java.util.Scanner;
public class NumberChange {
/**
* 进行进制转换的主函数
* @param args
*/
public static void main(String[] args) {
String number;//需要转换的数字
int BeforeV,AfterV;//进制转换数
String result="";//最后需要打印出来的结果
Scanner read=new Scanner(System.in);//获取用户输入的值
for(;;) {//用for语句,得到结果才跳出循环
System.out.println("请依次输入三个参数:待转换的数字&转换前数制&转换后数制");
number=read.next();
BeforeV=read.nextInt();
AfterV=read.nextInt();
if(Judgment(BeforeV,number)) {
try {
if(BeforeV!=10) {
String temp=String.valueOf(NumberToTen(BeforeV,number));
result=String.valueOf(TenToNumber(AfterV,temp));
}
else {
result=String.valueOf(TenToNumber(AfterV,number));
}
System.out.println(BeforeV+"进制的数"+number+"转化为"+AfterV+"进制的数后是"+result);
return;
}catch(Exception e) {
e.getStackTrace();
System.exit(-1);
}
}
else {
System.out.println("您输入的参数不合法!请重新输入");
}
}
}
/**
* //将其他进制得数字转化为十进制
* @param BeforeV
* @param number
* @return
*/
public static int NumberToTen(int BeforeV,String number) {
double result=0;//声明一个转换后的值
String subString;
for(int i=0;i<number.length();i++) {
subString=number.substring(i, i+1);
if(BeforeV==16) {
subString=SixteenCharToTen(subString);//将可能截取到的字符(A,B······F)十六进制转化为十进制
}
result+=Integer.parseInt(subString)*Math.pow(BeforeV,number.length()-i-1);//截取数×(转换前进制数的截取数位置-1)次方,这里有点难懂,请大家百度
}
return (int)result;
}
/**
* 将十进制数转化为其他进制数
* @param AfterV
* @param num
* @return
*/
public static String TenToNumber(int AfterV,String num) {
int current=Integer.parseInt(num);
String opresult="";
if(AfterV==16) {
while(current>=AfterV) {
opresult+=TenToSixteenChar(current%AfterV);//将得到的余数转化为十六进制数
current/=AfterV;//转到十六进制数的下一位
}
if(current!=0) opresult+=TenToSixteenChar(current);//将每一位十六进制数连接起来
}
else {
while(current>=AfterV) {
opresult+=current%AfterV;//取出余数
current/=AfterV;//取出该进制数的下一位
}
if(current!=0) opresult+=current;//将每一位进制数连接起来
}
String riresult="";
for(int i=opresult.length()-1;i>=0;i--) {
riresult+=opresult.substring(i,i+1);//因为前面我们得到的结果其实是倒序,我们需要将它倒置一遍,才是真正的结果
}
return riresult;
}
/**
* 将16进制的数转化为十进制
* @param s
* @return
*/
public static String SixteenCharToTen(String s) {
String num="";
if(s.equals("A")||s.equals("a")) {
num="10";
}
else if(s.equals("B")||s.equals("b")) {
num="11";
}
else if(s.equals("C")||s.equals("c")) {
num="12";
}
else if(s.equals("D")||s.equals("d")) {
num="13";
}
else if(s.equals("E")||s.equals("e")) {
num="14";
}
else if(s.equals("F")||s.equals("f")) {
num="15";
}
else {
num=s;
}
return num;
}
/**
* 将十进制数转化为十六进制数
* @param num
*/
public static String TenToSixteenChar(int num) {
String c="";
if(num==10) {
c="A";
}
else if(num==11) {
c="B";
}
else if(num==12) {
c="C";
}
else if(num==13) {
c="D";
}
else if(num==14) {
c="E";
}
else if(num==15) {
c="F";
}
else {
c=String.copyValueOf(null);
}
return c;
}
/**
* 这里判断用户输入的参数是否合法
* @param BeforeV
* @param num
* @return
*/
public static boolean Judgment(int BeforeV,String num) {
String tempString;
int count=0;
for(int i=0;i<num.length();i++) {
tempString=num.substring(i, i+1);
if(BeforeV>=Integer.parseInt(tempString)) {//当转化前数制大于用户输入的数字的每一位才算合法
count+=1;
}
}
if(count==num.length()) {
return true;
}
else {
return false;
}
}
}
实现效果截图
有什么意见与建议,欢迎大家评论留言。
适合初学者的一本Java学习资料,请点击以下链接
链接:https://pan.baidu.com/s/1xYtkXyDqWJVM34vkjtIKHw
提取码:l1mv