Java学习 10.Java-数组习题

简介: Java学习 10.Java-数组习题

一、创建一个 int 类型的数组, 元素个数为 100, 并把每个元素依次设置为 1 - 100

代码实现

    public static void main(String[] args) {
        int[] arr=new int[100];
        for (int i = 0; i < arr.length; i++) {
            arr[i]=i+1;
        }
        System.out.println(Arrays.toString(arr));
    }

运行结果

二、改变原有数组元素的值

实现一个方法 transform, 以数组为参数, 循环将数组中的每个元素 乘以 2 , 并设置到对应的数组元素上. 例如 原数组为 {1, 2, 3}, 修改之后为 {2, 4, 6}

思路

传入数组,得到数组长度,将数组长度赋值给新数组长度,用数组长度进行遍历,将数组中每一个元素赋值给新数组的元素,最后返回新数组

代码实现

    public static int[] transform(int arr[])
    {
        int n= arr.length;
        int arr2[]=new int[n];
        for (int i = 0; i < n; i++) {
            arr2[i]=arr[i]*2;
        }
        return arr2;
    }
    public static void main(String[] args) {
        int arr[]={3,5,7,9};
        int arr2[]=transform(arr);
        System.out.println(Arrays.toString((arr2)));
    }

运行结果

三、数组所有元素之和

实现一个方法 sum, 以数组为参数, 求数组所有元素之和.

思路

定义一个变量,将数组进行遍历,将数组遍历得到的值加给定义的变量,返回变量

代码实现

    public static int[] transform(int arr[])
    {
        int n= arr.length;
        int arr2[]=new int[n];
        for (int i = 0; i < n; i++) {
            arr2[i]=arr[i]*2;
        }
        return arr2;
    }
    public static void main(String[] args) {
        int arr[]={3,5,7,9};
        int arr2[]=transform(arr);
        System.out.println(Arrays.toString((arr2)));
    }

运行结果

四、调整数组顺序使得奇数位于偶数之前。调整之后,不关心大小顺序。

如数组:[1,2,3,4,5,6]        调整后可能是:[1, 5, 3, 4, 2, 6]

思路

遍历数组,定义i,j下标,如果i下标遇到的对应元素为奇数,i往后走,j下标遇到的对应元素是偶数,j往前走

代码实现

        public static void reorder(int[] array){
            int i = 0;
            int j = array.length-1;
            while (i <j) {
                while (i < j && array[i] % 2 != 0) {
                    i++;//如果i下标遇到的对应元素为奇数,i则往后走
                }
                while (i < j && array[j] % 2 == 0) {
                    j--;//如果j下标遇到的对应元素为偶数,j则往前走
                }
                int tmp = array[i];
                array[i] = array[j];
                array[j] = tmp;
            }
        }
        public static void main(String[] args) {
            Scanner sc=new Scanner(System.in);
            System.out.println("请您输入数组的长度");
            int n=sc.nextInt();
            int[] array=new int[n];
            System.out.println("请您输入数组的值");
            for (int i = 0; i < array.length; i++) {
                array[i]=sc.nextInt();
            }
            reorder(array);
            System.out.println(Arrays.toString(array));
        }

运行结果

五、两数之和

给定一个整数数组 nums 和一个整数目标值 target,请你在该数组中找出 和为目标值 target 的那 两个 整数,并返回它们的数组下标。

思路

遍历数组元素,当数组元素与给出的目标值相等时返回该数组元素下标

代码实现

    public static int[] Nums(int[] nums,int target){
        for (int i = 0; i < nums.length; i++) {
            for (int j = i+1; j < nums.length; j++) {
                if(nums[i]+nums[j]==target){
                    return new int[]{i,j};
                }
            }
        }
        return null;
    }
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请您输入数组的长度");
        int n=sc.nextInt();
        int[] nums=new int[n];
        System.out.println("请您输入数组的值");
        for (int i = 0; i < n; i++) {
            nums[i]=sc.nextInt();
        }
        System.out.println("请您输入一个数");
        int target = sc.nextInt();
        int[] arr = Nums(nums, target);
        System.out.println(Arrays.toString(arr));
    }

运行结果

六、只出现一次的数字

给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。


思路

遍历数组,通过异或^运算,返回元素,因为只有一个元素只出现一次以外,其余元素都出现两次,所以进行遍历,因为a^a=0,异或卡在哪里,则哪个元素位置在哪里


异或运算的特点:

1.任何数和0做异或运算,结果还是原来那个数字,即a^0=a

2.任何数和本身做异或运算,结果为0,即a^a=0

3.异或运算满足交换律和结合律


代码实现

 public static void main(String[] args) {
        int arr[]={0};
        Scanner sc=new Scanner(System.in);
        int n= sc.nextInt();
        arr=new int[n];
        for (int i = 0; i < n; i++) {
            arr[i]= sc.nextInt();
        }
        int num=Num(arr);
        System.out.println(num);
    }
    public static int Num(int[] arr) {
        int num = 0;
        int length = arr.length;
        for (int i = 0; i < length; i++) {
            num ^= arr[i];
        }
        return num;
    }

运行结果

七、多数元素

给定一个大小为 n 的数组,找到其中的多数元素。多数元素是指在数组中出现次数 大于 ⌊ n/2 ⌋ 的元素。


你可以假设数组是非空的,并且给定的数组总是存在多数元素


思路

传定数组,通过for循环,定义变量,对每一个数再for循环进行遍历,如果有重复的数则再加一,最后判定重复的次数是否大于数组长度的一半,如果是则返回这个重复的数

代码实现

   public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        int n = sc.nextInt();
        int[] arr = {0};
        arr = new int[n];
        System.out.println("请输入数组元素(多数元素)");
        for (int i = 0; i < arr.length; i++) {
            arr[i] = sc.nextInt();
        }
        int newnum = MoreNum(arr);
        System.out.println(newnum);
    }
    public static int MoreNum(int[] arr) {
        int count = 0;
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr.length; j++) {
                if (arr[i] == arr[j]) {
                    count++;
                }
                if (count > arr.length / 2) {
                    return arr[i];
                }
            }
        }
            return -999;
    }

运行结果

八、存在连续三个奇数的数组

给你一个整数数组 arr,请你判断数组中是否存在连续三个元素都是奇数的情况:如果存在,请返回 true ;否则,返回 false

思路

遍历数组,如果遇到数目是奇数,则判断它的下一个和下下个数目是不是奇数,如果是则返回true,如果不存在则返回false

代码实现

    public static boolean Judge(int[] arr) {
        for (int i = 0; i < arr.length - 2; i++) {
            if (arr[i] % 2 == 1) {
                if (arr[i + 1] % 2 == 1) {
                    if (arr[i + 2] % 2 == 1) {
                        return true;
                    }
                }
            }
        }
        return false;
    }
    public static void main(String[] args) {
        Scanner sc=new Scanner(System.in);
        System.out.println("请您输入数组存储个数");
        int n= sc.nextInt();
        int[] arr;
        arr=new int[n];
        System.out.println("请您输入数组元素");
        for (int i = 0; i < arr.length; i++) {
            arr[i]= sc.nextInt();
        }
        boolean a=Judge(arr);
        System.out.println(Judge(arr));
    }

运行结果


目录
相关文章
|
26天前
|
Java API Maven
2025 Java 零基础到实战最新技术实操全攻略与学习指南
本教程涵盖Java从零基础到实战的全流程,基于2025年最新技术栈,包括JDK 21、IntelliJ IDEA 2025.1、Spring Boot 3.x、Maven 4及Docker容器化部署,帮助开发者快速掌握现代Java开发技能。
258 1
|
1月前
|
数据采集 搜索推荐 Java
Java 大视界 -- Java 大数据在智能教育虚拟学习环境构建与用户体验优化中的应用(221)
本文探讨 Java 大数据在智能教育虚拟学习环境中的应用,涵盖多源数据采集、个性化推荐、实时互动优化等核心技术,结合实际案例分析其在提升学习体验与教学质量中的成效,并展望未来发展方向与技术挑战。
|
2月前
|
前端开发 Java API
新手 Java 学习资料结合最新技术的精选推荐及高效学习资源参考
本文为新手推荐了涵盖Java基础到最新技术的学习资料,包括官方文档、在线课程、书籍、学习网站及实践平台,帮助系统掌握Java编程,并通过Spring Boot实战提升开发能力。
112 1
|
2月前
|
NoSQL Java 数据库
Java 全栈学习超全面知识图谱构建完整 Java 知识体系
本文全面讲解Java核心技术体系,涵盖基础语法、面向对象、集合框架、主流框架(Spring、Spring Boot、MyBatis)及三大实战项目(微服务电商、响应式博客、企业后台系统),助你系统掌握Java全栈开发技能。
178 1
|
1月前
|
存储 搜索推荐 安全
Java 大视界 --Java 大数据在智能教育学习效果评估与教学质量改进中的应用(209)
本文探讨了 Java 大数据在智能教育中的创新应用,涵盖学习效果评估、教学质量改进及个性化教学方案定制等内容,结合实战案例与代码解析,展现技术如何赋能教育智能化转型。
|
2月前
|
安全 算法 Java
Java 多线程:线程安全与同步控制的深度解析
本文介绍了 Java 多线程开发的关键技术,涵盖线程的创建与启动、线程安全问题及其解决方案,包括 synchronized 关键字、原子类和线程间通信机制。通过示例代码讲解了多线程编程中的常见问题与优化方法,帮助开发者提升程序性能与稳定性。
117 0
|
2月前
|
Java API 调度
从阻塞到畅通:Java虚拟线程开启并发新纪元
从阻塞到畅通:Java虚拟线程开启并发新纪元
277 83
|
3月前
|
存储 SQL 安全
Java 无锁方式实现高性能线程实战操作指南
本文深入探讨了现代高并发Java应用中单例模式的实现方式,分析了传统单例(如DCL)的局限性,并提出了多种无锁实现方案。包括基于ThreadLocal的延迟初始化、VarHandle原子操作、Record不可变对象、响应式编程(Reactor)以及CDI依赖注入等实现方式。每种方案均附有代码示例及适用场景,同时通过JMH性能测试对比各实现的优劣。最后,结合实际案例设计了一个高性能配置中心,展示了无锁单例在实际开发中的应用。总结中提出根据场景选择合适的实现方式,并遵循现代单例设计原则以优化性能和安全性。文中还提供了代码获取链接,便于读者实践与学习。
90 0
|
2月前
|
存储 Java 调度
Java虚拟线程:轻量级并发的革命性突破
Java虚拟线程:轻量级并发的革命性突破
222 83

热门文章

最新文章