Java实验三

20 篇文章 0 订阅

旨在记录学习Java的路程,因能力不足,若有错误还请指正

题目

在这里插入图片描述
第4题有点表述不清

第1题:

本题中int类型的长度是不够的,必须定义成long类型

public class Code1 {
    public static void main(String args[]) {
        System.out.println(fun());
    }

    public static long fun() {
        long sum = 0L;
        for (int i = 1; i <= 20; i++)
            sum += fact(i);
        return sum;
    }
    //递归
    public static long fact(int n) {
        if (n == 1)
            return 1;
        return n * fact(n - 1);
    }

    //非递归
//    public static long fact(int n) {
//        long res = 1L;
//        for (int i = 1; i <= n; i++)
//            res *= i;
//        return res;
//    }
}

在这里插入图片描述

第2题:

本题中所用的printf()和C语言中的特别像,只是为了打印出来好看

public class Code1 {
    public static void main(String args[]) {
        fun();
    }

    public static void fun() {
        for (int i = 1; i <= 9; i++) {
            for (int j = 1; j <= i; j++) {
                System.out.print(j + "*" + i + "=");
                System.out.printf("%-4d", i * j);
            }
            System.out.println();
        }
    }
}

在这里插入图片描述

第3题:

本题用递归会方便一些,也可以创建数组,让数组去存储二进制数

import java.util.Scanner;

public class Code1 {
    public static void main(String args[]) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        dectobin(n);
    }

    public static void dectobin(int n) {
        if (n / 2 > 0)
            dectobin(n / 2);
        System.out.print(n % 2);
    }
}

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

第4题:

该题表述有点问题,但是都能明白是什么意思

public class Code1 {
    public static void main(String args[]) {
        System.out.println(getAge());
    }

    public static int getAge() {
        int age = 8;
        for (int i = 1; i < 5; i++)
            age += 2;
        return age;
    }
}

在这里插入图片描述

第5题:

题目说有30个0~9之间的数字,这里就直接采用随机数的方法创建30个随机数

import java.util.Random;

public class Code1 {
    public static void main(String args[]) {
        int[] arr = new int[30];
        System.out.println("30个数字为:");
        for (int i = 0; i < 30; i++) {  //随机创建30个0~9的随机数
            Random rand = new Random();
            arr[i] = rand.nextInt(10);
            System.out.print(arr[i] + " ");
        }
        System.out.println();
        getNum(arr);
    }

    public static void getNum(int[] arr) {
        int[] num = new int[10];  //该数组用来记录0~9每个数字的个数
        for (int i = 0; i < 30; i++) {
                num[arr[i]]++;
        }
        for (int i = 0; i < 10; i++) {
            System.out.println(i + "的个数为:" + num[i]);
        }
    }
}

在这里插入图片描述

第6题:

本题也没有规定具体的数,所以同样可以采用第五题中随机数的方法,这里共创建了10个随机数,由于java中的数组一旦申请,其大小就是固定的,因此需要一个新的比原数组大的数组来辅助插入,也可以用列表的方法

数组方法:
import java.util.Arrays;
import java.util.Random;

public class Code1 {
    public static void main(String args[]) {
        int[] arr = new int[9];
        Random rand = new Random();
        System.out.println("排序前的9个数字为:");  //首先创建9个随机数
        for (int i = 0; i < 9; i++) {  //随机创建9个0~30的随机数
            arr[i] = rand.nextInt(31);
            System.out.print(arr[i] + " ");
        }
        Arrays.sort(arr);
        System.out.println("
排序后的数组为:");
        for (int i = 0; i < 9; i++)
            System.out.print(arr[i] + " ");
        int n = rand.nextInt(31);  //再创建一个数字
        System.out.println("
待插入的数字为:" + n);
        int[] arr2 = insert(n, arr);  //将数字插入数组
        System.out.println("插入后的数组为:");
        for (int i = 0; i < 10; i++)
            System.out.print(arr2[i] + " ");
    }

    public static int[] insert(int n, int[] arr) {
        int index = 9;  //数组索引最大值,当n比数组中所有数都大时,index不会在下面for循环中被改变
        for (int i = 0; i < 9; i++) {
            if (n <= arr[i]) {
                index = i;
                break;
            }
        }

        int[] arr2 = new int[10];  //java中的数组是定长的,一但申请就无法改变其大小,插入数据之后,原数组无法容纳新数组,就需要另一个来将原数组中所有的数及插入的数容纳进去
        for (int i = 8; i >= index; i--) {  //后移
            arr2[i + 1] = arr[i];
        }
        for (int i = 0; i < index; i++) {
            arr2[i] = arr[i];
        }
        arr2[index] = n;
        return arr2;
    }
}

在这里插入图片描述

列表方法:
import java.util.Random;
import java.util.ArrayList;
import java.util.Collections;

public class Test {
    public static void main(String args[]) {
        ArrayList<Integer> arr = new ArrayList<Integer>();  //创建一个列表
        Random rand = new Random();
        System.out.println("排序前的9个数字为:");  //首先创建9个随机数
        for (int i = 0; i < 9; i++) {  //随机创建9个0~30的随机数
            arr.add(rand.nextInt(31));
            System.out.print(arr.get(i) + " ");  //get()方法用来访问ArrayList中的指定的元素
        }
        Collections.sort(arr);  //对列表进行排序
        System.out.println("
排序后的列表为:");
        for (int i = 0; i < 9; i++)
            System.out.print(arr.get(i) + " ");
        int n = rand.nextInt(10);
        System.out.println("
待插入的数字为:" + n);
        insert(n, arr);  //将数字插入数组
        System.out.println("插入后的列表为:");
        for (int i = 0; i < 10; i++)
            System.out.print(arr.get(i) + " ");
    }

    public static void insert(int n, ArrayList<Integer> arr) {
        int index = 9;  //列表索引最大值,当n比数组中所有数都大时,index不会在下面for循环中被改变
        for (int i = 0; i < 9; i++) {
            if (n <= arr.get(i)) {
                index = i;
                break;
            }
        }
        arr.add(0);  //随便添加一个数,让arr增加一个空间
        for (int i = 8; i >= index; i--) {  //后移
            arr.set(i+1,arr.get(i));  //set()方法用于替换动态数组中指定索引的元素
        }
        arr.set(index,n);
    }
}

在这里插入图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值