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

从零开始学Java-Day05-练习01:利用数组解决数据加密习题的过程及相关思考

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

从零开始学Java-Day05-练习01:利用数组解决数据加密习题的过程及相关思考

数据加密问题
1、问题
   某个公司采用公用电话传递数据信息,数据是小于9位的整数,为了确保安全,在传递过程中需要加密,加密规则如下:首先将数据倒序,然后将每位数字都加上5,再用和除以10的余数代替该数字,最后将第一位和最后一位数字交换。 请任意给定一个小于9位的整数,然后,把加密后的结果在控制台打印出来。
2、难点:数据长度不固定。
3、要求(以123456为例)
(1)数据是小于8位的整数
     int number = 123456
(2)加密规则:
     a: 首先将数据逆序
                    654321
     b: 将每位数字都加上5,再用和除以10的余数代替该数字
                    109876
     c: 最后将第一位和最后一位数字交换
                    609871
(3)把加密后的结果在控制台打印出来
4、分析过程
(2)赋值数组
    可以采用for循环除10取余的方法获取每一位的数字,
    传入数组。
    代码:
  
  int[] arr = new int[8];
    int j = 1;
    for (int i = arr.length-1; i >=0; i--) {
        arr[i] = (number / j) % 10;
        j *= 10;
    }
    问题:无法确定键盘录入数据的位数。数组长度设置为最大8,
         数组中会有多余的0元素。
    解决:采用for循环找到第一个不为0的数字索引,
         设置为索引0,
    代码:
   
  int k = 0;
     for (int i = 0; i < 8; i++) {
        if (arr[i] != 0) {
            k = i;
            break;
        }
    }
    int[] arr1 = new int[arr.length - k];
    for (int i = k; i < 8; i++) {
        arr1[i - k] = arr[i];
    }
    注意:k需要在循环外定义初始化(作用域问题)
(3)数组逆序
    简单,三段式逆序(个人记忆):
         中间值=首数据
         首数据=尾数据
         尾数据=中间值
         速记:从右往左从上往下次序是首中尾
    代码:
   
 for (int i = 0; i < arr1.length / 2; i++) {
        int temp = arr1[i];
        arr1[i] = arr1[arr1.length - 1 - i];
        arr1[arr1.length - 1 - i] = temp;
    }
(4)加密赋值
  
  for循环即可
    代码:
    for (int i = 0; i < arr1.length; i++) {
        arr1[i] = (arr1[i] + 5) % 10;
    }
    int temp3 = arr1[0];
    arr1[0] = arr1[arr1.length - 1];
    arr1[arr1.length - 1] = temp3;
(5)键盘录入,错误输出报错并重新输入
    采用导包,if+while循环即可
    代码:

    import java.util.Scanner;
    ......
    while (flag) {
        number = sc.nextInt();
        System.out.println("原数据:" + number);
        if (number > 99999999) {
            System.out.println("输入错误!请重新输入:");
            continue;
        }
        flag = false;
    }
5、总代码:

 */
import java.util.Arrays;
import java.util.Scanner;
public class HomeWork05 {
public static void main(String[] args) {
    System.out.println("请输入一个不大于八位的数:");
    Scanner sc = new Scanner(System.in);
    boolean flag = true;
    int number = 0;
    //错误输入报错
    while (flag) {
        number = sc.nextInt();
        System.out.println("原数据:" + number);
        if (number > 99999999) {
            System.out.println("输入错误!请重新输入:");
            continue;
        }
        flag = false;
    }
    //赋值数组  []arr={00123456}
    int[] arr = new int[8];
    int j = 1;
    for (int i = arr.length-1; i >=0; i--) {
        arr[i] = (number / j) % 10;
        j *= 10;
    }
    //去掉0
   int k = 0;
    for (int i = 0; i < 8; i++) {
        if (arr[i] != 0) {
           k = i;
            break;
        }
    }
    int[] arr1 = new int[arr.length - k];
    for (int i = k; i < 8; i++) {
        arr1[i - k] = arr[i];
    }
    //逆序[]arr1={654321}
    for (int i = 0; i < arr1.length / 2; i++) {
        int temp = arr1[i];
        arr1[i] = arr1[arr1.length - 1 - i];
        arr1[arr1.length - 1 - i] = temp;
    }
    for (int i = 0; i < arr1.length; i++) {
        arr1[i] = (arr1[i] + 5) % 10;
    }
    int temp3 = arr1[0];
    arr1[0] = arr1[arr1.length - 1];
    arr1[arr1.length - 1] = temp3;
    System.out.print("数据加密后:");
    for (int i = 0; i < arr1.length; i++) {
        System.out.print(+arr1[i]);
    }
}
}

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

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

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