利用java实现对二进制数进行AMI编码

  • 一、题目描述
  • 二、AMI编码规则
  • 三、解题思路
  • 四、示例代码
  • 五、测评结果

一、题目描述

从键盘输入二进制数,进行AMI编码(假设第一个非零码是 +1),如果输入的是非二进制数要报错,并提示报错的数值

二、AMI编码规则

消息代码中的0 传输码中的也是0
消息代码中的1 传输码中的是+1、-1交替
例如:
消息代码: 1 0 1 0 1 0 0 0 1 0 1 1 1
AMI码 : -1 0 +1 0 -1 0 0 0 +1 0 -1 +1 -1

三、解题思路

根据AMI编码规则可知,编码后的二进制数会出现 +1 和 -1 交替,而0保持不变,所以我们可以通过中间变量来记录输入的二进制数中1的位置,以当前题目为例,位于奇数位上的是 +1,位于偶数位上的是 -1

四、示例代码

package com.easy.java;import org.junit.Test;import java.util.ArrayList;
import java.util.Scanner;/*** @ClassName AMITest* @Description 从键盘输入二进制数,进行AMI编码,如果输入的是非二进制数要报错,并提示报错的数值* @Author wk* @Date 2022/2/27 11:59* @Version 1.0*/
public class AMITest {@Testpublic void testAMI() {Scanner input = new Scanner(System.in);// 存放输入的二进制数ArrayList<Integer> bin = new ArrayList<>();// 存放编码后的二进制数ArrayList<Integer> list = new ArrayList<>();int tempBin = 0;boolean flag = true;System.out.println("请输入一段二进制数(0/1),输入999后完成输入");while (true) {tempBin = input.nextInt();if (tempBin == 1 || tempBin == 0) {bin.add(tempBin);} else if (tempBin == 999) {System.out.println("输入完成");break;} else {System.out.println("输入数据有误,请输入一个二进制数(0/1)");System.out.println("错误数据为:" + tempBin);flag = false;break;}}if (flag) {// 进行AMI编码// 记录1的位置是在偶数位还是在奇数位int count = 0;for (Integer key : bin) {if (key == 0) {list.add(key);}if (key == 1) {count++;key = (count % 2 == 0) ? -1 : 1;list.add(key);}}}// 输出编码后的结果list.forEach(System.out::print);}}

五、测评结果

  • 输入用例
    1 0 0 1 1 1 0 1

  • 编码结果

【算法java版09】:利用java实现对二进制数进行AMI编码相关推荐

  1. 基于《仙剑奇侠传柔情版》利用Java的简单实现(一)

    基于<仙剑奇侠传柔情版>利用Java的简单实现(一) 2018-12-01 23:55:36   by Louis  一,新建一个类GameFrame.class,具体代码如下: pack ...

  2. JAVA练习:利用JAVA基本语句实现打印日历

    已知1900年1月1日是星期一,要求打印输入年月的日历. 输出结果格式: 日    一    二    三    四    五    六                                 ...

  3. java 双击_利用java开发一个双击执行的小程序

    之前我们利用java写了很多东西,但是好像都没有什么实际意义. 因为有意义桌面小程序怎么都得有个界面,可是界面又不太好搞.或者 了解到这一层的人就少之又少了. 呀,是不是还得开辟一些版面来介绍awt和 ...

  4. 工作系列Java开发之利用Java实现ERP系统中Excel表格的导出

    工欲善其事必先利其器 前言: 最好的学习方式就是分享,喜欢就三连一下吧(关注,转发,点赞). 今天的内容开始之前,我先申明一下,今天的知识很重要! 很重要! 很重要 ,Excel表格的导出在正式步入公 ...

  5. java控制excel_利用Java控制EXCEL实例详解

    利用Java控制EXCEL实例详解发布者:本站     时间:2020-05-06 15:05:43 使用Windows操作系统的朋友对Excel(电子表格)一定不会陌生,但是要使用Java语言来操纵 ...

  6. java 序列化 clone_利用java序列化进行对象深Clone

    这样做被复制的对象与被复制对象里面的引用都是可以被一并深复制的,不同于Object基类的Clone方法(浅复制:如果被复制的对象存在其他对象的引用,复制一个引用指向原对象的实例).废话不多说Code如 ...

  7. 银行转账java mysql_如何利用Java代码模拟银行转账这一功能?

    今天是刘小爱自学Java的第70天. 感谢你的观看,谢谢你. 话不多说,开始今天的学习: 转账,相信大家基本都接触过,无论是线下用银行卡转账还是线上用手机转账,本质上都是差不多的. 一.转账案例 需要 ...

  8. java制作mp3_利用java制作简单的音乐播放器

    本文主要是用到java中的swing技术,以及JMFjar中的API,为大家分享了java音乐播放器的具体实现代码,供大家参考,具体内容如下 备注:需要用JDK1.8才能播放音乐MP3 package ...

  9. java版msn_Java利用MSNP协议登录MSN

    请参见上一篇文章,登录MSN协议 具体Java实现: 命令序列:<>代表结果 1.连接DS(Dispatcher Server),得到NS(Notification Server) < ...

  10. java建立_利用Java创建Windows服务

    1.Java测试代码 importorg.apache.log4j.Logger;public classTest {private static Logger logger = Logger.get ...

最新文章

  1. ios 检测是否安装微信异常
  2. 程序设计竞赛算法基础考试真题2020年(回忆版)
  3. 提高项目执行力的六板斧
  4. 文献学习(part5)--Clustering by Passing Messages Between Data Points
  5. C#中判断字符串相等的方法
  6. 「雕爷学编程」Arduino动手做(28)——RGB全彩LED模块
  7. 1207.1——C语言 函数
  8. 史上最硬核的rpm和dpkg依赖问题解决方案
  9. mysql 5.0创建函数_MySQL5.0中的Function和Procedure
  10. ibmt41 安装linux系统,哥我决意为IBM T41 装WIN7的决心已经到了全人类都无法阻止的地步!...
  11. Java集合源码解读(一):集合总体框架
  12. Word转换成pdf之pdf虚拟打印机如何使用操作教程
  13. html根据出生日期计算星座,星座测算.html
  14. IDEA 在hdfs中创建目录
  15. 奥鹏西交计算机应用基础在线作业,20秋西交《计算机应用基础》在线作业【答案】...
  16. DNS服务安装及配置实验
  17. java 调用类的构造函数
  18. 搜索新风口与营销新变量
  19. 关于wangEditor5上传本地图片的详细配置
  20. 【PX4 飞控剖析】04安全飞行手册

热门文章

  1. GD32 NAND U盘
  2. android 融云数据库路径,Android开发规范
  3. 8位单片机003兼容替换意法半导体STM8S003F3P6
  4. 使用pdfobject.js实现在线浏览PDF--前端显示PDF
  5. 如何用Python批量获取生意参谋商品来源信息
  6. PID算法理解和代码以及PID调参
  7. 当数据库查询速度过慢时,从哪几个方面排查解决?
  8. 湖南省委短信平台改造方案
  9. VS Code 创建HTML页面教程
  10. VMware中不能使用ifconfig教程——亲测有效