一、数组
1.数组的定义及元素数量
数组是指一组类型相同的连续的存储空间的表现形势,其元素的数量为0~N(N的最大值取决于内存)
2.优缺点
遍历快,但是插入与删除慢
3.使用
int[] array = new int[n]; //声明及分配空间 空间最大值为array.length - 1 ;
n的值若超出了有效空间将会报错: java.lang.ArrayIndexOutOfBoundException
4.增强型for循环——完全遍历
for(int t : array ){}
t为数组array中依次从最小下标0开始取出值副本
5.各种数据类型在数组中的默认初值
char:(char)0 String:null
byte/short/int/long:0
float/double:0.0
boolean:false
二、数组中数值的插入
//声明规定数组如下,控制台输入一个整数,并将该整数插入到数组中,并保证数组依然有序,数组为{3,7,11,20,35,0}
问题分析:
1)控制台输入整数,需要进行导包;
2)对于一个有序的已知值的数组,插入一个未知大小的数,需要将其与数组内的数进行大小对比;
3)采用从右到左的判断方式,找到比它小的数,并插在其右边,而比它大的数则需要全部右移。
代码分析:
导包之后从控制台获取值;
对数组进行声明、分配空间与赋值,三步骤可以合并起来写;
假设在数组下标为 i时可以找到第一个比输入值小的值,需要将其插在它右边,因此输入值右边的数全部需要右移,而 i+1即为插入的下标,完全遍历后可以得到插入后的数组。
代码:
import java.util.Scanner;
public class Array {
public static void main(String[] args) {
int[] array = {3,7,11,20,35,0};
Scanner input = new Scanner(System.in);
System.out.println("输入插入元素:");
int t = input.nextInt();
int i = array.length-2;
for (;i>=0;i--){
if (array[i]>t){
array[i+1] = array[i];
}else {
break;
}
}
array[i+1] = t;
for (int g : array) {
System.out.println(g);
}
}
}
三、删除数组中与输入值相同的数
//声明规定数组如下,控制台输入一个整数,并将其与数组中的数作比较,若有与其相同的值,则删除数组中的数,数组为{10,20,30,40,50}
问题分析:
1)第一步与前面插入相同,都需要控制台输入一个数;
2)删除可以由左向右判断,找到与其相同的数,则用后面的数值覆盖前面的数,并将最后一位赋值为0既可;
3)若没找到与数组中相同的数,则会出现越界的情况。
代码分析:
第一步同样是通过控制台获取值,对数组进行声明、分配空间与赋值;
从左边下标0开始判断,若出现相同的值则退出循环,若没有相同值,则会出现越界的情况;
若存在相同的值,且确定位置在i时,则需要将i~length-1的值全部向左覆盖,将最后一个值赋值为0;
代码:
import java.util.Scanner;
public class Array {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
int[] array = {10,20,30,40,50};
System.out.println("请输入一个可能相同的值:");
int val = input.nextInt();
int i =0;
for (; i < array.length; i++) {
if (array[i]==val){
break;
}
}
if (i==array.length){
System.out.println(val+"不存在");
}else {
for (int j = i;j<array.length-1;j++){
array[j] = array[j+1];
}
array[array.length-1] = 0;
}
for (int g : array) {
System.out.println(g);
}
}
}