java实现图灵机模型(UN*2)

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();
    }
}

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值