第二十一节(数组概要, 一维、二维数组的声明和使用,数组的排序,数组的查找,)

一维数组:1:/*
    数组:

        1. 数组是一种引用类型

        2. 数组是一种简单的数据结构,线性的机构

        3. 数组是一个容器,可以用来存储其他元素,

        4. 数组也是可以存储任意数据类型的元素

        5. 数组分为:

            一维数组,二维数组,三维数组,多维数组

        6. 数组中的存储的元素类型 是统一的

        7. 数组的长度是不可变的,数组一旦创建长度就是不可变的,固定的

        声明数组语法:

            <1>. 数组元素的类型[] 变量名称

            <2>. 数组元素的类型 变量名称[]

*/
public class ArrayTest01{

    public static void main(String[] args){

        // 声明一个一维数组,用来存储int类型
        int[] i = {1,2,3,4,5}; // 这种方式称之为“静态初始化的一维数组”

        // boolean 类型的数组
        boolean[] j = {true,false,true,false};

        // String类型数组
        String[] strs = {"中山学院","农业学院","我就是吃西葫芦"};

        // byte数组
        byte[] k = {1,2,3};

        // char数组
        char[] m = {‘a‘,‘b‘,‘c‘};

        // Object数组
        Object o1 = new Object();
        Object o2 = new Object();
        Object o3 = new Object();

        Object[] bojs = {o1,o2,o3};

    }

}

2:/*

     第一种:使用 new 操作符来创建数组

     格式为:new 数组元素的数据类型 [数组元素的个数]

*/
public class ArrayTest02{

    public static void main(String[] args){

        // 声明一个int类型的数组,长度为 5
        // 数组中的元素,必须为int类型
        int[] data = new int[5];

        // 给数组中的元素赋值,如果不赋值默认为 该类型的默认值 如果是int类型就为 0;

        // 赋值: 变量名[下标] 下标从0开始
        data[0] = 16;
        data[1] = 17;
        data[2] = 10;
        data[3] = 90;
        data[4] = 50;

        // 输出数组中的元素,变量名[下标]
        System.out.println(data[0]);
        System.out.println(data[1]);
        System.out.println(data[2]);
        System.out.println(data[3]);
        System.out.println(data[4]);

        System.out.println("--------------------------------------");

        System.out.println("数组的长度为:"+data.length);

        for(int i = 0; i < data.length; i ++){
            System.out.println("下标为:"+ i +" 的值:" + data[i]);
        }

        // 输出数组中的指定的值
        System.out.println("data[2] = " + data[2]);

        // 报错:ArrayIndexOutOfBoundsException
        // 数组的下标越界
        System.out.println("data[6] = " + data[6]);

        // 不能赋值成功,数组中的类型必须是 一种类型
        data[1] = "aaaa";

    }

}

/*
    修正 空指针异常

*/
3:public class ArrayTest04{

    public static void main(String[] args){

        // 声明引用类型的数组
        Student[] student = new Student[2];

        // 方式一:

        // 初始化数组元素为 Student对象
        student[0] = new Student();
        student[0].id = 100;
        student[0].name = "ming";

        student[1] = new Student();
        student[1].id = 200;
        student[1].name = "keke";        

        System.out.println("id[0] = "+student[0].id + "  name[0] = " + student[0].name);
        System.out.println("id[1] = "+student[1].id + "  name[1] = " + student[1].name);

        // 方式二:
        // 可以采用另外的方式来赋值

        Student arry = new Student();
        arry.id = 1111;
        arry.name = "ming";
        student[0] = arry;

        Student keke = new Student();
        keke.id = 2222;
        keke.name = "Keke";
        student[1] = keke;        

        System.out.println("----------------------------------------------");

        for(int i = 0; i < student.length; i ++){
            System.out.println("id = " + student[i].id + " name = " + student[i].name);
        }

    }

}

class Student{

    int id;

    String name;

}
二维数组:1:/*
    二维数组特点:

        1. 二维数组 是一个特殊的一维数组
        2. 特殊的一维数组,特殊在这个一维数组中每一个元素都是“一维数组”

*/
public class ArrayTest01{

    public static void main(String[] args){

        // 声明一个二维数组
        int[][] m = new int[2][3];

        // 对二维数组赋值
        m[0][0] = 1;
        m[0][1] = 2;
        m[0][2] = 3;

        m[1][0] = 4;
        m[1][1] = 5;
        m[1][2] = 6;

        System.out.println(m[0].length);

        // 输出二维码
        // 纵向循环在外
        for(int i = 0; i < m.length; i++){
            // 对一维数组m[i]进行遍历
            for(int j = 0; j < m[i].length; j++){
                System.out.println(m[i][j]);
            }
        }

        /*
            当 i = 0, i < 2 满足条件,
            j = 0, j < 3 满足条件 输出:m[0][0] 最终输出:1; j++
            j = 1, j < 3 满足条件 输出:m[0][1] 最终输出:2; j++
            j = 2, j < 3 满足条件 输出:m[0][2] 最终输出:3; j++
            j = 3, j < 3 不满足条件,跳出循环 break; i++

            当 i = 1, i < 2 满足条件,
            j = 0, j < 3 满足条件 输出:m[1][0] 最终输出:4; j++
            j = 1, j < 3 满足条件 输出:m[1][1] 最终输出:5; j++
            j = 2, j < 3 满足条件 输出:m[1][2] 最终输出:6; j++
            j = 3, j < 3 不满足条件,跳出循环 break; i++

            当 i = 2, i < 2 不满足条件,跳出外层循环 break; 结束Over !

        */

    }

}

2:/*
    多维数组: 当数组元素的类型是数组时就成了多维数

*/
public class ArrayTest03{

    public static void main(String[] args){

        int[][] a = new int[][]{{1,2,3},{5,6,7},{7,8,9}};

        m(a);        

    }

    // 遍历
    public static void m(int[][] a){
        for(int i = 0; i < a.length; i++){
            for(int j = 0; j < a[i].length; j++){
                System.out.println(a[i][j]);
            }
            System.out.print("\n");
        }
    }

}
/*
     冒泡排序算法:

         int 类型的数组 : 3 1 6 2 5

*/
public class BubbleSort{

    public static void main(String[] args){

        int[] a = {3,1,6,2,5};

        //System.out.println("数组的长度:"+a.length);

        m(a);

        /*
        // 开始排序
        for(int i = a.length-1; i > 0; i--){
            for(int j = 0; j < i; j++){
                if(a[j] > a[j+1]){
                    // 交换位置
                    int temp;
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
        // 遍历
        for(int i = 0; i < a.length; i++){
            System.out.println(a[i]);
        }
        */

    }

    public static void m(int[] a){
        for(int i = a.length-1; i > 0; i--){
            for(int j = 0; j < i; j++){
                if(a[j] > a[j+1]){
                    // 交换位置
                    int temp;
                    temp = a[j];
                    a[j] = a[j+1];
                    a[j+1] = temp;
                }
            }
        }
        // 遍历
        for(int i = 0; i < a.length; i++){
            System.out.println(a[i]);
        }
    }

}
时间: 2024-10-27 08:08:38

第二十一节(数组概要, 一维、二维数组的声明和使用,数组的排序,数组的查找,)的相关文章

资瓷区间修改+区间求和的树状数组(一维/二维)

一维:令 \(v_i\) 为差分数组,那么 \([0, k]\) 的前缀和就是 \(\sum{v_i(k+1-i)} = (k+1) \cdot \sum{v_i} + \sum{v_i \cdot (-i)}\),树状数组维护一下 \(v_i\) 和 \(v_i \cdot i\) 即可. template <typename I> struct Fenwick { struct Node { I v0, v1; void add(I d0, I d1) { v0 += d0; v1 +=

c++ 依据输入动态声明数组(一维,二维)

较早的编译器是不同意这样做的,所以一些书籍比方以Tc解说的书本都说数组的下标不能是变量.在vc6.0下亦是如此. 只是在一些较新的编译器如dev c++已经支持了,例如以下代码不会报错 #include <stdio.h> #include <stdlib.h> int main() { int a; int i; scanf("%d",&a); int c[a]; for( i =0 ;i<a;i++) scanf("%d",

一维数组建模表示二维的棋盘状态

当我们想写一个棋类游戏的时候,不难发现,很多棋类游戏的棋盘都可以用一个二维数组表示,比如: 井字棋(3*3的二维数组).黑白棋(8*8的二维数组).五子棋(15*15的二维数组)等等 使用二维数组表示棋盘,数组的下标就是棋子的坐标,数组中的值就是棋子的状态. 好处就是数据访问比较直观,可直接根据下标快速找到某个位置的棋子的状态. 但缺点也是很明显的 比如: 首先是遍历棋盘需要用双重循环处理横坐标跟纵坐标: 其次是判断棋子状态,比如以上所说的三种棋子,需要判断行.列以及斜线8个方向上的棋子状态,因

数组(随机生成一维数组),二维数组的概念和题目设计(利用二维数组 :任意给定分数去计算科目和人均平均分)

1 //数组间的关系arr[]中的数字为几,[]内就有几个数 2 //{ }内的数是从0开始,如需要打印应从0开数 3 如{2,6,9,8,7}打印arr[4]就是7 4 #include <stdio.h> 5 #include <stdlib.h> 6 int main() 7 { 8 int arr[] = { 1,2,3,4,8}; 9 10 printf("%d\n", arr[3]); 11 12 system("pause");

一维 + 二维树状数组 + 单点更新 + 区间更新 详解

树状数组详解: 假设一维数组为A[i](i=1,2,...n),则与它对应的树状数组C[i](i=1,2,...n)是这样定义的: C1 = A1 C2 = A1 + A2 C3 = A3 C4 = A1 + A2 + A3 + A4 C5 = A5 C6 = A5 + A6 ................. C8 = A1 + A2 + A3 + A4 + A5 + A6 + A7 + A8 ................ 如图可知: 为奇数的时候他是代表他本身,而为偶数的时候则是代表着自

输入5个学生的名字(英文),使用冒泡排序按从大到小排序。 提示:涉及到字符串数组,一个字符串是一个一维字符数组;一个 字符串数组就是一个二维字符数组。

#include <stdio.h>#include <string.h> /*输入5个学生的名字(英文),使用冒泡排序按从大到小排序.提示:涉及到字符串数组,一个字符串是一个一维字符数组:一个字符串数组就是一个二维字符数组.*/ void main(){ char stuNames[5][100]; char tmp[100]; int i = 0,j = 0; for(i = 0; i < 5; i++) { printf("请输入第%d个学生的名字:"

把一维数组转换成二维数组

有一个一维数组,想把它变成m*n形式的二位数组, $arr = array(....); // 一维数组 $m = ceil(count($arr)/n); $array = array(); for ($i = 0, $j = 0; $i < $m; $i++) { for ($k = 0; $k < n; $k++) { $temp = $arr[$j++]; if($temp) $array[$i][$k] = $temp; } } 把一维数组转换成二维数组

PHP如何判断一个数组是一维数组或者是二维数组?用什么函数?

如题:如何判断一个数组是一维数组或者是二维数组?用什么函数? 判断数量即可 <?php if (count($array) == count($array, 1)) { echo '是一维数组'; } else { echo '不是一维数组'; } PHP手册: int count ( mixed $var [, int $mode ] )  --  计算数组中的单元数目或对象中的属性个数  如果可选的 mode 参数设为 COUNT_RECURSIVE(或 1),count() 将递归地对数组

将一维数组转化成二维数组

<nz-table #colSpanTable [nzData]="temp" nzBordered> <tbody> <ng-container *ngFor="let row of temp;let i = index"> <tr> <td *ngFor="let title of row">{{title.AreaCodesName}}</td> </tr>

数组指针与二维数组的寻址

引例:已知如下程序 1 #include <stdio.h> 2 main() 3 { 4 int x[3][4] = {1,3,5,7,9,11,2,4,6,8,10,12} ; 5 int (*p)[4] = x, k = 1, m, n = 0; 6 for(m=0; m < 2; m++) 7 n += *(*(p+m)+k); 8 printf("%d\n",n); 9 } 试写出程序的输出值.(虽然我很讨厌做这种笔头功夫的题,我也坚信编程语言是在实践中练出