java循環結構、數組

數組

數組是是多個相同類型數據按一定順序排列的集合,並使用一個名字命名,並通過編號的方式對這些數據進行統一管理。

  • 數組本身是引用數據類型,既可以存儲基本數據類型,也可以存儲引用數據類型。它的元素相當於類的成員變數。
  • 創建數組對象會在記憶體中開闢一整塊連續的空間,而數組名中引用的是這塊連續空間的首地址。
  • 數組的長度一旦確定,就不能修改
  • 通過下標(或索引)的方式調用指定位置的元素。
  • 數組的分類:
    按照維度:一維數組、二維數組、三維數組、…
    按照元素的數據類型分:基本數據類型元素的數組、引用數據類型元素的數組(即對象數組)

 

從六方面理解數組:

  1. 一維(二維)數組的聲明和初始化
  2. 如何調用數組指定位置的元素
  3. 如何獲取數組的長度
  4. 如何遍曆數組
  5. 數組元素的默認初始化值
  6. 數組的記憶體解析

 

一維數組的使用


 格式:type var[] 或 type[] var

1 //靜態初始化:數組的初始化與數組元素的賦值同時進行
2 int[] num = new int[]{1,2,3,4,5};
3 //動態初始化:數組的初始化與數組元素的賦值分開進行
4 String[] names = new String[5];
5 name[0] = "11";

**數組一旦初始化完成,數組的長度就確定了

每個數組都有一個屬性length指明它的長度,例如數組a: a.length指明數組a的長度(元素個數)

 

數組的默認初始化值


 對於基本數據類型:默認初始化值各有不同

對於引用數據類型:默認初始化值為null(注意:於0不同)

 

 

 

 

/*從鍵盤讀入學生成績,找出最高分,
並輸出學生成績等級。
成績>=最高分-10 等級為』A』 
成績>=最高分-20 等級為』B』
成績>=最高分-30 等級為』C』 
其餘 等級為』D』
提示:先讀入學生人數,根據人數創建int數組,
存放學生成績。*/

import java.util.Scanner;//在最上面

public class ArrayTest1 {
    public static void main(String[] args) {
        //調用Scanner輸入學生的成績
        Scanner scan = new Scanner(System.in);
        System.out.println("請輸入學生的人數:");
        int number = scan.nextInt();
        
        //創建數組,存儲學生的成績。動態初始化
        int[] score = new int[number];
        int maxscore = 0;
        //將學生的成績賦值給數組
        System.out.println("請輸入"+ number +"個學生成績");
        for(int i=0 ; i<score.length ; i++){
            score[i] = scan.nextInt();
            //直接在遍歷賦值時進行最大值的計算
            if(maxscore <= score[i]){
                maxscore = score[i];
            }
        }
        
        //獲取數組中的最大值
        /*int maxscore = 0;
        for(int i=0;i<score.length;i++){
            if(maxscore < score[i]){
                maxscore = score[i];
            }
        }*/
        
        //遍曆數組,計算學生的成績,並且輸出等級
        char level;
        for(int i=0;i<score.length;i++){
            if(maxscore - score[i] <=10){
                level = 'A';
            }else if(maxscore - score[i] <=20){
                level = 'B';
            }else if(maxscore - score[i] <=30){
                level = 'C';
            }else{
                level = 'D';
            }
            
            System.out.println("student" + i +"score is"+score[i]+"grade is "+level);
        }
    }

}

 

多維數組的使用(二維)


 

 

 1 //都是正確的
 2 int[][] arr = new int[][]{{1,2},{2,3,4},{4,5,6}};
 3 
 4 int[] arr1[]  = new int[][]{{1,2},{2,3,4},{4,5,6}};
 5 
 6 int arr2[][] = new int[][]{{1,2},{2,3,4},{4,5,6}};
 7 
 8 int[][]  arr3 = {{1,2},{2,3,4},{4,5,6}};//類型推斷
 9 
10 int[][] arr4;
11 arr4 = {{1,2},{2,3,4},{4,5,6}};//錯誤的,無法識別數組的類型

 

數組的長度:

 

遍歷二維數組(雙層for循環)

for(int i = 0 ; i<arr.length ; i++) { 
     for(j = 0 ; j<arr[i].length ; j++) {
System.out.print(arr[i][j]+""); }
      System.out.println();

}

 

二維數組的使用

規定:二維數組分為外層數組的元素,內層數組的元素

int[][] arr = new int[4][3];
//外層元素:arr[0] 、arr[1]等
//內層元素:arr[0][0]等

//數組的默認值
int[][] arr = new int[4][3];
System.out.println(arr[0]);//輸出地址值,外層元素的初始化值,就是地址值
System.out.println(arr[0][1]);//0,記憶體元素的初始化值,與一維數組相同

int[][] arr = new int[4][];
System.out.println(arr[0]);
//無論是什麼類型的二維數組,後面一個沒有數值,都輸出null
System.out.println(arr[0][1]);//報錯

二維數組的記憶體解析

 

 數據的存儲結構:

線性表(一對一):順序表(例如:數組)、鏈表、棧、隊列

 樹形結構(一對多):二叉樹

圖形結構(多對多)

聲明:int[] x,y[]; 在給x,y變數賦值以後,以下選項允許通過編譯的是:
int[] x,y[];相當於 int[] x;與 int[] y[];

a ) x[0] = y; no   //x是一維的,y是二維的,x[0]就是int型的一個數
b) y[0] = x; yes
c) y[0][0] = x; no
d) x[0][0] = y; no
e) y[0][0] = x[0]; yes
f) x = y; no

 

Tags: