模拟图灵机

一、问题描述:
图灵机(XN*2)的模拟实验

二、问题分析与设计:
1、 将输入的十进制转换为二进制字符串
2、 数据序列变化(新建一字符串,将转换后的二进制码输入)
3、 更具运算指令得到转换后的二进制编码
4、 将转换后的二进制编码还原为普通二进制编码
5、 将二进制转换为十进制数字并输出

三、完整代码

package Turing;
import java.util.Scanner;
public class Turing {

	@SuppressWarnings({ "unused", "resource" })
	public static void main(String[] args) {

		System.out.println("请输入一个整形数字:");
		int a;
		char inState;                                       //内态值
		Scanner input = new Scanner(System.in);
		a=input.nextInt();
	    String str = Integer.toBinaryString (a) ;           //将整数转换为字符串二进制数
	    String st=new String();                             //定义字符串
	    String s=new String();
	    st="0";
	     for (int i = 0;i<str.length();i++)
	    {
	    	if(str.charAt(i)%2==0){st=st+str.charAt(i);continue;}
	    	else
	    		st=st+str.charAt(i)+"0";                            //新建一字符串,将转换后的二进制码输入
	    }
	    st=st+"1"+"1"+"0";                                   //字符串结尾“,”及结束
	    System.out.println("输入数据代换后的二进制码:"+st);
	    char exState='0';
	    for(int j=0;j<st.length();j++)
	    {
	    	
	    	if(st.charAt(j)=='0'&&exState=='0'){s=s+'0';inState='0';exState=inState;}  //如果输入的字符为0,变为的内态为0,那么新的字符为0;
	    	else if(st.charAt(j)=='1'&&exState=='0'){inState='1';s=s+'0';exState=inState;}//如果输入的字符为1,上一变为的内态为0,此次变为的内态为1,把输入的字符1改为0;
	    	else if(st.charAt(j)=='0'&&exState=='1'){inState='0';s=s+'1';exState=inState;}//如果输入的字符为0,上一变为的内态为1,此次变为的内态为0,把输入的字符0改为1;
	    	else if(st.charAt(j)=='1'&&exState=='1'){inState='1'+'0';s=s+'0';exState=inState;}//如果输入的 字符为1,上一变为的内态为1,此次变为的内态为10,把输入的字符1改为0;
	    	else if(st.charAt(j)=='0'&&exState=='1'+'0'){inState='1'+'1';s=s+'1';exState=inState;}//如果输入的 字符为0,上一变为的内态为10,此次变为的内态为11,把输入的字符0改为1;
	    	else if(st.charAt(j)=='0'&&exState=='1'+'1'){inState='0';break;}//如果输入的 字符为0,上一变为的内态为11,此次变为的内态为0,STOP;
	    	else
	    		break;
	    }
	    System.out.println("输出数据的代换后的二进制码:"+s);
	    String str2=new String();
	    for(int i=1;i<s.length()-1;i++) {
	    	if(s.charAt(i-1)=='0'&&s.charAt(i+1)=='0')
	    	{
	    		str2=str2+s.charAt(i);                                 //新建一字符串str2,用于存入恢复后的二进制码
	    	}
	    }
	     str2=str2+'0';
	    System.out.println(str2);
	    System.out.println("XN*2结果:"+Integer.parseInt(str2,2));       //二进制转换为十进制并输出
	}
     
}

你可能感兴趣的:(程序设计方法与优化)