【Java】模拟图灵机

package 图灵机;
import java.util.*;
/**   
* 项目名称:图灵机   
* 类名称:Machine   
* 类描述:
* 创建人:百里梦想  
* 创建时间:2020年4月15日 上午11:52:45   
* @version  3.0.0     
*/
public class Machine {
	static Scanner sc = new Scanner(System.in);
	
	public static String Transform(String Data) {
		int i,InputNumber;
		String String_Data = "";
		System.out.println("请输入十进制数:");
		InputNumber = sc.nextInt();
	 	String Bin_Data = Integer.toBinaryString(InputNumber);
	 	
	 	for(i = 0;i < Bin_Data.length();i ++) {
	 		if(Bin_Data.charAt(i) == '1') {
	 			String_Data = String_Data.concat("01");
	 		}
	 		else if (Bin_Data.charAt(i) == '0') {
	 			String_Data = String_Data.concat("0");
			}
	 	}
	 	
	 	String_Data = String_Data.concat("0110");
	 	
		System.out.println("二进制扩展后:" + String_Data);	 
		return String_Data;
	}

	public static void main(String[] args) {
		String Data = "";
		char data[] = new char[20];
		int i,j = 0,flag = 0;	//内态
		
		Data = Transform(Data);
		
		for(i = 0;i < Data.length();i ++) {	//输入
			data[i] = Data.charAt(i);
		}
		
		for(i = Data.length();i < 20;i ++) { //补0
			data[i] = '0';
		}
		
		for(i = 0;i < data.length;i ++) {
			if(flag == 0 && data[i] == '0') {      //内态和数字都为0时,不改变 
				flag = 0;
				data[i] = '0';
	        }
	        else if(flag == 0 && data[i] == '1') {        //内态为0数字为1时,内态变为1数字变为0
	        	flag = 1;
	        	data[i] = '0';
	        }
	        else if(flag == 1 && data[i] == '0') {        //内态为1数字为1时,内态变为10数字变为0
	        	flag = 0;
	        	data[i] = '1';
	        }
	        else if(flag == 1 && data[i] == '1') {        //内态为1数字为0时,内态变为0数字变为1
	        	flag = 10;
	        	data[i] = '0';
	        }
	        else if(flag == 10 && data[i] == '0') {     //内态为10数字为0时,内态变为11数字变为1
	        	flag = 11;
	        	data[i] = '1';
	        }
	        else if(flag == 11 && data[i]=='0') {     //内态为10数字为1时,内态变为0数字变为0
	        	flag = 0;
	        	data[i]='1';
	        	break;
	        }
		}
		
		System.out.print("原始结果为:");
		for(i = 0;i < data.length;i ++) {  //原始结果输出
			System.out.print(data[i]);
		}
		System.out.println();
		
		for(i = 0;i < data.length;i ++) {  //去除前面多余的0
			if(data[i] == '0' && data[i+1] == '1') {
				j = i;
				break;
			}
		}
		for(;j < data.length;j ++) {	
			data[j-1] = data[j];
		}
		
		for(i = data.length - 1;i > 0;i --) {	//去除后面多余的0
			if(data[i] != data[i-1]) {
				j = i;
				break;
			}
		}

		System.out.print("简化后的结果为:");
		for(i = 0;i < j + 1;i ++) {  	
			System.out.print(data[i]);
		}
		
		System.out.println();
		
		String tempString = "";		//十进制结果拼接
		for(i = 0;i < 20;i ++) {
			if(data[i] == '0') {
				if(data[i + 1] == '1') {
					if(data[i + 2] == '1') {
						break;		//此时的结果为0110,结束
					}
					else {
						tempString = tempString.concat("1"); 	//此时的结果为010
					}
				}
				else {
					tempString = tempString.concat("0");	//此时的结果为00
				}
			}
			else {
				if(data[i + 1] == '0') {
					continue;
				} else {
					break;
				}
			}
		}
		System.out.println("还原二进制:" + tempString + "2");
		
		Integer.parseInt(tempString);	//格式转换并最终输出结果
		System.out.println("十进制结果为:" + Integer.parseInt(tempString, 2) + ",");

	}
}

整个程序分为 个模块:

  • 十进制输入模块
  • 十进制转换二进制模块
  • 二进制转换扩展二进制模块
  • 扩展二进制判断模块
  • 扩展二进制转换二进制模块
  • 二进制模块转换十进制模块

其中,前三个模块放在transform()函数中实现。

程序的核心思想为:将输入的数据由字符串转换为数组进行存储,并在数组的基础上进行操作。

程序比较简单,相信大家都能看懂,有问题的话在下面留言,我会回复。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值