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("序號\t\t 金額");

  for (int i = 0; i < arr.length; i++) {
       System.out.println((i+1)+"\t\t"+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));
 }

 


         顯示結果為

 

    


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM