此文章主要记录本人自学Java的知识与心得,如果有误还请各位大佬多多指教,自学于哔哩哔哩平台的博主:黑马程序员.
简述
数组对于学过c语言的我来说还是非常熟悉的,但是结果学习之后,我感觉Java的数组之中包含了C语言所讲的指针,Java数组的使用让我有一种既麻烦又舒服的感觉,学完所有数组之后我决定在这里整理一下.
一维数组
一维数组的定义分为静态初始化和动态初始化,咱们先来说静态初始化
静态初始化的格式:
数据类型[] 数组名 = new 数据类型[]{元素1,元素2…};
int[] arr = new int[]{1,2,3,4,5};
这种初始化不管视在看起来还是写起来上都是比较麻烦的,所以还有一种更为便捷的格式
数据类型[] 数组名 = {元素1,元素2…};
这种简化后的格式看起来就方便多了
int[] arr = {1,2,3,4,5};
那么创建数组的方式我已经学会了,在我一开始的时候,我直接输出数组我发现了一个很奇怪的问题,他并不像C语言一样能够直接输出数组中的内容,而是输出了一堆乱码,经了解之后才知道这是这个数组的地址值.这里我简单拓展一下
double[] arr2 = {1.23,2.34,3.45,4.56,5.67};
System.out.println(arr2); //输出结果为[D@776ec8df (这是一个例子,每个人的输出地址可能不一样)
那么这个输出结果看起来像乱码的东西就是这个arr2数组的地址,简单看一下这个数组的地址值格式的含义
[ : 表示当前是一个数组
D:表示当前数组中的元素都是double类型的
@:表示一个间隔符号(就是英语里面的固定格式一样)
776ec8df:这串十六进制的数才是真正的地址值
平时习惯的叫法就是把这个整体都叫做地址值
我们上面提到了直接输出数组是一串地址值,那么我们怎么获取数组中的元素呢,看下面的例子
int[] arr = {1,2,3,4,5};
for(int i = 0 ;i < arr.length ; i++){ //利用一个for循环,arr.length是表示这个数组的长度
System.out.print(arr[i]); //利用for循环依次输出数组中的元素,其中println代表输出后换行,print输出表示不换行
}
通过这个例子之后我们技能看到,java数组的输出结果就是通过for循环依次输出数组中的元素进行输出,所以以后进行输出结果的时候要特定注意不能输出整个数组而是需要依次输出数组的各个元素进行一个完整的输出.
现在让我们了解一下动态初始化,首先是动态初始化的格式,他只用一种情况:
数据类型[] 数组名 = new 数据类型[数组的长度];
int[] arr = new int[5];
通过这样的定义之后我们可以通过键盘录入的方式向动态初始化的数组进行数值的录入.同样我们也是需要使用for循环一个一个的进行对数值内容的录入.
Scanner sc = new Scanner(System.in); //记得在类前面加上import java.util.Scanner;否则会无法从键盘录入
int[] arr = new int[5];
for(int i = 0; i < arr.length ; i ++){
int count = sc.nextInt(); //将从键盘录入的值,赋值给count项
arr[i] = count; //通过count项赋值给arr的每一项元素完成赋值
}
经过这样的操作我们就可以给这个数组赋上我们想要的五个值了.通过这个简单的案例我们就可以发现,动态初始化变量可以帮我们完成很多事情,比如一个班想要计算平均分,那么我们就可以通过动态初始化变量做出来一个数组,然后通过键盘录入进行赋值,我们在设定一个sum来计算总和最后除以arr.length就可以轻松的完成这个事情.接下来写一下这个案例
import java.util.Scanner;
public class avgTest {
public static void main(String[] args) {
//首先创建一个数组用来容纳分数
int[] price = new int[10];
//通过键盘录入我们可以把学生成绩进行录入
Scanner sc = new Scanner(System.in);
//创建for循环将每个学生的成绩录入
for (int i = 0; i < price.length; i++) {
System.out.println("请输入第"+(i+1)+"个学生的成绩");
price[i] = sc.nextInt();
}
//学生成绩录入之后我们需要进行一次求和
int sum = 0;
for (int i = 0; i < price.length; i++) {
sum += price[i];
}
//那到总成绩之后我们需要用总成绩除以总人数,也就是数组的长度
double avg = sum / price.length;
System.out.println("班级平均成绩为:"+avg);
}
}
运行结果
输入十名同学的成绩,点击回车就能够将平均值进行回馈,10个学生只是我随机写的一个数字
一维数组在实际应用中一定不会少,熟练掌握数组的使用方法会在后面的练习操作中如鱼得水.关于一维数组的介绍就到这里结束了.
二维数组
二维数组定义上和一维数组一样,分静态初始化和动态初始化
静态初始化的格式:
数据类型[][] 数组名= new 数据类型[][]{{元素1,元素2,元素3},{元素1,元素2,元素3}};
当然二维数组的初始化定义也有一种更为简洁的方式:
数据类型[][] 数组名={{元素1,元素2,元素3},{元素1,元素2,元素3}};
int[][] arr1 = new int[2][3]{ //这是不便捷的
{1,2,3}, //每个大括号后面要加逗号
{3,4,5} //最后一个除外
};
int[][] arr2 = { //这是便捷的
{1,2,3}, //同上
{3,4,5}
};
对于我来说我更喜欢第二种便捷的方式,感觉第一种的确实太过于麻烦.在学习过程中我了解到两个[]的含义第一个[]表示是放一维数组的个数,第二个[]是用于放每个一维数组中存放元素的最大个数.(是可以小的)
接下来就是动态初始化的二维数组了,它的格式如下:
数据类型[][] 数组名 = new 数据类型[一维数组的个数][一维数组中元素的最大值];
int[][] arr = new int[3][4];
二维数组的输出需要嵌套两个for循环以便输出每一个元素值
for (int i = 0; i < a.length; ++i) {
for(int j = 0; j < a[i].length; ++j) {
System.out.println(a[i][j]);
}
}
主要通过这种方式来对二维数组进行输出打印,这样会输出每一个元素值
二维数组自学中并没有做过多的相应的练习,主要是联系了对二维数组的一个输出的练习,后续可能会出相关于二维数组的实际练习应用.
此博客主要记录本人自学Java的过程以及对于各个代码的理解,如果有误还请各位大佬能够指出,本人初学Java所以在代码的理解地方可能有误,希望同样自学的朋友们也能多多担待,帮忙指出错误,