一、问题描述:
图灵机(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)); //二进制转换为十进制并输出
}
}