java练习题

本文提供了多个Java编程基础练习题,包括猜数字游戏、特殊数字筛选、复利计算、循环与递归问题、数组操作、字符串处理等,适合初学者巩固Java基础知识。
摘要由CSDN通过智能技术生成

java基础练习,持续添加

1

// 随机生成一个1-10之间的数字num,循环让用户输入猜这个数,如果用户输入的数字大于num提示输入的数字比较大,如果用户输入的数字小于num提示输入的数字比较小,直到用户输入的数字和num相等为止,然后输出用户猜数的总次数


       

Scanner scan= new Scanner(System.in);

        Random ran= new Random();

        //生成游戏答案1~100

        int num = ran.nextInt(10)+1;

        //System.out.println(num);

        int n = 0;//定义n的初值

        int i = 0;//定义猜数次数

        while(n != num) {

            System.out.println("请猜数字");

            n=scan.nextInt();

            if(n > num) {//判断猜数结果

                System.out.println("输入的数字较大");

            }else if(n < num) {

                System.out.println("输入的数字较小");

            }else {

                System.out.println("恭喜您猜对了");

            }

            i++;//猜数次数加1

        }

        System.out.println("总共猜了"+i+"次");

2

//打印出1-100之间所有不是7的倍数和不包含7的数字,并求和       

 int sum = 0;

        for (int i = 1; i <= 100; i++) {

           if(i % 7 == 0 || i / 10 == 7 || i % 10 == 7){

               continue;

           }else{

               sum += i;

               System.out.println(i);

           }

        }

        System.out.println(sum);    //3281

3

        //有一个有钱的神经病,他往银行里存钱,第一天存1,以后每天比前一天多存50%,完成下列计算任务

        //1)他存到第几天,当天存的钱会超过10元      

  int day = 1;

        Double j;

        for (j = 1.0; j <= 10; j++) {

            j*=1.5;

            day ++;

            System.out.println(j);

        }

        System.out.println(day);

 4

        //一个月(30天)后,他总共存了多少钱       

double sum = 0;

        double money = 1;

        for (int i = 1; i <= 30; i++) {

            sum += money;

            System.out.println("第" + i + "天" + ",当天存款为:" + money);

            money *= 1.5;

        }

        System.out.println("总计:" + Math.round(sum) );

5、

          //有一个400米一圈的操场,一个人要跑10000米,第一圈50秒,其后每一圈都比前一圈慢1秒,按照这个规则计算跑完10000米需要多少秒       

 int minutes = 50;

        int round = 10000 / 400;

        int sum = 0;

        for (int i = 1; i <= round; i ++ ) {

            sum += minutes;

            System.out.println("第" + i + "圈,所花时间:"+minutes+"秒");

            minutes ++;

        }

        System.out.println("花的时间:"+sum);

        //第25圈,所花时间:74秒

        //花的时间:1550

6

//用户输入任意一个整数,求各位数字之和


       

Scanner scan=new Scanner(System.in);

        System.out.println("请输入一个数字");

        int i = scan.nextInt();

        int sum = 0;

        while (i > 0){

            sum += (i%10);

            i /= 10;

            System.out.println(i);

        }

        System.out.println(sum);

        //567

        //56

        //5

        //0

        //18

7、这道题看起来简单,但却有点意思

        //井里有一只蜗牛,他白天往上爬5米,晚上掉3.5米,井深56.7

        //计算蜗牛需要多少天才能从井底到爬出来       

int day = 0;

        double sum = 0.0;

        while (true){

            sum += 5;

            day ++;

            if(sum > 56.7){

                break;

            }

            sum -= 3.5;

        }

        System.out.println(day); //36

        

8

//循环嵌套,1~1000以内质数列表

//PS:质数是只能被1和自身整除的整数       

 int i,j;

        boolean isFlag = true;

        for (i = 2; i <= 100; i++) {

            for (j = 2; j <= Math.sqrt(i); j++) {   

                if(i % j == 0){

                    isFlag = false;

                    break;

                }

            }

            if(isFlag) {

                System.out.println(i);

            }

            isFlag = true;

        }   

    }

  

9

        //求数组中的最大值和最大值所在的下标

        //int型数组转Integer数组       

int[] nums={6,8,1,9,5,2,7};

        //方式一:

        int  max = 0;

        int index = 0;

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

            if(max < nums[i]){

                max = nums[i];

                index = i;

            }

        }

        //最大值

        System.out.println(max);    //9

        System.out.println(index);  //3



        //输出int型数组中最大值的下标

        //首先int型数组转Integer数组。boxed()装箱再转Integer数组

        Integer[] integers = Arrays.stream(nums).boxed().toArray(Integer[]::new);

        int maxValIndex = Arrays.asList(integers).indexOf(max);

        System.out.println(maxValIndex);  //3



        //求最大值方式二:

        int maxVal = Arrays.stream(nums).max().getAsInt();

        System.out.println(maxVal); //9

10

        //(选做)向一个长度为10的整型数组中随机生成100~9的随机整数,完成下列任务

        //1)统计每个数字出现了多少次

        //2)输出出现次数最多的数字

        //3)输出只出现一次的数字中最小的数字       

Random r = new Random();

        // 1. 声明源数组,包含10个0-9之间的随机数

        int[] src = new int[10];

        // 2. 声明一个标记数组,存放的是0-9,10个数字

        int[] flag = { 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 };

        // 3. 声明一个用来统计标记数组中数字在源

        // 数组中的个数

        int[] count = new int[flag.length];

        // 4. 给源数组赋值0-9之间的随机数

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

            src[i] = r.nextInt(10);

        }

        // 5. 统计标记数组中的每个元素在源数组中

        // 有多少个即给count数组赋值

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

            for (int j = 0; j < src.length; j++) {

                // 如果标记数组中的数字在源数组中有,则count+1

                if (flag[i] == src[j]) {

                    count[i]++;

                }

            }

        }

        // 6. 输出src和count的数据

        System.out.println("随机产生的数据如下:");

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

        // System.out.println(Arrays.toString(count));



        // a.统计每个数字出现的次数

        // 如果count中的元素的值大于0,则输出其下标和值

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

            if (count[i] > 0) {

                System.out.println("数字" + i + "出现" + count[i] + "次");

            }

        }



        // b.输出出现最多次数的数字

        // 假设第一个统计的数字就是最多那个

        int max = count[0];

        int index = 0;

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

            if (count[i] > max) {

                max = count[i];

                index = i;

            }

        }

        System.out.println("出现次数最多的数字是" + index);

        System.out.println("出现次数最多的数字是" + flag[index]);



        // c. 输出只出现一次的数字中最小的数字

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

            if (count[i] == 1) {

                System.out.println("出现1次的数字中最小的是" + i);

                break;

            }

        }

        

11

        //题目:古典问题:有一对兔子,从出生后第3个月起每个月都生一对兔子,

        //小兔子长到第三个月后每个月又生一对兔子,假如兔子都不死,键盘输入月份,问兔子对数为多少?

        //程序分析:这是一个菲波拉契数列问题,兔子的规律为数列1,1,2,3,5,8,13,21       

Scanner scanner = new Scanner(System.in);

        System.out.println("输入整数");

        int month = scanner.nextInt();



        int tot = 0;

        int a = 0;

        int b = 1;

        for(int j = 1; j <= month; j++){

            tot = a+b;

            a = b;

            b = tot;

            System.out.println("第"+j+"个月兔子数量为:" + a);

        }

        //输入10

        //第8个月兔子数量为:21

        //第9个月兔子数量为:34

        //第10个月兔子数量为:55



    //方式二:

        System.out.println(fun(month)); //55

    }



    private static int fun(int n) {

        if(n == 1 || n == 2){

            return 1;

        }else{

            return fun(n-1) + fun(n-2);

        }

    }

    //理解:n=1或n=2时为1,而n-1(前一位)和n-2(前两位)相加等于n, 1 1 2 3 5 8... 3+5=8

         12

        //将一个正整数分解质因数。例如:输入90,打印出

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值