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


    一、数组

    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);
    }
    }
    }
  • 相关阅读:
    PAT 1053 住房空置率
    PAT 1078 字符串压缩与解压
    PAT 1024 科学计数法
    HDU 2078 复习时间
    HDU 2065 "红色病毒"问题
    网络协议分析
    多线程同步
    多线程程序设计
    消息队列通讯
    共享内存通讯
  • 原文地址:https://www.cnblogs.com/afeiiii/p/12936249.html
Copyright © 2020-2023  润新知