Java语言基础1--综合案例(数字加密问题):

问题描述:某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密。加密规则如下:首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,然后,把加密后的结果在控制台打印出来。


最终代码如下(详细的需求分析、编码实现过程)

/*
    1、问题描述:
        某个公司采用公用电话传递数据信息,数据是小于8位的整数,为了确保安全,在传递过程中需要加密。
        加密规则如下:首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,
        最后将第一位和最后一位数字交换。 请任意给定一个小于8位的整数,然后,把加密后的结果在控制台打印出来。 

    2、获取需求:
        实现将用户输入的小于8位正整数字,按照给定的规则加密,并打印出来

    3、分析:
        (1)获取给定的不小于8位的整数

        (2)分析主要规定的规则:
            a、原始数据倒序
            b、将每一个数字加上5
            c、和与10取余代替当前数字
            d、首尾数字交换

        (3)将所得加密后的数字打印

    4、实现:
        数据结构:采用一维数组,长度为8

        规则实现:
        a、原始数据倒序
            拆数:获取各个位置上的数字
                拆数过程中从个位数字开始获取,存储从数组的0索引开始,
                已经实现了数组的逆置
            逆置数组(reverse函数)

        b、将每一个数字加上5
            一维数组的遍历:for循环
            num += 5;

        c、和与10取余代替当前数字
            num %= 10;          

        d、首尾数字交换
            实现正整数交换的四种方式
            (1)中间变量temp
            (2)不借助中间变量(+)
            (3)使用按位异或的特点:
                某一数据和同一数据异或两次,数据本身不变
            (4)一句话实现:
                b = (a+b) -(a=b); 可读性很差且代码不规范

    5、编码
*/
import java.util.Scanner;

public class JiaMiDemo
{
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入原始数据:");
        // 1、获取原始数据
        int data = sc.nextInt();

/*
        // 2、定义数据结构:一维数组
        int[] dataArray = new int[8];
        int count = 0;   // 记录索引位置(数组的实际长度)

        // 3、原始数据倒序
        //      拆数:获取各个位置上的数字
        //          拆数过程中从个位数字开始获取,存储从数组的0索引开始,
        //          已经实现了数组的逆置
        //      逆置数组(reverse函数)

        while(data!=0)
        {
            dataArray[count] = data % 10;
            count ++;
            data /= 10;
        }
*/

        // 拆数函数实现2、3
        int[] dataArray = chaiShu(data);

        // 获取数组的实际长度
        int count = dataArray[8];

        /* 4、将每一个数字加上5
                一维数组的遍历:for循环
           5、和与10取余代替当前数字
        */
        for(int i=0;i5;
            dataArray[i] %= 10;
        }

        // 6、首尾数字交换
        int temp = dataArray[0];
        dataArray[0] = dataArray[count-1];
        dataArray[count-1] = temp;

        // 7、实现加密数据的输出
        String jiami="";
        for (int i=0;i"加密后的数据是:\n"+ jiami);
    }

    /* 拆数函数:获取各个位置上的数字
        拆数过程中从个位数字开始获取,存储从数组的0索引开始,
        已经实现了数组的逆置
    */
    public static int[] chaiShu(int num)
    {
        int[] arr = new int[9];
        int index = 0;
        while(num!=0)
        {
            arr[index++]=num%10;
            num/=10;
        }
        // 最后一位存储数组的实际长度
        arr[8] = index;
        return arr;
    }
}

你可能感兴趣的:(自学Java)