package com.uplooking;
/*
内态为0,输入为0→内态为0,输出为0,右移;
内态为0,输入为1→内态为1,输出为0,右移;
内态为1,输入为0→内态为0,输出为1,右移;
内态为1,输入为1→内态为10,输出为0,右移;
内态为10,输入为0→内态为11,输出为1,右移;
内态为11,输入为0→内态为0,输出为1,STOP;
*/
import java.util.Random;
import java.util.Scanner;
public class Tuling {
//将整型十进制正数编码为所需要的原码
static StringBuffer transform(int a1){
String s;
s = Integer.toBinaryString(a1);
StringBuffer sb = new StringBuffer(s.replace("1","10"));
sb.append("1100");
return sb;
}
//将编码进行乘2计算
static void calculate(StringBuffer sb){
//intState为内态变量
for(int i=0,inState=0;i<sb.length();i++){
if(inState==0 & sb.charAt(i)=='0'){
inState=0;
sb.setCharAt(i,'0');
System.out.println("内态为0,输入为0,操作后为: "+sb+" 内态为:"+inState+" 输出为:"+sb.charAt(i));
continue;
}
if(inState==0 & sb.charAt(i)=='1'){
inState=1;
sb.setCharAt(i,'0');
System.out.println("内态为0,输入为1,操作后为: "+sb+" 内态为:"+inState+" 输出为:"+sb.charAt(i));
continue;
}
if(inState==1 & sb.charAt(i)=='0'){
inState=0;
sb.setCharAt(i,'1');
System.out.println("内态为1,输入为0,操作后为: "+sb+" 内态为:"+inState+" 输出为:"+sb.charAt(i));
continue;
}
if(inState==1 & sb.charAt(i)=='1'){
inState=10;
sb.setCharAt(i,'0');
System.out.println("内态为1,输入为1,操作后为: "+sb+" 内态为:"+inState+" 输出为:"+sb.charAt(i));
continue;
}
if(inState==10 & sb.charAt(i)=='0'){
inState=11;
sb.setCharAt(i,'1');
System.out.println("内态为10,输入为0,操作后为: "+sb+" 内态为:"+inState+" 输出为:"+sb.charAt(i));
continue;
}
if(inState==11 & sb.charAt(i)=='0'){
inState=0;
sb.setCharAt(i,'1');
System.out.println("内态为11,输入为0,操作后为: "+sb+" 内态为:"+inState+" 输出为:"+sb.charAt(i));
break;
}
}
}
//测试模块
static void test(){
Random r = new Random();
for(int i=0;i<20;i++){
int t=r.nextInt(9999);
System.out.println("输入的数为: "+t);
StringBuffer sb = transform(t);
System.out.println("编码后为:"+sb);
calculate(sb);
System.out.println("计算结果为:"+sb);
//将末尾的无效字符去掉
sb.delete(sb.length()-2, sb.length());
System.out.println("计算结果译码后的十进制为:"+Integer.parseInt(sb.toString().replace("10", "1"), 2));
System.out.println();
}
}
public static void main(String[] args) {
System.out.println("请输入你要计算的数");
Scanner sc = new Scanner(System.in);
int a = sc.nextInt();
sc.close();
StringBuffer sb = transform(a);
System.out.println("编码后为:"+sb);
calculate(sb);
System.out.println("计算结果为:"+sb);
//将末尾的无效字符去掉
sb.delete(sb.length()-2, sb.length());
System.out.println("计算结果译码后的十进制为:"+Integer.parseInt(sb.toString().replace("10", "1"), 2));
//以下为测试程序部分
// test();
}
}
java实现图灵机模型(UN*2)
最新推荐文章于 2021-04-14 16:54:55 发布