首页 > 编程语言 >java学习笔记3-高级循环-练习题

java学习笔记3-高级循环-练习题

时间:2024-10-08 21:47:33浏览次数:10  
标签:练习题 arr java int 笔记 length 整数 数组 arr2

黑马java有关数组的几道感觉比较难的题目,记录一下。

第一题

现有一个整数数组,数组中的每个元素都是[0-9]之间的数字,从数组的最大索引位置开始到最小索引位置,依次表示整数的个位、十位、百位。。。依次类推。请编写程序计算,这个数组所表示的整数值。例如:

数组:{2, 1, 3, 5, 4}
表示的整数为:21354 // 注:是整数类型的两万一千三百五十四,不是字符串拼起来的。
思路:索引0对应的数乘10,索引1对应的数乘100,依次类推
package com.itheima.homework;

public class hm4 {
    public static void main(String[] args) {
        //现有一个整数数组,数组中的每个元素都是[0-9]之间的数字,
        // 从数组的最大索引位置开始到最小索引位置,依次表示整数的个位、十位、百位。。。
        // 依次类推。请编写程序计算,这个数组所表示的整数值

        //定义数组
        int[] arr = {4, 1, 3, 5, 4, 5, 6};

        //定义一个数存储整数值,int表示的范围会不会太小
        long sum = 0;

        //定义一个数表示要乘多少次10(是多少次而不是多少个)
        //int count = 1;


        //计算整数值
        for (int i = arr.length - 1; i >= 0; i--) {
            int count = arr.length - 1 - i;
            for(; count > 0; count--){
                arr[i] = arr[i] * 10;
            }
            sum = sum + arr[i];
        }

        //输出结果
        System.out.println("number = " + sum);

    }
}

例图:
外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

第二题

有一个数组,其中有十个元素从小到大依次排列 {12,14,23,45,66,68,70,77,90,91}。再通过键盘录入一个整数数字。要求:把数字放入数组序列中,生成一个新的数组,并且数组的元素依旧是从小到大排列的。执行效果如下:

请输入一个整数数字:
50
生成的新数组是:12 14 23 45 50 66 68 70 77 90 91

训练提示

  1. 数组的长度是不能改变的,所以增加一个元素需要定义一个新数组。
  2. 数组元素是从小到大排列的,如何找到新元素存放的位置?
package com.itheima.homework;

import java.util.Scanner;

public class hm6 {
    public static void main(String[] args) {
        //有十个元素从小到大依次排列 {12,14,23,45,66,68,70,77,90,91}
        //通过键盘录入一个整数数字
        //把数字放入数组序列中,生成一个新的数组,并且数组的元素依旧是从小到大排列的。

        //已知的数组
        int[] arr1 = {12,14,23,45,66,68,70,77,90,91};
        //定义未知的数组
        int[] arr2 = new int[arr1.length + 1];

        //输入整数
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个整数:");
        int num = sc.nextInt();  //接收整数

        //记录索引位置的值
        int index = 0;
        boolean flag = false;  //如果结束后还是flase,则表示num是最小的

        //找出整数在新数组中的位置
        for (int i = 0; i < arr1.length; i++) {
            if(num > arr1[i]){
                flag = true;
                index = i + 1;
            }
        }

        //给新的数组赋值
        if(flag == false){
            arr2[0] = num;
            for (int i = 0; i < arr1.length; i++) {
                arr2[i + 1] = arr1[i];
            }
        }else{
            for (int i = 0; i < index; i++) {
                arr2[i] = arr1[i];
            }
            arr2[index] = num;
            for(int i = index + 1; i < arr2.length; i++){
                arr2[i] = arr1[i - 1];
            }
        }

        //输出结果
        for (int i = 0; i < arr2.length; i++) {
            System.out.print(arr2[i] + " ");
        }
    }
}

第三题

定义一个数组其中包含多个数字。用自己的方式最终实现,奇数放在数组的左边,偶数放在数组的右边。(可以创建其他数组,不必须在原数组中改变)

解题方案

  1. 定义一个新数组。把原数组的奇数放在新数组的左边,把原数组的偶数放在新数组的右边。

  2. 不定义新数组。找到左边的偶数,和右边的奇数互换位置。

第二个解题方案我更熟悉
package com.itheima.homework;

public class hm7 {
    public static void main(String[] args) {
        //定义一个数组其中包含多个数字。
        // 用自己的方式最终实现,奇数放在数组的左边,偶数放在数组的右边。
        //不定义新数组。找到左边的偶数,和右边的奇数互换位置。

        //定义一个数组
        int[] arr = {12,14,23,45,66,68,70,77,90,91};

        //定义左右两个索引指针
        int left = 0;
        int right = arr.length - 1;

        //用于交换数值
        int temp = 0;

        //开始换位置,当left等于right结束换位置
        //只有交换了right才减减
        //只有没交换时(即为偶数时),left才加加
        for(;left < right;){
            if(arr[left] % 2 != 0){  //即为奇数
                temp = arr[left];
                arr[left] = arr[right];
                arr[right] = temp;
                right--;
            }else{  //为偶数的话指针向右挪一位
                left++;
            }
        }

        //输出
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i] + " ");
        }
    }
}

欢迎交流,有错误欢迎指正!

标签:练习题,arr,java,int,笔记,length,整数,数组,arr2
From: https://blog.csdn.net/weixin_74143480/article/details/142770449

相关文章

  • JAVA面试八股文(上)
    Object有哪些方法?hashcode,equals,wait(), tostringhashcode和equals有什么关系?Java中规定,hashcode相同equals不一定相同,equals相同那么hashcode一定相同,如果违反这种规则hashMap和hashSet不能正常使用wait和sleep有什么区别?sleep()方法线程不会释放对象锁,wait()方法线......
  • 练习题 - Scrapy爬虫框架 Settings 项目配置
    在使用Scrapy构建网络爬虫时,Settings框架配置是至关重要的部分。Settings是Scrapy框架的配置核心,它决定了爬虫的行为、请求的频率、用户代理的使用、数据存储等一系列关键功能。掌握Scrapy的配置设置,能够让你的爬虫更加高效、稳定和智能。通过合理配置,可以更好地模......
  • 练习题 - 爬虫数据存储方法
    在数据科学和编程实践中,数据的获取和存储是至关重要的步骤之一。在本文中我们将演示如何从《三国志13》的相关网页中抓取人物基础数据,并将这些数据保存到多种不同的文件格式和数据库中。具体来说我们将使用Python编写脚本,利用requests库获取网页内容,使用BeautifulSoup解析H......
  • java JNDI 注入学习
    javaJNDI注入学习JavaNamingDirectoryInterface,Java命名和目录接口,是SUN公司提供的一种标准的Java命名系统接口。通过调用JNDI的API应用程序可以定位资源和其他程序对象。JNDI可访问的现有目录及服务包括:JDBC(Java数据库连接)、LDAP(轻型目录访问协议)、RMI(远程方法调用)、DNS(域......
  • Java多线程编程基础与高级特性
    在现代软件开发中,多线程编程是一个重要的概念,它能够充分利用多核处理器的能力,提高程序的执行效率。Java语言内置了对多线程的支持,使得开发者可以方便地创建和管理线程。创建线程1.继承Thread类这是最直接的方式,通过创建一个继承自Thread类的子类,并重写run()方法来定义线程......
  • 2024年Java最新面试题总结(五年经验)
    第一章、基础技术栈1.1)集合,string等基础问题1、arraylist,linkedlist的区别,为啥集合有的快有的慢①ArrayList它的底层是数组,有下标的概念,可以通过index下标直接定位元素,所以查询快;在增删时,会进行扩容判断和拷贝,所以增删慢。②LinkedList的底层是双向链表。每次查询都要循环......
  • springboot+vue【开题+程序+论文】基于javaweb的校友管理系统
    系统程序文件列表开题报告内容研究背景随着信息技术的迅猛发展和互联网的广泛普及,校友管理成为了各高校和校友会工作的重要组成部分。传统的校友管理方式,如纸质档案、电话沟通、邮件联络等,已难以满足当前高效、便捷、互动的管理需求。特别是在全球范围内,校友分布广泛,信息更......
  • Redis笔记
    NoSQLRedisRedis五大数据类型Redis-KeyStringListSetHashZSetRedis三种特殊数据类型GeospatialHyperLogLogBitMap事务JedisSpringboot整合Redisconf详解Redis持久化Redis发布订阅Redis主从复制Redis缓存穿透和雪崩NoSQLNotonlySQL,泛指非关系型......
  • java计算机毕业设计服装打版交易平台(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容研究背景随着电子商务的蓬勃发展和消费者个性化需求的日益增长,服装行业正经历着前所未有的变革。传统的服装设计与生产流程已难以满足市场对快速响应和定制化......
  • java计算机毕业设计宠物中心(开题+程序+论文)
    本系统(程序+源码)带文档lw万字以上 文末可获取一份本项目的java源码和数据库参考。系统程序文件列表开题报告内容宠物中心管理系统研究说明研究背景:随着社会经济的发展和人们生活水平的提高,宠物已经成为许多家庭的重要成员。宠物的健康、护理与福利问题日益受到人们的关......