JavaSE 第五章练习

5.1

在这里插入图片描述

/*
使用计数排序的思想
*/
import java.util.Scanner;
class Demo05_01{
    public static void main(String[] args){
        int[] arr=new int[101];
        Scanner scanner=new Scanner(System.in);
        System.out.print("Enter numbers:");
        while(true){
            int num=scanner.nextInt();
            if(num==0){
                break;
            }
            arr[num]++;
        }
        for(int i=0;i<arr.length;i++){
            if(arr[i]!=0){
                System.out.println(i+" occurs "+arr[i]+(arr[i]>1?" times":" time"));
            }
        }
    }
}

5.2

在这里插入图片描述

import java.util.*;
class Demo05_02{
    public static void main(String[] args){
        func2();
    }
    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));
    }
    //判断数组中是否存在一个数
    public static boolean contains(int[] arr,int key){
        for(int i=0;i<arr.length;i++){
            if(arr[i]==key){
                return true;
            }
        }
        return false;
    }
    //数组动态扩容使用
    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;
    }
}

5.3

在这里插入图片描述

import java.util.Scanner;

class Demo05_03{
    public static void main(String[] args) {
        System.out.print("Enter a list:");
        Scanner scanner = new Scanner(System.in);
        int length = scanner.nextInt();
        int[] arr = new int[length];
        for (int i = 0; i < arr.length; i++) {
            arr[i] = scanner.nextInt();
        }
        if (isSorted(arr)) {
            System.out.print("The list is already sorted");
        }
        else {
            System.out.print("The list is not sorted");
        }
    }

    public  static boolean isSorted(int[] arr) {
        for (int i = 1; i < arr.length; i++) {
            if (arr[i-1] > arr[i]) {
                return false;
            }
        }
        return true;
    }
}

5.4

在这里插入图片描述
在这里插入图片描述

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)]++;
        }
        System.out.println(Arrays.toString(arr));
        show(arr);
    }
    public static void show(int[] arr){
        int w=arr.length;
        int h=0;
        for(int i=0;i<arr.length;i++){
            if(arr[i]>h){
                h=arr[i];
            }
        }
        for(int i=h-1;i>=0;i--){
            for(int j=0;j<w;j++){
                if(i<arr[j]){
                    System.out.print("O");
                }else{
                    System.out.print(" ");
                }
            }
            System.out.println();
        }

    }
    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;
    }
}

5.5

在这里插入图片描述

import java.util.Scanner;
class Demo05_05{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int[] list1=new int[0];
        int[] list2=new int[0];
        System.out.print("Enter list1(End with 0): ");
        while(true){
            int num=scanner.nextInt();
            if(num==0){
                break;
            }
            list1=copyOf(list1,list1.length+1);
            list1[list1.length-1]=num;
        }
        System.out.print("Enter list2(End with 0): ");
        while(true){
            int num=scanner.nextInt();
            if(num==0){
                break;
            }
            list2=copyOf(list2,list2.length+1);
            list2[list2.length-1]=num;
        }
        System.out.println(equals(list1,list2));
    }
    public static boolean equals(int[] list1,int[] list2){
        //判断两个数组是否完全相同
        //1.先判断长度
        if(list1.length!=list2.length){
            return false;
        }
        //2.再依次判断元素大小
        for(int i=0;i<list1.length;i++){
            if(list1[i]!=list2[i]){
                return false;
            }
        }
        return true;
    }
    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;
    }
}

5.6

在这里插入图片描述

import java.util.Scanner;
class Demo05_06{
    public static void main(String[] args){
        int[] arr = new int[0];
        Scanner scanner = new Scanner(System.in);
        System.out.print("Enter the number of values: ");
        int n=scanner.nextInt();
        System.out.print("Enter the values: ");
        while(n>0){
            int num=scanner.nextInt();
            if(num==0){
                break;
            }
            arr=copyOf(arr,arr.length+1);
            arr[arr.length-1]=num;
            n--;
        }
        System.out.print(fourDigit(arr));
    }
    public static boolean fourDigit(int[] arr) {
        for(int i=0;i<arr.length;){
            int count=1;
            for(int j=i+1;j<arr.length;j++){
                if(arr[i]==arr[j]){
                    count++;
                }else{
                    break;
                }
            }
            if(count>=4){
                return true;
            }
            i+=count;
        }
        return false;
    }
    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;
    }
}

5.7

在这里插入图片描述

import java.util.*;
class Demo05_07{
    public static void main(String[] args){
        Scanner scanner = new Scanner(System.in);
        int[] list1=new int[0];
        int[] list2=new int[0];
        System.out.print("Enter list1(End with 0): ");
        while(true){
            int num=scanner.nextInt();
            if(num==0){
                break;
            }
            list1=copyOf(list1,list1.length+1);
            list1[list1.length-1]=num;
        }
        System.out.print("Enter list2(End with 0): ");
        while(true){
            int num=scanner.nextInt();
            if(num==0){
                break;
            }
            list2=copyOf(list2,list2.length+1);
            list2[list2.length-1]=num;
        }
        System.out.println(Arrays.toString(merge(list1,list2)));
    }
    /*
    有序数组的合并
    最主要的问题在于 数组之间有长有短
    */
    public static int[] merge(int[] list1,int[] list2){
        if(list1==null&&list2==null){
            return null;
        }
        if(list1==null){
            return list2;
        }
        if(list2==null){
            return list1;
        }
        //只有两个都不是null的情况再考虑具体操作
        int[] list3=new int[list1.length+list2.length];
        int p1=0;
        int p2=0;
        int p3=0;
        while(true){
            if(p1==list1.length&&p2==list2.length){
                break;
            }
            if(p1<list1.length&&p2==list2.length){
                list3[p3++]=list1[p1++];
            }else if(p1==list1.length&&p2<list2.length){
                list3[p3++]=list2[p2++];
            }else{
                if(list1[p1]<=list2[p2]){
                    list3[p3++]=list1[p1++];
                }else{
                    list3[p3++]=list2[p2++];
                }
            }
        }
        return list3;
    }
    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;
    }
}
发布了12 篇原创文章 · 获赞 0 · 访问量 205

猜你喜欢

转载自blog.csdn.net/weixin_44290138/article/details/104376300