方法与数组之二维数组及五子棋算法+面向对象的概念

雨霖先森 2022-09-29 10:46:35

方法与数组之二维数组及五子棋算法+面向对象的概念

一、二维数组

1.含义:二维数组中包含了多个一维数组

2.声明:数据类型 数组名

3.静态初始化:数据由程序员指定,长度由系统自动分配

public class 文件名{
    public static void main(String[] args){
        //静态初始化
        //String[][] names = new String[][]{{"萧炎","林动","石昊"},{"赵日天","晓星尘","龙傲天","胡奇"}};
        
        //静态初始化2 - 先声明,在初始化
        //String[][] names;
        //names = new String[][]{{"萧炎","林动","石昊"},{"赵日天","晓星尘","龙傲天","胡奇"}};
        
        //设置指定下标上的元素
        names[1][0] = "高炎";
        
        //获取指定下标上的元素
        String n = names[1][0];
        System.out.println("获取指定下标上的元素:" + n);
        
                //获取个数
        System.out.println("获取二维数组中一维数组的个数:" + names.length);//2
        System.out.println("获取二维数组中第一个一维数组元素的个数:" + names[0].length);//3
        System.out.println("获取二维数组中第二个一维数组元素的个数:" + names[1].length);//4
        
        System.out.println("-------------------");
        
        //遍历思路:先遍历二维数组中的一维数组,再遍历一维数组中的元素
        
        //遍历  - for循环
        for (int i = 0; i < names.length; i++) {
            for (int j = 0; j < names[i].length; j++) {
                System.out.println(names[i][j]);
            }
        }
        
        System.out.println("-------------------");
        
        //遍历 - foreach
        for (String[] ss : names) {
            for (String element : ss) {
                System.out.println(element);
            }
        }
    }
}

4.动态初始化:长度由程序员指定,数据由系统自动分配默认值

整数类型:0

浮点类型:0.0

字符类型:' '

布尔类型:false

引用类型:null - 空

public class 文件名 {
        public static void main(String[] args) {
            
        
    //动态初始化1
    //String[][] names = new String[2][3];//2个一维数组,3-每个一维数组中有3个元素
    
    //动态初始化2 - 先声明,在初始化
    String[][] names;
    names = new String[2][3];
    
    //设置指定下标上的元素
    names[0][0] = "唐三1";
    names[0][1] = "唐三2";
    names[0][2] = "唐三3";
    names[1][0] = "唐三4";
    names[1][1] = "唐三5";
    names[1][2] = "唐三6";
    
    //获取指定下标上的元素
    String n = names[1][0];
    System.out.println("获取指定下标上的元素:" + n);
    
    //获取个数
    System.out.println("获取二维数组中一维数组的个数:" + names.length);//2
    System.out.println("获取二维数组中第一个一维数组元素的个数:" + names[0].length);//3
    System.out.println("获取二维数组中第二个一维数组元素的个数:" + names[1].length);//4
    
    System.out.println("-------------------");
    
    //遍历思路:先遍历二维数组中的一维数组,再遍历一维数组中的元素
    
    //遍历  - for循环
    for (int i = 0; i < names.length; i++) {
        for (int j = 0; j < names[i].length; j++) {
            System.out.println(names[i][j]);
        }
    }
    
    System.out.println("-----------------------");
    
    //遍历 - foreach
    for (String[] ss : names) {
        for (String element : ss) {
            System.out.println(element);
        }
    }
    
 }
}

5.需求:使用动态初始化创建二维数组,二维数组有两个一维数组,第一个一维数组有3个元素,第二个一维数组有4个元素

public class 文件名 {
      public static void main(String[] args) {
            
          //创建二维数组
          String[][] names = new String[2][];
          
          //创建第一个一维数组
          String[] ss1 = new String[3];
          ss1[0] = "小白兔1";
          ss1[1] = "小白兔2";
          ss1[2] = "小白兔3";
          
          
          
        //创建第二个一维数组
          String[] ss2 = new String[4];
          ss2[0] = "大灰狼1";
          ss2[1] = "大灰狼2";
          ss2[2] = "大灰狼3";
          ss2[3] = "大灰狼4";
                  
          //将第一个一维数组赋值给二维数组中下标为0的位置
          names[0] = ss1;
          
          //将第二个一维数组赋值给二维数组中下标为0的位置
          names[1] = ss2;
          
          //遍历二维数组
          for (String[] ss : names) {
            for (String element : ss) {
                System.out.println(element);
            }
        }
                  
    }
}

二、五子棋算法

import java.util.Scanner;
​
public class 文件名 {
    public static void main(String[] args) {
        
        //定义长度
        int len = 20;
        //棋盘容器
        String[][] goBang = new String[len][len];
        //定义棋盘符号
        String add = "╋";
        String black = "■";
        String white = "○";
    //坐标的容器
        String[] indexs = {"1","2","3","4","5","6","7","8","9","10","11","12","13","14","15","16","17","18","19","20"};
        
        //初始化棋盘容器中的符号---------------------------------------------
            /**解决方案1:
            //循环取出二维数组中的一维数组
                for (int i = 0; i < goBang.length; i++) {
                    //把当前一维数组的每个元素都替换成加号
                    Arrays.fill(goBang[i], add);
                    
                    //设置每个一维数组最后一个元素为坐标
                    goBang[i][len-1] = indexs[i];
                }
        //循环遍历二维数组中最后一个一维数组的元素,并设置坐标
        for (int i = 0; i < goBang[len-1].length; i++) {
            goBang[len-1][i] = indexs[i];
        }
            */
        
        //解决方案2:
        for (int i = 0; i < goBang.length; i++) {
            for (int j = 0; j < goBang[i].length; j++) {
                if(j == len-1){//每行的最后一列
                    goBang[i][j] = indexs[i];
                }else if(i == len-1){//最后一行
                    goBang[i][j] = indexs[j];
                }else{
                    goBang[i][j] = add;
                }
            }
        }
        
        //----------------------------------------------------------------
        
    //打印棋盘
    for (String[] ss : goBang) {
        for(String element : ss){
            System.out.print(element);
    }
        System.out.println();
​
    }
    
    //循环输入的坐标
    Scanner scan = new Scanner(System.in);
    boolean flag = true;//true-黑子,flase-白子
    while(true){
        System.out.println("请" + ((flag)?"黑":"白") + "子输入坐标(x,y):");
        int x = scan.nextInt()-1;//坐标从1开始,下标从0开始,所以要减1
        int y = scan.nextInt()-1;//坐标从1开始,下标从0开始,所以要减1
        
        //判断坐标是否超出棋盘范围
        if (x < 0 || x > len-2 ||y < 0 ||y > len-2) {
            System.out.println("输入错误 - 坐标超出棋盘范围,请重新输入...");
            continue;
            
        }
        
        //判断坐标上是否有棋子
        if (!goBang[x][y].equals(add)) {
            System.out.println("输入错误 - 坐标有棋子,请重新输入...");
            continue;
            
        }
        
        //落子
        goBang[x][y] = (flag)?black:white;
        
        //置反
        flag = !flag;
        
        //打印棋盘
        for (String[] ss : goBang) {
            for (String element : ss) {
                System.out.print(element);
            }
            System.out.println();
        
     }
    }
  }
}

三、面向对象的理解

1.需求:创建人类,再创建人类的对象,并操作对象

2.分析:

1.创建人类,编写人类中的属性和方法

2.在测试类中创建人类的对象

3.操作对象

public class 文件名 {
    public static void main(String[] args) {
            
            //创建人类的对象
            Person p = new Person();
            
            //设置属性
            p.name = "兰岚";
            p.sex = '女';
            p.age = 500;
            
            //获取属性
            System.out.println(p.name);
            System.out.println(p.sex);
            System.out.println(p.age);
            
            //调用方法
            p.eat();
            p.sleep();
        }
}
//人类
public class Person {
    
    //属性
    String name;
    char sex;
    int age;
    
    //方法
    public void eat(){
        System.out.println("吃饭饭");
    }
    
    public void sleep(){
        System.out.println("睡觉觉");
    }
}
​

4.扩展

测试类 特点:有main方法

...全文
108 回复 打赏 收藏 转发到动态 举报
写回复
用AI写文章
回复
切换为时间正序
请发表友善的回复…
发表回复

51,407

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧