JAVA数组习题训练

这篇博客涵盖了JAVA中数组的多种操作,包括计数排序、动态扩容、排序检查、模拟球下落路径、数组比较以及矩阵乘法等算法。通过实例讲解了如何实现这些操作,并提供了相关代码示例。
摘要由CSDN通过智能技术生成

 1.

 使用计数排序的思想来做,即arr[i]就表示i出现的次数。先创建一个101大小的数组,然后输入,计算i出现的次数,再判断是否出现了0,最后输出。

import java.util.Scanner;
class Demo05_01_02{
    public static void main(String[] args){
        //0 1 2 3 4 5 ~ 100
        //0 单独不算 懒一下 不想计算offset
        //arr[i] 就表示数字i出现的次数
        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"));
            }
        }
    }
}

 

 2.

 

使用动态扩容思想,先创建一个空的数组,然后输入数值,如果数组中不包含这个数,就把数组的容量加一赋给新的数组arr,然后再把这个数给该arr.length-1.调用了copyOf函数和contains函数。

import java.util.*;

class Demo05_02{
	public static void main(String[]args){
		//边输入边去重复
		int[] arr=new int[0];    //先创建一个空的数组
		Scanner scanner=new Scanner(System.in);
		System.out.print("请输入十个数:");
		for(int i=0;i<10;i++){
			int num=scanner.nextInt();
			if(!contains(arr,num)){
				arr=copyOf(arr,arr.length+1);   //如果输入的数在数组中不包含,则将数组的长度加一再赋值给arr
				arr[arr.length-1]=num;            //将输入的数加入到该数组的最后一位
			}


		}
		System.out.println(Arrays.toString(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 boolean contains(int[]arr,int key){
		for(int i=0;i<arr.length;i++){
			if(arr[i]==key){
				return true;
			}

		}
		return false;
	}

	
}


 

 

3.

 先提示用户输入数组的长度,再遍历输入数值,调用isSorted函数,如有一组arr[i-1]>a[i]的话就输出false。

import java.util.*;
class Demo05_03{
    public static void main(String[] args){
        //1.获取用户的输入 只不过第一个输入的数据时数据的个数(数组的长度)
        Scanner scanner=new Scanner(System.in);
        System.out.print("Enter a list:");
        int len=scanner.nextInt();//获取的第一个数值就是数组的长度
        int[] arr=new int[len];
        for(int i=0;i<arr.length;i++){
            arr[i]=scanner.nextInt();
        }
        //2.对数组进行有序的判断
        if(isSorted(arr)){
            System.out.println("The list is already sorted.");
        }else{
            System.out.println("The list is not sorted.");
        }
    }
    public static boolean isSorted(int[] list){
        //如果不是升序排列 那么势必会出现有一组数据 左大右小的情况
        for(int i=1;i<list.length;i++){
            if(list[i-1]>list[i]){
                return false;
            }
        }
        return true;
    }

}

4.

 

 

/*
    输入的数据:槽子的个数 球的个数=路径的个数
               创建槽子的具体的容器int[]
               每一个小球下落的路径L R 字符串
               对于每一个小球而言其路径中的步骤是随机产生L R
    1.提示用户输入槽子的个数和小球的个数
    2.根据已有的槽子的个数去创建槽子容器
    3.根据已有的球和槽子的个数去随机创建一个小球下落的路径
    4.路径中经过几个钉子?路径的步骤有几步 和槽子的个数有关
    5.如何通过路径的经过得知最终所落入的槽子?
    */

import java.util.*;
class Demo05_04{
    
    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++){
        
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值