zoukankan      html  css  js  c++  java
  • 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));
     }

             显示结果为
        

  • 相关阅读:
    托付和事件的使用
    在使用supervisord 管理tomcat时遇到的小问题
    无法安装vmware tools的解决方PLEASE WAIT! VMware Tools is currently being installed on your system. Dependin
    (转)Openlayers 2.X加载高德地图
    (转)openlayers实现在线编辑
    (转) Arcgis for js加载百度地图
    (转)Arcgis for js加载天地图
    (转) 基于Arcgis for Js的web GIS数据在线采集简介
    (转) Arcgis for js之WKT和GEOMETRY的相互转换
    (转)Arcgis for Js之Graphiclayer扩展详解
  • 原文地址:https://www.cnblogs.com/fylong/p/8677804.html
Copyright © 2011-2022 走看看