Java语言设计基础篇数组练习

1

import java.util.*;

class Demo05_01{

    public static void main(String[] args){

        /*

        思路1:数组长度不固定 需要读取一个数据 数组扩容 填入数据

        数据填入之后进行排序 然后遍历数组依次判断数据的个数

        连续相等

        2 2 2 2 3 3 4 4 4 4 5 5 6 6 6 6 7 7

        思路2:借助计数排序的思想 将数组固定起来

        */

        /*

        //1.获取用户输入的数据 动态的扩容数组填充数据

        Scanner scanner = new Scanner(System.in);

        int[] arr=new int[0];

        System.out.print("Enter numbers:");

        while(true){

            int num=scanner.nextInt();

            if(num==0){

                break;

            }

            //验证用户输入数据的正确性

            if(num<1||num>100){

                System.out.println("有非法数据!");

                return;

            }

            arr=copyOf(arr,arr.length+1);

            arr[arr.length-1]=num;

        }

        //2.按照输出结果 将数据中的数据进行排序

        insertSort(arr);

        //3.输出连续相等的数字

        show(arr);

    }

    public static int[] copyOf(int[] arr,int newLen){

        int[] newArr=new int[newLen];

        for(int i=0;i<arr.length;i++){

            newArr[i]=arr[i];

        }

        return newArr;

    }

    public static void insertSort(int[] arr){

        for(int i=1;i<arr.length;i++){

            int e=arr[i];

            int j;

            for(j=i;j>0&&arr[j-1]>e;j--){

                arr[j]=arr[j-1];

            }

            arr[j]=e;

        }

    }

    

    Arrays Math都是属于工具类

    Arrays 特殊的是数组的工具类

        toString(arr) 就是将数据的每个元素进行拼接 并返回拼接后的字符串数据

        "[1,2,3,4]"

    

    public static void show(int[] arr){

        System.out.println(Arrays.toString(arr));

        //此时就将问题转成了如何判断连续相等的数据分别出现多少次

        //[1, 1, 1, 2, 2, 2, 3, 3, 3, 3, 3, 4, 4, 5, 5, 6]

        for(int i=0;i<arr.length;){

            int count=1;

            for(int j=i+1;j<arr.length;j++){

                if(arr[j]==arr[i]){

                    count++;

                }else{

                    break;

                }

            }

            System.out.println(arr[i]+" occurs "+count+(count>1?" times":" time"));

            i+=count;

        }

    }

}

2.

import java.util.*;

class Demo05_02{

    public static void main(String[] args){

            func1();

}

    public static void func2(){

        int[] arr=new int[0];

        Scanner scanner = new Scanner(System.in);

        System.out.print("Enter numbers:");

        for(int i=0;i<10;i++){

            int num=scanner.nextInt();

            if(!contains(arr,num)){

                arr=copyOf(arr,arr.length+1);

                arr[arr.length-1]=num;

            }

        }

        System.out.println(Arrays.toString(arr));

    }

思路二:可以在全部输入后在去重复   运用for嵌套循环去掉相等的

 

 

3

import java.util.*;

class Demo05_04{

    /*

    输入的数据:槽子的个数 球的个数=路径的个数

               创建槽子的具体的容器int[]

               每一个小球下落的路径L R 字符串

               对于每一个小球而言其路径中的步骤是随机产生L R

    1.提示用户输入槽子的个数和小球的个数

    2.根据已有的槽子的个数去创建槽子容器

    3.根据已有的球和槽子的个数去随机创建一个小球下落的路径

    4.路径中经过几个钉子?路径的步骤有几步 和槽子的个数有关

    5.如何通过路径的经过得知最终所落入的槽子?

    */

    public static void main(String[] args){

        //1.

        Scanner scanner=new Scanner(System.in);

        System.out.print("Enter the number of balls to drop:");

        int balls=scanner.nextInt();

        System.out.print("Enter the number of slots in the bean machine:");

        int slots=scanner.nextInt();

        //2.

        int[] arr=new int[slots];

        //3.几个球几个路径path

        for(int i=0;i<balls;i++){

            String path=getPath(slots);

            System.out.println(path);

            //5.只要看当前路径中R的个数即可

            arr[getR(path)]++;

        }

        //6.输出

        System.out.println(Arrays.toString(arr));

    }

    public static int getR(String path){

        int count=0;

        for(int i=0;i<path.length();i++){

            if(path.charAt(i)=='R'){

                count++;

            }

        }

        return count;

    }

    public static String getPath(int slots){

        //4.根据槽子的个数计算每一个球下落的路径

        Random random=new Random();

        String path="";

        for(int j=0;j<slots-1;j++){

            if(random.nextInt(2)==0){   //向左

                path+="L";

            }else{  //向右

                path+="R";

            }

        }

        return path;

    }

}

4

import java.util.*;

class Demo05_13{

    public static void main(String[] args){

        Scanner scanner=new Scanner(System.in);

        System.out.print("Enter row ,col:");

        int row=scanner.nextInt();

        int col=scanner.nextInt();

        int[][] m=new int[row][col];

        for(int i=0;i<row;i++){

            for(int j=0;j<col;j++){

                m[i][j]=scanner.nextInt();

            }

        }

        System.out.println(isConsecutiveFour(m));

    }

    public static boolean isConsecutiveFour(int[][] m){

        for(int i=0;i<m.length;i++){

            for(int j=0;j<m[i].length;j++){

                //向右

                if(j<=m[i].length-4){

                    boolean flag=true;

                    for(int c=j+1;c<=j+3;c++){

                        if(m[i][j]!=m[i][c]){

                            flag=false;

                            break;

                        }

                    }

                    if(flag){

                        return true;

                    }

                }

                //向下

                if(i<=m.length-4){

                    boolean flag=true;

                    for(int r=i+1;r<=i+3;r++){

                        if(m[i][j]!=m[r][j]){

                            flag=false;

                            break;

                        }

                    }

                    if(flag){

                        return true;

                    }

                }

                //向右下

                if(i<=m.length-4&&j<=m[0].length-4){

                    boolean flag=true;

                    for(int r=i+1,c=j+1;r<=i+3;r++,c++){

                        if(m[i][j]!=m[r][c]){

                            flag=false;

                            break;

                        }

                    }

                    if(flag){

                        return true;

                    }

                }

                //向右上

                if(i>=3&&j<=m[0].length-4){

                    boolean flag=true;

                    for(int r=i-1,c=j+1;c<=j+3;r--,c++){

                        if(m[i][j]!=m[r][c]){

                            flag=false;

                            break;

                        }

                    }

                    if(flag){

                        return true;

                    }

                }

            }

        }

        return false;//四个方向都没有连续的

    }

}

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值