Java数组的基本使用(超详细)
Posted 少冰九分糖
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java数组的基本使用(超详细)相关的知识,希望对你有一定的参考价值。
数组的基本使用
-
为什么需要数组
-
数组介绍
-
数组快速入门
-
比如,我们可以用数组来解决上一个问题。思路分析:
-
我们可以通过
cats[下标]
来访问数组的元素,下标是从0
开始编号的比如第一个元素就是cats[0]
,第2个元素就是cats[1]
, 依次类推 -
通过
for
就可以循环的访问 数组的元素/值
-
使用一个变量
totalWeight
将各个元素累积
double[] cats = 3, 5, 1, 3.4, 2, 50; double totalWeight = 0; for (int i = 0; i < cats.length; i++) System.out.println("第" + (i+1) + "个元素的值=" + cats[i]); totalWeight +=cats[i]; System.out.println("总体重=" + totalWeight + "平均体重=" + (totalWeight / cats.length)); 如果需要增加 鸡的个数时,只要改动数组就行,其他变量都不需要改动。
-
-
-
数组的定义
-
数据类型 数组名[]=new 数据类型[数组的长度]
-
数据类型 【】 变量名称 = new 数据类型【数组的长度】;
-
数据类型 【】 变量名称 = 字面值1,字面值2,字面值3…;
-
第一种创建数组,只是说数组能放入几个数据,没有给具体的值,第二种创建数组就给了值.第一种更有优势,更灵活
-
int[] arr1= ; //表示数组没有存放任何元素
-
int a=new int[5]; //创建一个数组,名字为a,存放5个int
-
int[] arr2=1,2,3,4,45,; //最后一个元素是可以多写一个逗号,但是不写更好
-
int arr3 [] =1,2,3,4,45; //【】是可以放在不同位置的,建议跟main中的String 【】 args保持一致
-
数组的下标从0开始
-
建议int[]中间不加空格
-
-
数组的使用
循环输入5个成绩,保存到double数组,并输出 double[] scores = new double[5]; Scanner sc = new Scanner(System.in); for (int i = 0; i < scores.length; i++) System.out.println("请输入第" + (i + 1) + "个元素的值"); scores[i] = sc.nextDouble(); System.out.println("==数组元素的输出情况:=="); for (int i = 0; i < 5; i++) System.out.println("请输入第" + (i + 1) + "个元素的值" + scores[i]);
-
动态初始化数组
-
细节
-
数组是多个相同类型数据的组合,实现对这些数据的统一管理
int[] arr1 = 1, 2, 3, 60,"hello"; //String ->int 类型不匹配 double[] arr2 = 1.1, 2.2, 3.3, 60.6, 100; //int ->doubl 可以通过,满足自动类型转换
-
数组中的元素可以是任何数据类型,包括基本类型和引用类型,但是不能混用。
String[] arr3 = "北京","jack","milan
-
数组创建后,如果没有赋值,只是声明了数组的长度,有默认值
int 0,short 0, byte 0, long 0, float 0.0,double 0.0, char \\u0000,boolean false,String null
-
使用数组的步骤: 1. 声明数组并开辟空间 2. 给数组各个元素赋值 3. 使用数组
-
数组下标必须在指定范围内使用,否则报:下标越界异常,比如
int [] arr=new int[5];
则有效下标为0-4
,即数组的的下标最小为0
,最大为数组长度-1
(5-1=4) -
数组属引用类型,数组型数据是对象(
object
)
-
-
数组的应用案例
-
创建一个 char 类型的 26 个元素的数组,分别 放置’A’-‘Z’。使用 for 循环访问所有元素并打印出来。
char[] chars = new char[26]; for( int i = 0; i < chars.length; i++) //循环26次 //chars 是 char[] //chars[i] 是 char chars[i] = (char)('A' + i); //'A' + i 是int , 需要强制转换 //循环输出 System.out.println("===chars数组==="); for( int i = 0; i < chars.length; i++) //循环26次 System.out.print(chars[i] + " ");
-
请求出一个数组 int[]的最大值 4,-1,9, 10,23,并得到对应的下标。
思路分析: 定义一个int数组 int[] arr = 4,-1,9, 10,23; 假定 max = arr[0] 是最大值 , maxIndex=0; 从下标 1 开始遍历arr, 如果max < 当前元素,说明max 不是真正的最大值, 我们就 max=当前元素; maxIndex=当前元素下标 当我们遍历这个数组arr后 , max就是真正的最大值,maxIndex最大值对应的下标
int[] arr = 4,-1,9,10,23; int max = arr[0];//假定第一个元素就是最大值 int maxIndex = 0; // for(int i = 1; i < arr.length; i++) //从下标 1 开始遍历arr if(max < arr[i]) //如果max < 当前元素 max = arr[i]; //把 max 设置成 当前元素 maxIndex = i; //当我们遍历这个数组arr后 , max就是真正的最大值,maxIndex最大值下标 System.out.println("max=" + max + " " + "maxIndex=" + maxIndex);
-
数组遍历输出:一次性把数组中所有的元素输出
public class TestArray02 public static void main(String[] args) String[] arr=new String[5]; arr[0]="刘备"; arr[1]="孙权"; arr[2]="曹操"; arr[3]="关羽"; arr[4]="宋江"; //数组中的元素一个一个输出: System.out.println(arr[0]); System.out.println(arr[1]); System.out.println(arr[2]); System.out.println(arr[3]); System.out.println(arr[4]); System.out.println("================================"); for(int i=0;i<arr.length;i++) System.out.println(arr[i]);
-
数组中存放的数据类型是自定义的类型(引用数据类型)
-
有一个学生类,学生类有一些属性,创建5个学生存放到数组中
public class Student private String name;//名字 private String stuID;//学号 private String hobby;//爱好 public String getName() return name; public void setName(String name) this.name = name; public String getStuID() return stuID; public void setStuID(String stuID) this.stuID = stuID; public String getHobby() return hobby; public void setHobby(String hobby) this.hobby = hobby; public Student(String name, String stuID, String hobby) this.name = name; this.stuID = stuID; this.hobby = hobby; public Student() //toString()方法 // @Override // public String toString() // return "Student" + // "名字='" + name + '\\'' + // ", 学号='" + stuID + '\\'' + // ", 爱好='" + hobby + '\\'' + // ''; // public class TestStudent public static void main(String[] args) Student s1=new Student("曹操","0x115","打仗"); Student s2=new Student("曹植","0x117","写诗"); Student s3=new Student("李白","0x118","喝酒"); Student s4=new Student("刘备","0x111","关羽"); Student s5=new Student("孙权","0x110","篮球"); //数据类型【】 数组名=值1,值2,值3; Student[] stus=s1,s2,s3,s4,s5; //遍历 //for循环,循环的都是下标 //最后一位的下标 是 length-1 System.out.println("----------------------"); System.out.println("|名字|\\t|学号|\\t|爱好|"); System.out.println("----------------------"); for(int i=0;i<stus.length;i++) Student stu=stus[i]; System.out.println("|"+stu.getName()+"|\\t"+"|"+stu.getStuID()+"|\\t"+"|"+stu.getHobby()+"|"); System.out.println("----------------------");
-
-
数组的可变长参数-----引用数据类型 ---- 数据类型【】
package arrayd1; public class Demo01 //方法 public String[] fun(String[] args) //System.out.println(args); // System.out.println(args[0]); for(int i=0;i<args.length;i++) args[i]=args[i]+"--范冰冰"; return args; public static void main(String[] args) Demo01 demo01 = new Demo01(); // demo01.fun(new String[10]); String[] arr="小明","肖坤","小刚"; String[] fun = demo01.fun(arr); for(int i=0;i<fun.length;i++) System.out.println(fun[i]);
package d1; public class Demo02 //... 省略号 public static void fun(int ... a) //地址 a是一个数组类型的 // System.out.println(a); // int[] a1 = a; int sum=0; for(int i=0;i<a.length;i++) sum+=a[i]; System.out.println(sum); public static void main(String[] args) fun(1,2,3,4,5);
干货丨Java算法之冒泡排序(超详细)
简单理解:
每次都从第一个元素开始(索引0),向后两两比较,只要后面的比前面的大,就交换(从大到小) 。
用最简单的代码实现冒泡排序对数组进行从大到小的顺序排列:
int[] array = {3,4,5,6,7};
第一趟排序比较的顺序:array[0]和array[1]比较,array[1]和array[2]比较,array[2]和array[3]比较,array[3]和array[4]比较
代码
public class BubbleSort {
public static void main(String[] args) {
//定义数组
int[] array = {3,4,5,6,7};
//从索引为0开始依次向后两两比较,总共比较4次
for(int i = 0;i<4;i++) {
if(array[i]
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
System.out.println("第一趟排序后:"+Arrays.toString(array));
}
}
运行结果
第一趟排序后:[4, 5, 6, 7, 3]
第二趟排序
比较的顺序:array[0]和array[1]比较,array[1]和array[2]比较,array[2]和array[3]比较
代码
在第一趟排序的BubbleSort类中,添加如下代码片段:
//从索引为0开始依次向后两两比较,总共比较3次
for(int i = 0;i<3;i++) {
if(array[i]
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
System.out.println("第二趟排序后:"+Arrays.toString(array));
运行结果
第二趟排序后:[5, 6, 7, 4, 3]
第三趟排序
比较的顺序:array[0]和array[1]比较,array[1]和array[2]比较
代码
在第二趟排序的BubbleSort类中,添加如下代码片段:
//从索引为0开始依次向后两两比较,总共比较2次
for(int i = 0;i<2;i++) {
if(array[i]
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
System.out.println("第三趟排序后:"+Arrays.toString(array));
运行结果
第三趟排序后:[6, 7, 5, 4, 3]
第四趟排序
比较的顺序:array[0]和array[1]比较
代码
在第三趟排序的BubbleSort类中,添加如下代码片段:
//从索引为0开始依次向后两两比较,总共比较1次
for(int i = 0;i<1;i++) {
if(array[i]
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
System.out.println("第四趟排序后:"+Arrays.toString(array));
运行结果
第四趟排序后:[7, 6, 5, 4, 3]
找出共性优化冒泡排序代码
以上代码,我们发现对于5个数字的排序我们用了简单的4个for循环就可以完成,而且每个for循环的内容都差不多,这样可以对以上4个for循环的内容进行变化,很容易看出里面的共性的内容,从而更方便的简化代码.每个for循环的初始化条件都是i=0,for循环中的内容都是相同的,只有结束条件不同。
第一个for的结束条件是<4;第二个for循环的结束条件<3;第三个for循环的结束条件<2;第四个for循环的结束条件<1;我们发现4正好是数组的长度-1,这样可以进行如下优化: 第一个for的结束条件是 。
(注意:其实最后减的数字可以不写的,写上是为了提高效率,但是前面的array.length-1中的-1不能省略,是为了防止索引越界异常,因为我们进行比较的时候,分别用i和i+1作为索引获取数组中的元素,所以要保证i和i+1都不能越界。)
代码
public class BubbleSort {
public static void main(String[] args) {
//定义数组
int[] array = {3,4,5,6,7};
//从索引为0开始依次向后两两比较
for(int i = 0;i
if(array[i]
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
System.out.println("第一趟排序后:"+Arrays.toString(array));
//从索引为0开始依次向后两两比较,总共比较3次
for(int i = 0;i
if(array[i]
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
System.out.println("第二趟排序后:"+Arrays.toString(array));
//从索引为0开始依次向后两两比较,总共比较2次
for(int i = 0;i
if(array[i]
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
System.out.println("第三趟排序后:"+Arrays.toString(array));
//从索引为0开始依次向后两两比较,总共比较1次
for(int i = 0;i
if(array[i]
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
System.out.println("第四趟排序后:"+Arrays.toString(array));
}
}
运行结果
第一趟排序后:[4, 5, 6, 7, 3]
第二趟排序后:[5, 6, 7, 4, 3]
第三趟排序后:[6, 7, 5, 4, 3]
第四趟排序后:[7, 6, 5, 4, 3]
冒泡排序的最终代码
以上4个for循环代码重复性较高,唯独不一样的地方就是每个for循环结束条件最后减的数字不同,第一个for循环结束条件减的数字是0,第二个for循环结束条件减的数字是1,第3个for循环结束条件减的数字是2,第4个for循环结束条件减的数字是3,这样可以写一个循环4次的for循环,假设循环变量为j,只要j的取值>=0开始到<4结束,正好能获取0,1,2,3的数字,然后把上面的任意一个for循环作为循环体,把该循环体中for循环的结束条件中最后减掉的数字用j替换掉即可。
发现5个数只需要排4趟,那么n个数需要排n-1趟,如果上面的循环中的变量j的范围固定写成<4,对于有6,7,...个数字的数组排序是不通用的,所以4可以使用数组的长度array.length-1 = 5-1 来表示。
代码
public class BubbleSort {
public static void main(String[] args) {
//定义数组
int[] array = {3,4,5,6,7};
System.out.println("排序前的内容:"+Arrays.toString(array));
for(int j = 0;j
//j:0,1,2,3
//i = 0:表示每次都从索引为0的开始,向后两两比较
for(int i = 0;i
//内层循环,每趟执行的次数,‐1为了防止索引越界,‐j为了提高效率
if(array[i]
int temp = array[i];
array[i] = array[i+1];
array[i+1] = temp;
}
}
}
System.out.println("排序后的内容:"+Arrays.toString(array));
}
}
运行结果
排序前的内容:[3, 4, 5, 6, 7]
排序后的内容:[7, 6, 5, 4, 3]
总结
1、冒泡排序的原理:每次都从第一个元素开始(索引0),向后两两比较,只要后面的比前面的大,就交换(从大到小)
2、通过画图分析,5个数字排4趟,n数字排n-1趟,而外层的for循环代表的是循环的趟数,所以外层循环的结束条件是array.length-1,但是写array.length代码也没有问题,比如5个数字在第4趟都已经排好了,再进行第5趟排序,也不会影响程序的结果。
3、内层循环变量的初始值写成int i =0,是为了保证每次都从第一个元素开始(索引为0)向后两两比较。
END
以上是关于Java数组的基本使用(超详细)的主要内容,如果未能解决你的问题,请参考以下文章