• Java中的数组


     
    数组是在内存中存储相同数据类型的连续的空间
    声明一个数组就是在内存空间中划出一串连续的空间
     
    数组名代表的是连续空间的首地址
    通过首地址可以依次访问数组所有元素
    元素在数组中的排序叫做下标从零开始
     
     
    数组的使用
    数组长度一旦声明,不可改变不可追加
     
    声明一个int类型的数组      
        int[ ] arr;   或int arr[ ]
     
     
    给数组分配空间
         arr=new int[5];
     
     
    给数组赋值     
             arr[0]=1;      0代表的是数组的第1个元素 ,元素下标为0
     
             arr[1]=1;      1代表的是数组的第2个元素 ,元素下标为1   
     
     
     
    访问数组数据 ,使用数组下标访问       c=arr[4];
     
     
    数组声明缩写
    int[ ] arr={12,3,4,8,5,6,6,7,8,8,9,8};
    int [ ]  arr1=new int[ ]{12,3,4,8,5,6,6,4};
    new int[ ]的[ ]一定不能放内存大小
     
     
    使用循环给数组赋值
    示例为
       
     int[ ]  arr=new int[5];
         for (int i = 0; i < arr.length; i++) {
                System.out.println("数组第"+(i+1)+"个值为"+i);
             }
     
     
    使用循环遍历给数组赋值,输出数组
    实例为
     int[ ] arr={1,3,6,5,6,7,84,55,5};
      for (int num:arr) {
          System.out.println(num);
      }
     
    显示结果为

    数组中常用来排序的两种方法

    冒泡排序
    例子:
    public static void main(String[] args) {
     实现学生成绩排序并显示学生成绩列表
    int [   ] arr = {78,89,67,98,90,56,88};
    N个数的数组,需要比较N-1轮
    for(int i=0; i<arr.length; i++){
    for(int j=i; j<arr.length; j++){
                  if(arr[i]>arr[j]){
                           int temp = arr[j];
                           arr[j]  = arr[i];
                          arr[i] = temp;
                       }
                }
    }
    冒泡排序   升序排列
     
    for(int i=0; i<arr.length-1; i++){
              for(int j=0; j<arr.length-1-i; j++){
                       if(arr[j]>arr[j+1]){
                                  int temp = arr[j];
                                   arr[j]  = arr[j+1];
                                     arr[j+1] = temp;
                               }
                        }
                }

    二分法排序
     
     二分法查找
        int start = 0;                              // 默认起始坐标
        int end = arr.length-1;               // 默认结尾坐标
        int index = -1;                           // 找不到默认index为-1
        while(start<=end){
                     int middle = (start+end)/2;     // 计算中间下标
                     if(num == arr[middle]){
                                             index = middle;
                                             break;
                                                    }
                       if(num > arr[middle]){
                                           start = middle + 1;
                                                    }
                        if(num < arr[middle]){
                                        end = middle - 1;
                                                      }
        } System.out.println(index);
      }
    }
     
     下面是一些实例.
     
    ① 做一个购物清单,手动输入金额,输出是要显示总金额
     
     
    Scanner in=new Scanner( System.in);
      double sum=0;
      double[ ]  arr=new double[5];
      for (int i = 0; i < arr.length; i++) {
            System.out.print("请输入第"+(i+1)+"笔购物金额:");
            arr[i]=in.nextDouble();
            sum+=arr[i];
      }
    
       System.out.println("序号		 金额");
    
      for (int i = 0; i < arr.length; i++) {
           System.out.println((i+1)+"		"+arr[i]);
      }
        System.out.println("总金额:"+sum ); 
     }
     
     显示结果为
     ②输入四家店的价格,并找出最小价格
     
              
    Scanner in=new Scanner(System.in);
              int[] arr=new int[4]; 
              System.out.println("请输入四家店的价格");
              for (int i = 0; i <4; i++) {
           System.out.print("第"+(i+1)+"店的价格为:");
           arr[i]=in.nextInt();
         }  
             for (int j = 0; j < arr.length-1; j++) {
              if (arr[j]<arr[j+1]) {
                 arr[j+1]=arr[j];
           }else {
              arr[j+1]=arr[j+1];
           }   
     }System.out.println("最低价格是:"+arr[3]);
    }
    显示结果为
     

    ③将一个数组从小到大排列

     
     int[]  arr={56,45,99,82,91,81};
           int max;
           int  m;
           for (int i = 0; i < arr.length-1; i++) {
            for (int j = 0; j < arr.length-1-i; j++) {
              if (arr[j]>arr[j+1]) {
             int temp=arr[j];
             arr[j]=arr[j+1];
             arr[j+1]=temp;
               }
              }
           }
           for (int a: arr) {
          System.out.println(a); 
          
             }
       }
    }
     显示结果为

    ④输入一个数字,在数组中查找,若有输出下标,若没有输出-1

     
    Scanner in=new Scanner(System.in);
      int[] arr={12,34,46,68,32,35,75,48,25}; 
      System.out.println("输入一个数字");
      int sz=in.nextInt();
      for (int i = 0; i < arr.length; i++) {
       if (sz==arr[i]) {
        System.out.println("数字下标为"+i);
        return;
       }
      }
      
      System.out.println("-1");
     显示结果为
     

     ⑤编写JAVA程序,实现两个数组的合并,并按升序排列合并后的数组
           假定现有两个数组,分别为:
            int[ ] arr1={3, 1, 23};
            int[ ] arr2={27, 7, 2};
           设计程序,将两个数组合并成一个数组,并按升序排列合并后的数组,输出合并前和合并后的数组信息
         
        
        
           int[ ] arr1 = {3, 1, 23};
           int[ ] arr2 = {27, 7, 2};
        
    
         int[ ] arr = new int[arr1.length+arr2.length];    // 1. 声明一个数组,长度等于两个数组的长度和
        
      
        for(int i=0; i<arr1.length; i++){                         // 2. 遍历两个数组
         arr[i] = arr1[i];
        }
        for(int i=0; i<arr2.length; i++){
         arr[arr1.length+i] = arr2[i];
        }
        
        
        for(int i=0;  i <arr.length-1;  i++){                       // 3. 对新数组排序
         for(int j=0;  j <arr.length-1-i;  j++){
          if( arr [ j ]>arr[ j+1 ]){
           int temp  =  arr[ j ];
           arr [ j ]  =  arr[ j+1 ];
           arr[ j+1 ] =  temp;
          }
         }
        }
        
        System.out.println(Arrays.toString(arr));
        
     
    显示结果为
     
    ⑥用数组,判断一个数字,是不是回文数。
                  
     System.out.print("请输入一个数组:");
                   Scanner in = new Scanner(System.in);
                   long num =  in.nextLong();
                   long old = num;                // 暂存num
                   
                                                                                 
                   int count = 0;                   // num有几位,定义一个几位的数组。  求出num的位数
                   while(num>0){
                    num /= 10;
                    count++;
                   }
                   int[] arr = new int[count];
                   
                
                   count = 0;                  // 不断取出数字的每一位,依次放入数组中
                   while(old>0){
                    arr[count] = (int)old % 10;
                    old /= 10;
                    count ++;
                   }
                   
                 
                   for(int i=0,j=arr.length-1; i<=j ; i++,j--){ // 依次比较数组的首尾。 有任意一位不相等,就不是回文数
                    if(arr[i] != arr[j]){
                     System.out.println("不是回文数");
                     return;
                    }
                   }
                   
                   System.out.println("是回文数");

                   
                   显示结果为

    ⑦      输入数组,最大的与第一个元素交换,最小的与最后一个元素交换,输出数组
      

     //            Scanner in=new Scanner(System.in);             //设置输入数组
    //            int [] arr;
    //            System.out.println("输入数组");
    //            for (int i = 0; i < arr.length; i++) {
    //               int arr[i]=in.nextInt();
     
       
      int [   ] arr = {5,3,7,1,0,6,9,2};
      
      
      int max = arr[0] , maxIndex = 0;           // 找出最大元素的下标
      for(int i=0; i<arr.length; i++){
         if(max < arr[i]){
          max = arr[i];
          maxIndex = i;
         }
      }
      if( maxIndex != 0 ){
         int temp = arr[0];
         arr[0] = arr[maxIndex];
         arr[maxIndex] = temp;
      }
    
     
      int min = arr[0] , minIndex = 0;            //找出最小元素的下标
      for(int i=0; i<arr.length; i++){
       if(min > arr[i]){
          min = arr[i];
          minIndex = i;
       }
      }
      if(minIndex != (arr.length-1)){
         int temp = arr[arr.length-1];
         arr[arr.length-1] = arr[minIndex];
         arr[minIndex] = temp;
      }
     
      System.out.println(Arrays.toString(arr));
     }

             显示结果为
        

  • 相关阅读:
    【模拟】Gym
    【二分】【半平面交】Gym
    【凸包】【三分】Gym
    【字符串哈希】【哈希表】Aizu
    【思路】Aizu
    【树状数组】Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals) C. DNA Evolution
    【构造】Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals) B. High Load
    【贪心】Codeforces Round #423 (Div. 1, rated, based on VK Cup Finals) A. String Reconstruction
    【模拟退火】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem F. Factory
    【动态规划】【二分】Petrozavodsk Winter Training Camp 2017 Day 1: Jagiellonian U Contest, Monday, January 30, 2017 Problem B. Dissertation
  • 原文地址:https://www.cnblogs.com/fylong/p/8677804.html
Copyright © 2020-2023  润新知