11:java学习笔记:1D array(1维数组)
11.1array是什么
array是线性排列的数据容器,用来存储一组同一类型的数据元素。数组会大量的简化一些繁杂的代码。
11.2 怎么样创建与初始化数组
11.2.1 创建一个数组
public class l1 {public static void main(String[] args) {// TODO Auto-generated method stubint [] nums = new int[5];}}
这样子,创建了一个数组,这个数组是[0,0,0,0,0,0] 因为没有任何初始化的条件,没有任何值放进去,所以它没有任何值。
11.2.2初始化数组
public class l1 {public static void main(String[] args) {// TODO Auto-generated method stubint [] nums = new int[5];nums[0] =10;nums[1]=20;nums[2]=30;}}
初步赋值,有两个方式第一个就是多步骤的,因为在数组中每一个数字都有一个下标,原来的数组是[0,0,0,0,0]那么第一个的下标是0,所以需要赋值的话,使用 nums[0]=10;那么第零个下标的数字(也就是第一个数字)就变成10,那么经过这个代码之后,数组变成了[10,20,30,0,0]了。
第二种方法,在创建的时候直接初始化
public class l1 {public static void main(String[] args) {// TODO Auto-generated method stubint [] nums = {10,20,30,40,50};}}
那么这样的话,这个数组被创建出来的时候就是10,20,30,40,50这几个数字了。
所以这个数组是这样的
下标是一个非常容易错的点。在数组中,第一个数字的下标是0!
还有其他类型的 比如说double,int 等等都是可以有数组的,所以如果是double就变成小数就行。
11.3 怎么样使用(CRUD原则)
11.3.1什么是CRUD原则
C= Create(增)
R = Read(查)
U = Update(改变/更新)
D = Delete(删)
在中文中,更多说的是 增删改查
在一维数组中呢,一般长度已经设定好了,在一开始的时候已经设定好了,所以一般不太去改变,如果想要改变,一般使用动态数组(arraylist),而不是一维数组.(当然想要改变当然也是可以的,不常用,也很麻烦,你想要改变数组长度,直接使用arraylist就行)
所以增和删在1D array中都不太常见。
11.3.1.1 改
在一个数组中 如何改变一个array的数字,其实很简单。
public class l1 {public static void main(String[] args) {// TODO Auto-generated method stubint [] nums = {10,20,30,40,50};nums[1]=25;}}
在1这个小标这里,变成了25。
那么下标为1的就改变了,(也就是第二个数字被改变了)
11.3.1.2 查
11.3.1.2.1 基本查询
基本查询,想要知道,下标为1现在到底是什么数字了,
public class l1 {public static void main(String[] args) {// TODO Auto-generated method stubint [] nums = {10,20,30,40,50};nums[1]=25;System.out.println(nums[1]);}}
那么输出是
那么输出就是25,下标为1就改成了25了。
11.3.1.2.2 长度查询
长度在一开始其实就知道了,但是如果想要知道长度,打印出来长度的话,可以使用length
public class l1 {public static void main(String[] args) {// TODO Auto-generated method stubint [] nums = {10,20,30,40,50};nums[1]=25;System.out.println(nums[1]);System.out.println(nums.length);}}
那么打印出来的结果
上面那个就是下标为1的数字,下面那个就是数组的长度
11.3.1.2.3遍历
遍历数组,是非常重要的一个代码
因为如果想要知道数字所有的数字,并且进行处理,(比较大小啊,算平均数啊 算众数啊等等)必须让数组的数字拿出来,摆在台面上,进行处理,如果直接输出,会导致有乱七八糟的东西出现
public class l1 {public static void main(String[] args) {// TODO Auto-generated method stubint [] nums = {10,20,30,40,50};nums[1]=25;System.out.println(nums[1]);System.out.println(nums);}}
输出就是
就是一个乱码,(不用理解!! [代表的是 数组 I 是int的含义说明之前的是一个int的数组 @分隔符 28a418fc指的是哈希值)
所以这个不能满足我们的想法,所以需要改变,在之前写了 说把所有数字带到台面上,这个其实是循环的结构的特性(if条件语句是分类讨论,循环语句是把所有情况一个一个放在台面上 然后处理)
for循环
public class l1 {public static void main(String[] args) {// TODO Auto-generated method stubint [] nums = {10,20,30,40,50};nums[1]=25;System.out.println(nums[1]);for(int i = 0;i< nums.length;i++) {System.out.println("nums这个列表是 " + nums[i]);}}}
那么这个就是for循环遍历了一遍列表
所以这个就打印出来了 数字 之后在题目中就可以应用了
推荐的是使用for-each增强方法(使用一个num来接住nums所有放在台面的数字 然后一一打印出来)
public class l1 {public static void main(String[] args) {// TODO Auto-generated method stubint [] nums = {10,20,30,40,50};nums[1]=25;int sum = 0;System.out.println(nums[1]);for(int i = 0;i< nums.length;i++) {System.out.println("nums这个列表是 " + nums[i]);}for(int num :nums) {System.out.println(num);sum+=num;}System.out.println(sum);}}
同样我用来方法 写了sum 和的方法。
11.4在function中的使用
array(数组)本质上是一个数据类型,和int,double,string一样的,所以在方法中涉及到其他数据类型的,数组也有
11.4.1数组作为参数
public class l1 {public static void sum(int [] nums) {int sum = 0;for(int num :nums) {System.out.println(num);sum+=num;}System.out.println(sum);}public static void main(String[] args) {// TODO Auto-generated method stubint [] nums = {10,20,30,40,50};nums[1]=25;System.out.println(nums[1]);for(int i = 0;i< nums.length;i++) {System.out.println("nums这个列表是 " + nums[i]);}sum(nums);}}
在sum()方法中带有参数,同样我使用了sum作为一个容器的方法,所以通过for-each增强来循环与加在一起,最后就是答案。
11.4.2数组作为返回值
int,double等等都能作为返回值,数组也行
public class l1 {public static void sum(int [] nums) {int sum = 0;for(int num :nums) {System.out.println(num);sum+=num;}System.out.println(sum);}public static int[] getArray() {int[] arr = {1, 2, 3, 4};return arr;}public static void main(String[] args) {// TODO Auto-generated method stubint [] nums = {10,20,30,40,50};nums[1]=25;System.out.println(nums[1]);for(int i = 0;i< nums.length;i++) {System.out.println("nums这个列表是 " + nums[i]);}sum(nums);}}
也是成立的,但之后需要使用for增强语句把数组中的数字一个一个打印出来
11.5基本的例题
11.5.1求平均数
public class l1 {public static void average(int [] nums) {int sum = 0;for(int num :nums) {System.out.println(num);sum+=num;}System.out.println(sum);System.out.println(sum/nums.length);}public static void main(String[] args) {// TODO Auto-generated method stubint [] nums = {10,20,30,40,50};nums[1]=25;System.out.println(nums[1]);for(int i = 0;i< nums.length;i++) {System.out.println("nums这个列表是 " + nums[i]);}average(nums);}}
在方法中直接可以写,for增强循环之后,sum/nums.length(这个就是nums中有多少数字)所以除出来就是平均数
11.5.2 求最大值
本质上使用车轮战术就行,max定义为最小值,然后一一去对比
public class l1 {public static void average(int [] nums) {int sum = 0;for(int num :nums) {System.out.println(num);sum+=num;}System.out.println(sum);System.out.println(sum/nums.length);}public static void max(int [] nums) {int max = Integer.MIN_VALUE;for(int num : nums) {if(num>max) {max = num;}}System.out.println(max);}public static void main(String[] args) {// TODO Auto-generated method stubint [] nums = {10,20,30,40,50};nums[1]=25;System.out.println(nums[1]);for(int i = 0;i< nums.length;i++) {System.out.println("nums这个列表是 " + nums[i]);}average(nums);max(nums);}}
结果就是