一维数组
为什么要使用数组: 因为不使用数组计算多个变量的时候太麻烦,不利于数据的处理。
数组是一个变量,用于存储相同数据类型的一组数据。
变量和数组的区别:
声明一个变量就是在内存空间划出一块合适的空间
声明一个数组就是在内存空间划出一串连续的空间
数组基本要素:
标识符–>数组名
数组元素 -->值
元素下标:从0开始
元素类型 -->类型
注意: 数组长度要固定不变,而且要避免数组越界
数组中的所有元素必须属于相同的数据类型
使用数组的四个步骤:
1、声明数组 int[ ] a; (a是这个数组的名称)
2、分配空间 a = new int[5]; (给这个数组分配5个int类型的空间)
3、赋值 a [0] = 8; (给数组的第一个元素赋值)
4、处理数据 a [0] = a[0] * 10;
数据类型 数组名[ ] ; ||数据类型[ ] 数组名 ; 方括号可以放在数据类型后,也可以放在数组名后。声明数组时不规定数组长度
如果觉得这些步骤太繁琐,我们可以边声明边赋值:int[ ] scores = {89, 79, 76};||int[ ] scores = new int[ ]{89, 79, 76};
举例:生成一个随机数组
public class Demo1 {
public static void main(String[] args) {
int[] arr;//单独声明
arr = new int[15];
for (int i = 0; i < arr.length; i++) {
arr[i] = (int) (Math.random() * 100);
}
System.out.println(Arrays.toString(arr));
}
}
结果如图:
结果生成了由15个元素所组成的随机数组,产生随机数需要使用Math.random()方法,该方法的值大于等于0并且小于1,所以在调用时要乘上整数倍,才能达到自己想要的随机数字。
举例:在数列中插入数值
public class Demo4 {
public static void main(String[] args) {
int[] a = {99, 85, 82, 63, 60};
int[] b = new int[a.length + 1];
for (int i = 0; i < a.length; i++) {
b[i]=a[i];
}
System.out.println(Arrays.toString(b));
int num=98;
boolean isInsert=false;
for (int i = b.length-2; i >=0; i--) {
if (b[i]<num){
b[i+1]=b[i];
}else {
isInsert=true;
b[i+1]=num;
break;
}
}
if(!isInsert){
b[0]=num;
}
System.out.println(Arrays.toString(b));
}
}
结果如图:
在数列中插入数值,我们需要再创建一个新的数列,这个新的数列要包含之前数列中的所有数,并且要比之前数列中的数更多。并且插入的数要跟之前数列的数比大小,从后向前比,比该数小的后移,找到比该数大的,则该数在大的后面插入,如果找不到比该数大的,则该数插入首位。
举例:选择排序
public class Demo7 {
public static void main(String[] args) {
int[] a=new int[10];
for (int i = 0; i < a.length; i++) {
a[i]=(int)(Math.random()*100);
}
System.out.println(Arrays.toString(a));
for (int i = 0; i < a.length-1; i++) {
for (int j = i+1; j < a.length; j++) {
if (a[i]>a[j]){
int tmp=a[i];
a[i]=a[j];
a[j]=tmp;
}
}
}
System.out.println(Arrays.toString(a));
}
}
结果如图:
生成的十个数按照从小到大的顺序排列好了,基本逻辑是首先在未排序序列中找到最小(大)元素,存放到排序序列的起始位置,然后,再从剩余未排序元素中继续寻找最小(大)元素,然后放到已排序序列的末尾。以此类推,直到所有元素均排序完毕。
举例:插入排序
public class Demo8 {
public static void main(String[] args) {
int[] a=new int[10];
for (int i = 0; i < a.length; i++) {
a[i]=(int)(Math.random()*100);
}
System.out.println(Arrays.toString(a));
for (int i = 1; i < a.length; i++) {
int tmp=a[i];
boolean isInsert=false;
for (int j = i-1; j >=0 ; j--) {
if (a[j]>tmp){
a[j+1]=a[j];
}else {
isInsert=true;
a[j+1]=tmp;
break;
}
}
if (!isInsert){
a[0]=tmp;
}
}
System.out.println(Arrays.toString(a));
}
}
结果如图:
插入排序的基本逻辑在基本上与插入数组的逻辑相同,只是在外层循环控制需要插入的数值和位置。