数组的基本概念及其简单的应用

Ⅰ、一维数组
①变量概念:一种存储空间的表示
②数组概念:一组类型相同的连续的存储空间的表示
A. 优点
//1、类型相同:不用考虑类型
//2、连续:遍历
B.缺点
//1、类型相同:无法解决不同类型多个值的存储
//2、连续:插入,移除
C.使用数组四步骤
//1、声明 xxx[] arry;
//2、★分配空间 arry = new xxx[int LENGTH];
//3、赋值 arry[int INDEX] = VALUE;
//4、使用 System.out.println(arrty[int INDEX]);
D.数组的特征
//1、不可变
//2、长度固定:int len = arry.length;
//3、下标(索引):0~arry.length-1 :如果超出范围会报★异常
E.特殊语法
// 1+2+3 : xxx[] arry = {VALUE1,VALUE2,…};
int[] arr = {};
int[] arr2 = {5,7,9};
int[] arr3 = new int []{5,7,9};

Ⅱ、变量的作用域(生命周期)
A.{}
B.最小作用域原则

数组的基本概念

        //声明
        int[] arr;
        //分配空间
        arr = new int[5];
        //赋值
        arr[0]=5;
        arr[1]=15;
        arr[2]=8;
        arr[3]=11;
        arr[4]=7;
        //使用
        System.out.println(arr[4]);
        System.out.println(arr[3]);
        System.out.println(arr[2]);
        System.out.println(arr[1]);
        System.out.println(arr[0]);
创建长度为10,取值范围1~100的随机数
随机生成一个1~100之间的数值
检索该值是否存在于随机数组中
Random rand = new Random();
      int[] arr = new int[10];
      for(int i = 0;i<arr.length;i++){
          arr[i] =rand.nextInt(100)+1;
      }
      int num =rand.nextInt(100)+1;
      boolean has = false;
      for (int i = 0; i < arr.length; i++) {
          if(num ==arr[i]){
              has = true;
              break;
          }
      }
      for (int i = 0; i < arr.length; i++) {
          System.out.print(arr[i]+"\t");
      }
      System.out.println();
      System.out.println(num);
      System.out.println(has);
指定位置插入

利用下标与长度之间的关系

for (int i = arr.length-1; i>pos ; i--) {
    arr[i] = arr[i - 1];

完整代码如下:

char[] arr ={'f','e','a','g','k','m','x',(char)0};
    for (char c:arr){
        System.out.print(c+"\t");
    };
    char t = 'y';
    int pos = input.nextInt();
    //挪
    for (int i = arr.length-1; i>pos ; i--) {
        arr[i] = arr[i - 1];
    }
    //插
        arr[pos]=t;
    System.out.println("-----------");
    for(char c :arr){
        System.out.print(c+"\t");
    }
顺序插入

跟上一题不一样的点在于,多了输入值与数组内每一位数比大小。在for循环里利用下标的每次递减使数组的每位数都能与输入值进行比较。i从length-2开始,知道遇到第一个比它小的数结束。

char[] arr2 = {'b','d','f','i','k','m','x',(char)0};
      for (char c : arr2) {
          System.out.print(c + "\t");
      }
      char t2 = input.next().charAt(0);
      //找位置,挪
      int i = arr2.length - 2;
      for (; i >= 0; i--) {
          if (t2 >= arr2[i]) {
              break;
          }
          arr2[i + 1] = arr2[i];
      }
          arr2[i + 1] = t2;
          for (char c : arr2) {
              System.out.print(c + "\t");

          }
斐波那契数列的for循环结构
方法一:简单for循环
  斐波那契数列前200, 1, 1, 2, 3, 5, 8, 13int x=0, y=1,t;
            System.out.print(x+"\t"+y+"\t");
            for(int i =1; i<=18;i++){
                t =x+y;
                System.out.print(t+"\t");
                x=y;
                y=t;
            }
方法二:数组+for循环
      用一维数组完成斐波那契数列前10int[] num = new int[10];
       num[0] =0 ;
       num[1] =1;
       System.out.print(num[0]+ "\t"+num[1]+ "\t");
       for (int i = 2; i < 10; i++) {
           num[i]=num[i-1]+num[i-2];
           System.out.print(num[i]+"\t");
       }

随机生成30个1~1000的随机数,求最大值,最小值,平均值
int max,min,avg,total=0;
       Random rand = new Random();
       int[] arr = new int[30];
       for(int i = 0;i<arr.length;i++){
          arr[i] =rand.nextInt(1000)+1;
      }
       for (int i : arr) {
           System.out.print(i + "\t");
      }
       max=arr[0];min=arr[0];
       for(int j = 0;j<arr.length;j++){
           total +=arr[j];
         if(arr[j]>=max){
             max=arr[j];
         }
         if(arr[j]<=min){
             min=arr[j];
         }
     }
     avg=total/arr.length;
     System.out.println(MessageFormat.format("\n"+"最大值{0},最小值{1},平均数{2}",max,min,avg));

假设数组中的第一个数为中位数,找到其下标
    int[] arr = {8,9,6,12,14,5,2};
        for(int c:arr){
            System.out.print(c+"\t");
        }
        System.out.println();
        int begin=0,end=arr.length-1,mid=arr[0],t;
        while(begin<end){
            if(arr[end]>=mid) end--;
            else {
                if(arr[begin]<=mid) begin++;
               else {
                t = arr[begin];
                arr[begin] = arr[end];
                arr[end]=t;
                }
            }
        }
        if(begin!=0){
            arr[0]=arr[begin];
            arr[begin]=mid;
        }
        for (int c:arr){
            System.out.print(c+"\t");
        };
        System.out.println();
        System.out.println("中位数为"+mid+"它的下标为"+begin);

这道题的难点在于:要理解并掌握挪换的方法
挪换方法为:
①设定第一个数为中位数mid;
②先把mid与最后一个数进行比较。比较原则:如果end>mid,就往前挪移一个数,再比较
③再把mid与第二个数进行比较。比较原则:如果begin<mid,就往后挪移一个数,再比较
④如果 end<=mid && begin>=mid 则:两者对调。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值