java(五)数组编程题

 

 

 

 

 

1.(三种思路

)

class test01{
    /*
    思路一:
数据:存储数字的数组nums 存储次数的数组counts
步骤:
1.获取一个数字
2.判断该数字
    2.1 如果是0 则跳出循环
    2.2 如果不是
        当前数字是否在nums中
            在 相应counts位置++
            不在 nums扩容将数字传进去 counts扩容 1次数
3.排序nums 同时counts
*/
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int[] nums = new int[0];//存储数字
        int[] counts = new int[0];//存储次数
        System.out.print("请输入数字:");
        while(true){
            int number = input.nextInt();
            if(number == 0){
                break;
            }
            //获取number的角标
            int index = indexOf(nums, number);
            if(index != -1){
                counts[index] ++;
            }else{ //不存在 将number加入nums中 同时计数
                nums = addNum(nums,number);
                counts = addCounts(counts);
            }
        }
        sort(nums,counts);//对结果进行排序
        for(int i=0;i<nums.length;i++){
            System.out.println(nums[i]+" occurs "+counts[i]+(counts[i]>1?" times":" time"));
        }

    }
    public static void sort(int[] nums,int[] counts){  //在排序nums的过程中 nums的元素要进行交换 同时对应的counts的元素进行交换
        for(int i = 1 ; i < nums.length ;i ++){
            int e = nums[i];
            int f = counts[i];
            int j = i - 1;
            while(j>=0&&nums[j]>e){
                nums[j+1] = nums[j];
                counts[j+1] = counts[j];
                j--;
            }
            nums[j+1] = e;
            counts[j+1] = f;

        }
    }
    //向counts数组中加入新的次数默认为1
    public static int[] addCounts(int[] counts){
        int[] arr = new int[counts.length+1];
        for(int i = 0;i < counts.length;i++){
            arr[i] = counts[i];
        }
        arr[arr.length - 1] = 1;
        return arr;
    }
     //向nums数组中加入元素number
     
    public static int[] addNum(int[] nums ,int number){
        int[] arr = new int[nums.length+1];
        for(int i = 0;i < nums.length;i++){
            arr[i] = nums[i];
        }
        arr[arr.length - 1] = number;
        return arr;
    }
    //获取角标
    public static int indexOf(int[] nums,int number){
        for (int i = 0; i < nums.length; i++) {
            if(nums[i] == number){
                return i;
            }
        }
        return -1;
    }
}

 

class Test01{
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        int[] arr  = new int[0];
        int number;
        System.out.print("请输入数字:");

        while(true){       //读取数字,如果为0,就停止读取
             number = input.nextInt();
            if(number == 0)
                break;
            arr = addNumber(arr,number);//不是0,就存入数组
        }
        sort(arr);//排序

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值