java初学者之用Java实现数字任意进制转换

本文分享了一个适合Java初学者的数字进制转换程序,通过实例代码详细介绍了如何从其他进制转换到十进制,再从十进制转换到目标进制的过程。程序包括了十六进制字符到十进制的转换,以及十进制到十六进制的转换。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

用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

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值