官术网_书友最值得收藏!

3.3.2 二維數組

3.3.1小節的數組容納的是一串數字,仿佛一根線把這組數字串了起來,故而它只是一維數組。一維數組用來表示簡單的數列尚可,要是表示復雜的平面坐標系,就力不從心了。

由于平面坐標系存在水平和垂直兩個方向,因此可用二維數組來保存平面坐標系上的一組坐標頂點,其中第一維是頂點隊列,第二維是頂點的橫縱坐標。許多個平面組合起來變成一個動畫,每個平面都構成動畫的一個幀,這樣就形成了三維數組。二維數組、三維數組,乃至更多維度的數組統稱為多維數組。多維數組全由一維數組擴展而來,它們的用法大同小異,因而只要學會如何使用二維數組,即可舉一反三運用其他多維數組。下面就以二維數組為例,統一介紹多維數組的常見用法。

如同一維數組那樣,二維數組也有兩種聲明形式:一種是在變量名稱后面添加兩對方括號,例如“double triangle[][]”;另一種是在類型后面添加兩對方括號,例如“double[][] triangle”。前述的二維數組triangle表示平面坐標系上的三角形,其中第一對方括號表示這個三角形有幾個頂點,第二對方括號表示每個頂點由幾個坐標方向構成。

給二維數組分配存儲空間有3種方式,分別說明如下:

(1)利用語句“new變量類型[頂點數量][方向數量]”分配空間,比如三角形triangle有3個頂點,每個頂點由橫縱兩個坐標方向組成,則可通過下面這行語句實現:

        // 在兩對方括號內分別填入數字,表示數組有多少行多少列
        triangle=new double[3][2];

(2)在分配存儲空間的時候立即對數組初始化賦值,此時方括號中間不填數字,而在方括號后面添加花括號,并且花括號內部是以逗號分隔的幾個一維數組。此時初始化賦值的代碼如下:

        // 方括號內留空,然后緊跟花括號,花括號內部是以逗號分隔的幾個一維數組
        double[][] triangle=new double[][]{
                new double[]{-2.0, 0.0},
                new double[]{0.0, -1.0},
                new double[]{2.0, 1.0}
        };

(3)上面的第二種寫法實在啰唆,完全可以參照一維數組的簡化寫法,把多余的“new double***”統統去掉,于是整個初始化代碼精簡如下:

        // 賦值等號右邊直接跟著花括號,花括號又內嵌好幾個花括號,分別表示對應的一維數組
        double[][] triangle={ {-2.0, 0.0}, {0.0, -1.0}, {2.0, 1.0} };

以上的賦值等號右邊直接跟著花括號,花括號里面又有3組花括號,每組花括號分別容納兩個數字。這便告訴編譯器:該二維數組需要分配3個頂點,并且每個頂點都有兩個坐標方向。

若要獲取二維數組里面的某個元素,則可采取“數組名稱[元素行號][元素列號]”的形式,表示當前操作的是第幾行第幾列的數組元素。與一維數組不同的是,對于二維數組來說,“數組名稱.length”不能獲取所有元素的數量,而是獲取該數組的行數;要想獲取某行的列數,則需通過“triangle[行號].length”來得到。把所有行的列數累加起來,才能求得該二維數組的元素個數。

下面是聲明一個浮點型的二維數組,并對每個數組元素賦值,最后遍歷打印各元素的代碼例子(完整代碼見本章源碼的src\com\control\array\TwoDimensional.java):

    // 以下是聲明二維數組的第一種形式:“變量類型 數組名稱[][]”
    double triangle[][];
    // 以下是分配二維數組空間的第一種形式:在兩對方括號內分別填入數字,表示數組有幾行幾列
    triangle=new double[3][2];
    // 數組名稱后面的“[數字][數字]”為數組元素的行列下標,表示當前操作第幾行第幾列的元素
    triangle[0][0]=-2.0;
    triangle[0][1]=0.0;
    triangle[1][0]=0.0;
    triangle[1][1]=-1.0;
    triangle[2][0]=2.0;
    triangle[2][1]=1.0;
    // 通過循環語句依次讀出數組中的所有元素。 “二維數組名稱.length”表示獲取該數組的行數
    for (int i=0; i<triangle.length; i++) {
        // “triangle[i].length”表示獲取該數組第i行的列數
        for (int j=0; j<triangle[i].length; j++) {
            // 打印第i行第j列的數組元素
            System.out.println("triangle["+i+"]["+j+"]="+triangle[i][j]);
        }
    }

上述示例代碼中的二維數組存放著平面坐標系上的3個頂點,它們的坐標分別是(-2.0, 0.0)、(0.0, -1.0)、(2.0, 1.0)。這3個坐標點構成了一個三角形的3個頂點,即如圖3-1所示的A點(坐標為(-2,0))、B點(坐標為(0,-1))、C點(坐標為(2,1))。

圖3-1 平面坐標系上的三角形

看到了熟悉的平面坐標圖,這下平面幾何的知識可派上用場了,比如根據兩點的坐標來計算兩點之間的距離。既然三角形有3個頂點A、B、C,接下來不妨計算它的3條邊長,包括AB、AC和BC 3條邊的長度。于是分別求得兩個頂點在橫軸方向的距離和在縱軸方向的距離,然后利用勾股定理計算出連接兩個頂點的斜邊長度。以下便是根據二維數組保存的坐標數值求解三角形各邊長的演示代碼(完整代碼見本章源碼的src\com\control\array\TwoDimensional3.java):

        // 下面通過循環語句依次計算三角形每條邊的長度
        // 假設第一個數組元素代表點A,第二個數組元素代表點B,第三個數組元素代表點C
        // 則本循環將依次求得AB、AC、BC這3條邊的長度
        for (int i=0; i<triangle.length-1; i++) {
            for (int j=i+1; j<triangle.length; j++) {
                // 獲取兩個頂點在橫軸方向的距離
                double xDistance=Math.abs(triangle[j][0] - triangle[i][0]);
                // 獲取兩個頂點在縱軸方向的距離
                double yDistance=Math.abs(triangle[j][1] - triangle[i][1]);
                // 根據勾股定理計算連接兩個頂點的斜邊長度
                double distance=Math.sqrt(xDistance*xDistance + yDistance* yDistance);
                System.out.println("i=" + i + ", j=" + j + ", distance=" + distance);
            }
        }

運行上述的演示代碼,打印出來的三角形邊長計算結果如下:

i=0, j=1, distance=2.23606797749979

i=0, j=2, distance=4.123105625617661

i=1, j=2, distance=2.8284271247461903

主站蜘蛛池模板: 宝坻区| 平原县| 伊川县| 都江堰市| 福泉市| 怀化市| 鄂温| 肇源县| 德保县| 阿拉善盟| 长乐市| 临清市| 鹰潭市| 通江县| 孝感市| 乐业县| 绥滨县| 东海县| 化州市| 镇康县| 潼关县| 越西县| 德兴市| 嘉鱼县| 安阳县| 凭祥市| 玉溪市| 西华县| 阜宁县| 五峰| 天全县| 青岛市| 龙岩市| 五台县| 梁河县| 青浦区| 昌吉市| 桐乡市| 奉新县| 宁武县| 苏尼特左旗|