二维数组(所有知识点,跟详解)

①一维数组中每一个元素,存储的就是一个数据

②二维数组中的每一个元素,存储的就是一个一维数组

1.1创建二维数组

动态初始化

                语法:数据类型[ ] [ ]数组名=new  数据类型[二维数组的长度]  [一维数组的长度]

                注意:在创建二维数组的时候,二维数组的长度必须是要指定的,而一维数组的长度暂时可以不确定。

 静态初始化

        语法:数据类型[] []数组名={{元素1,元素2},{元素1,元素2,元素3},{},{}}

1.3二维数组的遍历

public class demo8 {//二维数组遍历
    public static void main(String[] args) {
        int [][] arr={{11,22,33},{66,88},{111,88,77}};
        for (int i = 0; i < arr.length; i++) {
            //arr[i]是一个一维数组
            //在循环遍历一维数组
            for (int j = 0; j < arr[i].length; j++) {
                System.out.print(arr[i][j]+"\t");
            }
        }

    }
}

1.4二维数组的应用

杨辉三角的实现

public class demo9 {
    public static void main(String[] args) {
        //使用二维数组实现杨辉三角
        /*
        *    *
    *  arr[0][0]
       arr[1][0]
       arr[2][0]
       arr[3][0]
    *
    * {{1},{1,1},{1,2,1},{1,3,3,1}}  组成了杨辉三角
    * */
        
        //定义一个一维数组
        int[][] yhArr=new int[5][];
        //对二维数组进行赋值
        for (int i = 0; i < yhArr.length; i++) {
            //对一维数组进行赋值
             yhArr[i]=new int[i+1];
            for (int j = 0; j < yhArr[i].length; j++) {
                if (j==0 || i==j) {
                    yhArr[i][j]=1;

                }else{
                    yhArr[i][j]=yhArr[i-1][j-1] + yhArr[i-1][j];
                }


            }
        }
        for (int i = 0; i < yhArr.length; i++) {
            for (int j = 0; j < yhArr.length-1; j++) {
                System.out.print("\t");
            }
            for (int j = 0; j < yhArr[i].length; j++) {
                System.out.print(yhArr[i][j]+"\t");
            }
            System.out.println();
        }
    }
}

2,可变参数

可变参数:jdk1.5之后新的语法

        语法:数据类型...参数名

        特点:

                ①带有可变参数方法调用的时候,实参个数可以是0个或者多个

                ②可变参数只能放在参数列表的最后(一个方法只能有一个可变参数)

                ③可变参数可以当作数组来使用,也可以将数组变为参数使用

2.1可变参数的方法定义

    public static void m1(int... a){
        System.out.println(a);
        System.out.println(a[0]);
        System.out.println(a[1]);
        System.out.println(a[2]);
    }

2.2可变参数方法的调用

    public static void main(String[] args) {
        m1(1,2,3,4,5,6,7);
        int[] arr={1,2,3};
        m1(arr);

    }

 例子:案例

public class demo7 {//根据用户传来的数字,进行求和 数字不确定
    public static void main(String[] args) {
        int[] arr = {1,2,3};
        System.out.println(sum(arr));
    }
    public static int sum(int... arr){
        int sum = 0;
        for (int i = 0; i < arr.length; i++) {
            sum = sum+arr[i];
        }
        return sum;
    }
}

3,值传递和引用传递 

①值传递:传递的是值,所以原本的值本身不会改变,所有的基本类型+String都是属于值传递

②引用传递:传递的是地址,所以会对原来的内容有影响,所有的引用数据类型都属于引用传递

public class demo7 {
    public static void main(String[] args) {
        int a = 10;
        System.out.println("传递之前a的值"+a);
        m1(a);
        System.out.println("传递之后a的值"+a);
        System.out.println("---------------------------");
        String name = "cxk";
        System.out.println("传递之前的名字:"+name);
        m2(name);
        System.out.println("传递之后的名字"+name);
        System.out.println("----------------------------");
        double[] d = {1,2,3};
        System.out.println("传递之前d[0]的值:"+d[0]);
        m3(d);
        System.out.println("传递之后d[0]的值:"+d[0]);


        //通过变量形式传递
        int c=10;
        int b=c;
        b=20;
        System.out.println(c);

        String s="a";
        String s1=s;
        s1="b";
        System.out.println(s);

    }




    public static void m1(int a){
        a=20;
    }
    public static void m2(String name){
        name = "李明";
    }
    public static void m3(double[] d){
        d[0]=100;
    }

}

4,综合案例

public class ProductManager {
    //实现商品的增删改查
    //定义成员变量表示商品的名称信息
    static  String[] names={};

    //定义成员变量表示商品在数组中的有效个数
    static  int size=0;
    static  Scanner sc=new Scanner(System.in);


    //判断指定商品是否存在
    public static  int index(String name){
        for (int i = 0; i <size ; i++) {
            if (name.equals(names[i])){
                return i;
            }
        }
        return -1;
    }


    //增加商品
    public  static  void addProduct(String name){
        //判断数组容量是否足够
        if (size==names.length){
            names= Arrays.copyOf(names,names.length+5);
        }
        //判断商品是否存在
        int index=index(name);
        if (index!=-1){
            System.out.println("商品已存在,无法添加");
        }else {
            names[size]=name;
            //每次添加元素之后  有效个数+1
            size++;
        }
    }

    //删除商品
    public static  void  deleteProduct(String name){
        //1.判断商品是否存在
        int index = index(name);
        if (index==-1){
            System.out.println("你要删除的商品不存在");
        }
        //判断特殊情况,当元素个数刚好为5的时候
        if (size%5==0){
           names = Arrays.copyOf(names, names.length + 5);
        }

        //2.将原数组商品删除掉
        for (int i = index; i <size; i++) {
            names[i]=names[i+1];
        }
        //3.有效个数-1
        size--;
    }

    //修改商品
    public static  void  updateProduct(String oldName,String newName){
        //1.判断是否存在
        int index = index(oldName);
        if (index==-1){
            System.out.println("你要修改的商品不存在");
        }
        //2.判断新名字是否存在
        if (index(newName)!=-1){
            System.out.println("你要修改的名字已经存在无法修改");
            return;
        }
        //3修改商品名称
        names[index]=newName;
    }

    //查询商品
    public static  void  selectProduct(){
        if (names.length==0){
            System.out.println("暂无商品,等待添加");
        }else {
            for (int i = 0; i <size ; i++) {
                System.out.print(names[i]+"\t");
                if (i!=0&& i%5==0){
                    System.out.println();
                }
            }
            System.out.println();
        }
    }
    //未来就对应前端页面
    public  static  void menu(){
        System.out.println("欢迎进入商品管理系统");
        while (true){
            System.out.println("1.增加  2.删除  3.修改 4.查询 5.退出");
            int num= sc.nextInt();
            switch (num){
                case 1:
                    System.out.println("请输入你要增加商品名称");
                    String addName = sc.next();
                    addProduct(addName);
                    break;
                case 2:
                    System.out.println("请输入你要删除的商品名称");
                   String delName=sc.next();
                   deleteProduct(delName);
                   break;
                case 3:
                    System.out.println("请输入你要修改商品名称");
                    String oldName=sc.next();
                    System.out.println("请输入修改后商品名称");
                    String newName=sc.next();
                    updateProduct(oldName,newName);
                    break;
                case 4:
                    selectProduct();
                    break;
                case 5:
                    System.out.println("欢迎下次使用");
                    return;
                default:
                    System.out.println("你输入的数字有误,请重新输入");
            }
        }
    }

    public static void kaiGuang() {
        System.out.println("                       _oo0oo_");
        System.out.println("                      o8888888o");
        System.out.println("                     88\" . \"88");
        System.out.println("                      (| -_- |)");
        System.out.println("                     0\\  =  /0");
        System.out.println("                    ___/`---'\\___");
        System.out.println("                  .' \\|     |// '.");
        System.out.println("                / _||||| -:- |||||- \\");
        System.out.println("               |   | \\\\\\  -  /// |   |");
        System.out.println("               | \\_|  ''\\---/''  |_/ |");
        System.out.println("               \\  .-\\__  '-'  ___/-. /");
        System.out.println("             ___'. .'  /--.--\\  `. .'___");
        System.out.println("          .\"\" '<  `.___\\_<|>_/___.' >' \"\".");
        System.out.println("         | | :  `- \\`.;`\\ _ /`;.`/ - ` : | |");
        System.out.println("         \\  \\ `_.   \\_ __\\ /__ _/   .-` /  /");
        System.out.println("     =====`-.____`.___ \\_____/___.-`___.-'=====");
        System.out.println("                       `=---='");
        System.out.println("                                                ");
        System.out.println("                                                ");
        System.out.println("     ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~         ");
        System.out.println("                    佛祖保佑         永无BUG         ");
        menu();
    }

    public static void main(String[] args) {
        kaiGuang();
    }
}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值