解密数组

解密数组

1.什么是数组?

先举个例子吧,当你去超市购物的时候,当你买了许多东西,你的第一反应是什么呢?我觉得是拿一个塑料袋将它们全部装进去,不过这个塑料袋比较特殊,他只能装同一类型的东西装了苹果就不能装其他的,这个特殊的塑料袋我们可以看做是一个数组。

2.一维数组的定义格式

1.格式一: 数据类型[] 数组名;

   int[] arr;

2.格式二: 数据类型 数组名;

   int   arr[];
3.一维数组的初始化

1.什么是初始化?

在堆内存中卫数组中的元素分配内存空间,并未=为数组中的每个元素赋值。

2.初始化的分类

  • 静态初始化:定义好初始化的值,由系统决定数组的长度
静态初始化格式:
1.int[] arr=new int []{1,2,3};
2.int[] arr1={1,2,3,4};
  • 动态初始化:给出数组的长度,由系统赋给默认值
动态初始化格式:
1.int[] arr=new int[10];

3.系统默认值

    byteshortintlong  -- 0
    floatdouble 		       -- 0.0
	char 				      -- '\u0000'
	boolean 				-- false
	引用数据类型	 -- null	
4.一维数组的遍历
public class demo1 {
    public static void main(String[] args) {
        int[] arr={1,55,25,88};
        for (int i = 0; i <arr.length ; i++) {
            System.out.println(arr[i]);
        }
    }
}
5.堆,栈,方法区

1.堆

​ 堆中主要存放的是new出来的对象,每创建一个数组,便在堆中new了一个对象,开辟了一块空间,一维数组中堆中存放的是数据的值,二维数组中存储的是一维数组的地址。

2.栈

​ 栈中存放的是局部变量,当程序运行时,首先将main方法压栈,然后自上而下运行,当创建局部变量或调用方法时,入栈,当方法运行结束后,弹栈,

栈中还存放着在堆中new出来的对象的引用,指向堆中的对象,当main方法运行结束后,弹栈,堆中的对象则等待GC(垃圾处理器)回收。

3.方法区

​ 存放的是Class对象,一系列常量池,常量。

6.数组常见异常
  • ArrayIndexOutOfBoundsException:数组索引越界异常

访问了不存在的索引

  • NullPointerException:空指针异常

    引用为空

7.二维数组

1.什么是二维数组?

二维数组其实就是一个特殊的一维数组,不过里面存储的每个元素为一维数组

2.二维数组的动态初始化

 1. 数据类型 [][] 变量名 =  new  数据类型[i][j];//推荐使用
 2. 数据类型 数组名[][] = new 数据类型[m][n];
 3. 数据类型[] 数组名[] = new 数据类型[m][n];

  int[][] arr = new int[3][2];
  int arr[][] = new int[3][2];
  int[] arr[] = new int[3][2];

3.二维数组的静态初始化

1.数据类型[][] 变量名 = new 数据类型[][]{{元素…},{元素…},{元素…}...};
2.数据类型[][] 变量名 = {{元素…},{元素…},{元素…}};//建议使用
int[][] arr = {{1,2,3},{4,5,6},{7,8,9}};
int[][] arr = {{1,2,3},{5,6},{7}};
8.二维数组的遍历
public class Demo2 {
    public static void main(String[] args) {
        int[][] arr={
                {1,7,9,3,4},
                {1,5,11,22},
                {3,33,445,5}
              };
        for (int i = 0; i <arr.length ; i++) {
            for (int j = 0; j <arr[i].length ; j++) {
                System.out.println(arr[i][j]);
            }
        }
    }
}
9.杨辉三角形
public class Demo3 {
    public static void main(String[] args) {

        int n=10;
        int[][] arr=new int[n][n];
        for (int i = 0; i <n; i++) {
             arr[i][0]=arr[i][i]=1;
            for (int j = 1; j <i; j++) {
                arr[i][j]=arr[i-1][j-1]+arr[i-1][j];
            }
        }


        for (int i = 0; i <n ; i++) {
            for (int j = 0; j <=i; j++) {
                System.out.print(arr[i][j]+"\t");
            }
            System.out.println();
        }
    }

}
10.递归

1.什么是递归?

在方法中调用方法本身称之为递归

2.递归需要注意什么?

​ 1.递归要有出口,否则会产生死递归现象

​ 2.递归次数不能太多,否则会栈溢出

3.阶乘

public class Demo4 {
    public static void main(String[] args) {
        System.out.println(jieCheng(5));
    }
    public  static int jieCheng(int a)
    {
        if(a==1)
        {
            return 1;
        }else {
            return a*jieCheng(a-1);
        }
    }
}

4.不死神兔

public class Demo5 {
    public static void main(String[] args) {
        System.out.println(neverDieHabbit(20));
    }
    public static int neverDieHabbit(int month)
    {
        if(month==1||month==2)
        {
            return 1;
        }else
        {
            return neverDieHabbit(month1)+neverDieHabbit(month-2);
        }
    }
}
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
好的,我可以帮你解答这个问题。 在 Java 中,我们可以使用 javax.crypto 库中的 Cipher 类进行 AES 加密和解密操作。具体步骤如下: 1. 创建 Cipher 对象 ```java Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); ``` 2. 创建密钥 ```java SecretKeySpec secretKey = new SecretKeySpec(keyBytes, "AES"); ``` 其中,keyBytes 是一个 byte 数组,表示密钥的内容。 3. 初始化 Cipher 对象 ```java cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(ivBytes)); ``` 其中,ivBytes 是一个 byte 数组,表示初始化向量。 4. 加密或解密数据 ```java byte[] result = cipher.doFinal(dataBytes); ``` 其中,dataBytes 是一个 byte 数组,表示要加密或解密的数据。 5. 将加密或解密后的结果转换成字符串或字节数组 如果需要将加密或解密后的结果转换成字符串,可以使用 Base64 编码。具体代码如下: ```java String resultStr = Base64.getEncoder().encodeToString(result); ``` 如果需要将加密或解密后的结果转换成字节数组,可以直接使用得到的 result 数组。 完整的示例代码如下: ```java import java.util.Base64; import javax.crypto.Cipher; import javax.crypto.spec.IvParameterSpec; import javax.crypto.spec.SecretKeySpec; public class AesUtils { public static byte[] encrypt(byte[] keyBytes, byte[] ivBytes, byte[] dataBytes) throws Exception { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec secretKey = new SecretKeySpec(keyBytes, "AES"); cipher.init(Cipher.ENCRYPT_MODE, secretKey, new IvParameterSpec(ivBytes)); return cipher.doFinal(dataBytes); } public static byte[] decrypt(byte[] keyBytes, byte[] ivBytes, byte[] dataBytes) throws Exception { Cipher cipher = Cipher.getInstance("AES/CBC/PKCS5Padding"); SecretKeySpec secretKey = new SecretKeySpec(keyBytes, "AES"); cipher.init(Cipher.DECRYPT_MODE, secretKey, new IvParameterSpec(ivBytes)); return cipher.doFinal(dataBytes); } public static void main(String[] args) throws Exception { String dataStr = "hello, world!"; byte[] keyBytes = "0123456789abcdef".getBytes(); byte[] ivBytes = "0123456789abcdef".getBytes(); byte[] dataBytes = dataStr.getBytes(); // 加密 byte[] encryptedBytes = encrypt(keyBytes, ivBytes, dataBytes); String encryptedStr = Base64.getEncoder().encodeToString(encryptedBytes); System.out.println(encryptedStr); // 解密 byte[] decryptedBytes = decrypt(keyBytes, ivBytes, encryptedBytes); String decryptedStr = new String(decryptedBytes); System.out.println(decryptedStr); } } ``` 希望这个答案能够帮助到你!

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值