Java编程:一维与二维数组的创建与使用

需积分: 5 0 下载量 184 浏览量 更新于2024-08-05 收藏 9KB MD 举报
"数组的创建和使用" 数组是编程中基础且重要的数据结构,它允许存储多个相同类型的数据。本章节将详细讲解一维和二维数组的创建、初始化以及使用。 ### 1. 一维数组的创建及使用 #### 1.1 创建一维数组 一维数组的创建有两种方式: 1. **先声明,再分配内存**: - 声明数组时,可以使用以下两种语法: ```java 数据类型 数组名[]; 如:String str[]; 数据类型[] 数组名; 如:int[] arr, arr1, arr2; ``` - 分配内存时,使用 `new` 运算符指定数组大小: ```java 数组名 = new 数据类型[数组元素的个数]; 如:arr = new int[5]; ``` 2. **声明并分配内存**: - 通过以下语法可以同时完成声明和内存分配: ```java 数据类型 数组名[] = new 数据类型[数组元素的个数]; 如:int arr[] = new int[5]; ``` #### 1.2 初始化一维数组 一维数组的初始化也有两种方式: 1. **显式初始化**: - 使用大括号 `{}` 将数组元素分开,系统会自动分配空间: ```java 数据类型 数组名[] = new 数据类型[]{元素1, 元素2, ..., 元素N}; 如:int arr[] = new int[]{1, 2, 3, 4, 5}; ``` 2. **隐式初始化**: - 如果数组元素在声明时给出,系统也会自动分配空间: ```java 数据类型 数组名[] = {元素1, 元素2, ..., 元素N}; 如:int arr[] = {1, 2, 3, 4, 5}; ``` #### 1.3 使用一维数组示例 以下代码创建了一个 `int` 类型的一维数组,用于存储每个月的天数,并输出到控制台: ```java public class GetDay { public static void main(String[] args) { int day[] = new int[]{31, 28, 31, 30, 31, 30, 31, 30, 31, 30, 31, 30, 31}; for (int i = 0; i < 12; i++) { System.out.println((i + 1) + "月有" + (day[i]) + "天"); } } } ``` ### 2. 二维数组的创建及使用 #### 2.1 创建二维数组 二维数组的创建同样有两种方法: 1. **先声明,再分配内存**: - 声明二维数组: ```java 数据类型 数组名[][]; 如:String str[][]; 数据类型[][] 数组名; 如:int[][] arr, arr1, arr2; ``` - 分配内存: ```java 数组名 = new 数据类型[行数][列数]; 如:arr = new int[5][6]; ``` 2. **声明并分配内存**: - 通过以下语法可同时声明和分配内存: ```java 数据类型 数组名[][] = new 数据类型[行数][列数]; 如:int arr[][] = new int[5][6]; ``` ### 2.2 使用二维数组 二维数组可以视为一维数组的数组,因此可以按照类似的方式访问和操作每个子数组。例如,要访问二维数组中的元素,可以使用两个下标,第一个下标表示行,第二个下标表示列。 例如,创建一个二维数组表示矩阵,然后输出矩阵的所有元素: ```java public class PrintMatrix { public static void main(String[] args) { int matrix[][] = new int[3][3]; // 初始化矩阵 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { matrix[i][j] = i * 3 + j + 1; } } // 打印矩阵 for (int i = 0; i < 3; i++) { for (int j = 0; j < 3; j++) { System.out.print(matrix[i][j] + " "); } System.out.println(); } } } ``` 以上内容详细介绍了如何在Java中创建和使用一维及二维数组,包括声明、初始化和实际应用。掌握这些基础知识对于进行更复杂的编程任务至关重要。
2023-06-03 上传

c语言 检查一下下面的代码 为什么函数中获取不到键值#include <stdio.h> #include <stdlib.h> #include <unistd.h> #include <string.h> #include <sys/socket.h> #include <arpa/inet.h> #include <openssl/ssl.h> #include <openssl/err.h> #include <openssl/hmac.h> #include <jansson.h> #include <time.h> #include <errno.h> #include <resolv.h> #include <netdb.h> char* calculate_signature(char* json_str, char* key) { json_t *root; json_error_t error; /* 从文件中读取 JSON 数据 */ root = json_load_file(json_str, 0, &error); /* 遍历 JSON 对象中的所有键值对,并获取键的名称 */ int key_count = json_object_size(root); printf("key_names %d\n", key_count); const char *key_name; json_t *value; const char **key_names = (const char **)malloc(key_count * sizeof(char *)); int i = 0; json_object_foreach(root, key_name, value) { key_name = json_object_iter_key(value); key_names[i] = key_name; i++; } printf("key_names %s\n", key_names[2]); //int str_num = i; // 计算字符串数组中的字符串数量 /* char **sorted_names = sort_strings(key_names, key_count); char* stringA = (char*)malloc(1); // 初始化为一个空字符串 stringA[0] = '\0'; size_t len = 0; for (int i = 0; i < str_num; i++) { char* key = sorted_names[i]; json_t* value = json_object_get(root, key); char* str = json_dumps(value, JSON_ENCODE_ANY | JSON_COMPACT); len += strlen(key) + strlen(str) + 2; // 2 是键值对之间的字符 stringA = (char*)realloc(stringA, len); strcat(stringA, key); strcat(stringA, "="); strcat(stringA, str); strcat(stringA, "&"); free(str); } free(sorted_names); stringA[strlen(stringA) - 1] = '\0'; // 去掉最后一个"&" printf("stringA%s\n", stringA); unsigned char* sign = (unsigned char*)malloc(EVP_MAX_MD_SIZE); unsigned int sign_len = 0; HMAC(EVP_sha256(), key, strlen(key), (unsigned char*)stringA, strlen(stringA), sign, &sign_len); // 计算HMAC-SHA256签名 char* signature = (char*)malloc(sign_len * 2 + 1); // 签名的十六进制表示 signature[0] = '\0'; // 初始化为一个空字符串 for (int i = 0; i < sign_len; i++) { sprintf(signature + i * 2, "%02x", sign[i]); } json_object_set_new(root, "sign", json_string(signature)); // 在json中添加"sign"参数 json_dumpf(root, stdout, JSON_ENCODE_ANY | JSON_COMPACT); // 输出带有"sign"参数的json字符串 json_decref(root); free(key_names); free(stringA); free(sign); printf("signature%s\n", signature); */ return("A"); } int main() { char *key="39cabdfaab8c4da09bd6e9823c527836"; char *sss="{\"timestamp\":1685509898,\"sdkVersion\":\"1.0.30_1\",\"vin\":\"LJUBMSA24PKFFF198\"}"; calculate_signature(sss, key) ; }

2023-06-01 上传