栏目分类:
子分类:
返回
名师互学网用户登录
快速导航关闭
当前搜索
当前分类
子分类
实用工具
热门搜索
名师互学网 > IT > 软件开发 > 后端开发 > Java

【计算机组成原理 & 计算机网络】几种校验码的java编程实现

Java 更新时间: 发布时间: IT归档 最新发布 模块sitemap 名妆网 法律咨询 聚返吧 英语巴士网 伯小乐 网商动力

【计算机组成原理 & 计算机网络】几种校验码的java编程实现

〇、校验码的超类

  我们用面向对象的思想把校验码方式分成一个一个的类,为了提高代码重用性,就先构建一个所有校验码类型的超类,就叫他CheckCode,也就是校验码的意思。

public abstract class CheckCode {

	private final static double p = 0.02;

	
	public abstract boolean[] encode(boolean[] codes);

	
	public abstract boolean[] decode(boolean[] codes);

	
	public static void transfer(boolean[] codes) {
		for (int i = 0; i < codes.length; i++) {
			if (Math.random() < p) {
				codes[i] =! codes[i];
			}
		}
	}

	
	public static boolean[] toCodes(String str) {
		boolean[] codes = new boolean[str.length()];
		for (int i = 0; i < codes.length; i++) {
			codes[i] = !(str.charAt(i) == '0');
		}
		return codes;
	}

	
	public static String codesString(boolean[] codes) {
		StringBuilder sb = new StringBuilder();
		for (boolean b : codes) {
			sb.append(b ? '1' : '0');
		}
		return sb.toString();
	}

}

  这是一个抽象类,用来编码和解码的encode和decode方法是抽象的,因为不同的校验码必然编码和解码方式是不一样的,这里留给CheckCode的各个子类去多态地实现。

一、奇偶校验码
public class ParityCode extends CheckCode{

	
	private final boolean way;

	@Override
	public boolean[] encode(boolean[] codes) {
		boolean[] encodes = new boolean[codes.length + 1];
		encodes[0] = way;
		System.arraycopy(codes, 0, encodes, 1, codes.length);
		for (boolean code : codes) {
			encodes[0] ^= code;
		}
		return encodes;
	}

	@Override
	public boolean[] decode(boolean[] codes) {

		boolean flag = way;

		for (boolean code : codes) {
			flag ^= code;
		}

		if (flag) {
			System.err.println("存在码元出错");
			return codes;
		}

		boolean[] encodes = new boolean[codes.length - 1];
		System.arraycopy(codes, 1, encodes, 0, encodes.length);
		return encodes;

	}

	public ParityCode(boolean way) {
		super();
		this.way = way;
	}

	public static void main(String[] args) {
		ParityCode method = new ParityCode(true);
		boolean[] codes = toCodes("1010111");
		System.out.println("origin codes: " + codesString(codes));
		boolean[] encode = method.encode(codes);
		System.out.println("codes after encode: " + codesString(encode));
		transfer(encode);
		System.out.println("codes after transfer: " + codesString(encode));
		boolean[] decode = method.decode(encode);
		System.out.println("codes after encode: " + codesString(decode));
	}

}

  上体育去了,明天再写,今天就不写了。本来是是准备学信号系统的,可是学长在面试,吵得我学不了,然后我就只好敲代码了,因为敲代码可以带着耳机。也就是说我在学信号,学一半被打断才无奈之下看了会校验码,所以我上完体育肯定回来是继续学信号系统的。这个就明天再写吧。嘴上说是明天,但我觉得我下周才写都有可能。

转载请注明:文章转载自 www.mshxw.com
本文地址:https://www.mshxw.com/it/462431.html
我们一直用心在做
关于我们 文章归档 网站地图 联系我们

版权所有 (c)2021-2022 MSHXW.COM

ICP备案号:晋ICP备2021003244-6号