数组的学习——有序数组中插入及删除数值的问题分析

一、数组

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);
}
}
}

猜你喜欢

转载自www.cnblogs.com/afeiiii/p/12936249.html