首页 > 编程语言 >JavaSE基础编程十题(数组和方法部分)

JavaSE基础编程十题(数组和方法部分)

时间:2024-08-02 17:17:04浏览次数:7  
标签:arr int 编程 System length println 十题 JavaSE out

写在前面

继续昨天Java中的数组和方法部分的习题,今天写十题编程题,来看看你能写出来几题。答案也是仅供参考,如果有更好的解法欢迎在下面留言!

题目展示

1.数组查找操作:定义一个长度为10 的一维字符串数组,在每一个元素存放一个单词;然后运行时从命令行输入一个单词,程序判断数组是否包含有这个单词,包含 这个单词就打印出“Yes”,不包含就打印出“No”。
代码:

 public static void main(String[] args) {
        System.out.println("请输入一个单词:");
        Scanner sc = new Scanner(System.in);
        String word = sc.next();
        String[] array = new String[]{"first","time","you","sing"
                ,"song","got","practice","same","principle","applies"};
        for(int i = 0; i < array.length;i++)
        {
            if(word.equals(array[i]))
            {
                System.out.println("Yes");
                return;
            }
        }
        System.out.println("No");
    }

结果截图:

2.数组逆序操作:定义长度为10的数组,将数组元素对调,并输出对调前后的结果。 思路:把0索引和arr.length-1的元素交换,把1索引和arr.length-2的元素交换,只要交换到arr.length/2的时候即可。
代码:

public static void main(String[] args) {
        System.out.println("逆序前的数组为:");
        char[] array = new char[]{'a','b','c','d','e','f','g','h','i','j'};
        printArray(array);
        for (int start=0, end = array.length-1 ; start < end ; start++,end--)
        {
            char temp = array[start];
            array[start] = array[end];
            array[end]= temp;
        }
        System.out.println("逆序后的数组为:");
        printArray(array);
    }

    public static char[] printArray(char[] arr){
        for (int k = 0 ; k < arr.length ; k++){
            if(k==0){
                System.out.print("["+arr[k]+", ");
            }else if(k == arr.length-1){
                System.out.print(arr[k]+"]");
            }else {
                System.out.print(arr[k]+", ");
            }
        }
        System.out.println();
        return arr;
    }

结果截图:

3.合并数组操作:现有如下一个数组: int oldArr[]={1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5} 要求将以上数组中值为0的项去掉,将不为0的值存入一个新的数组,生成的新数组为: int newArr [] ={1,3,4,5,6,6,5,4,7,6,7,5}
代码:

public static void main(String[] args) {
        int[] oldArr = new int[]{1,3,4,5,0,0,6,6,0,5,4,7,6,7,0,5};
        System.out.println("原数组为:");
        printArray(oldArr);
        int count = 0;
        for (int i = 0 ; i<oldArr.length ; i++){
            if(oldArr[i] != 0){
                count++;
            }
        }
        int[] newArr = new int[count];
        int size = 0;
        for (int i = 0 ; i< oldArr.length;i++)
        {
            if(oldArr[i] != 0)
            {
                newArr[size] = oldArr[i];
                size++;
            }
        }
        System.out.println("去除0之后的数组为:");
        printArray(newArr);
    }
    public static int[] printArray(int[] arr){
        for (int k = 0 ; k < arr.length ; k++){
            if(k==0){
                System.out.print("["+arr[k]+", ");
            }else if(k == arr.length-1){
                System.out.print(arr[k]+"]");
            }else {
                System.out.print(arr[k]+", ");
            }
        }
        System.out.println();
        return arr;
    }

结果截图:

4.二分法查找操作:使用二分法查找有序数组中元素。找到返回索引,不存在输出-1。 分析:二分法查找的前提是数组有序。
假如有一组数为3,12,24,36,55,68,75,88要查给定的值24.
可设三个变量front,mid,end分别指向数据的上界,中间和下界,mid=(front+end)/2.
1)开始令front=0(指向3),end=7(指向88),则mid=3(指向36)。因为mid>x, 故应在前半段中查找。
2)令新的end=mid-1=2,而front=0不变,则新的mid=1。此时x>mid,故确定应 在后半段中查找。
3)令新的front=mid+1=2,而end=2不变,则新mid=2,此时a[mid]=x,查找成功。
4)如要查找的数不是数列中的数,例如x=25,当第三次判断时,x>a[mid],按以上规律,令front=mid+1,即front=3,出现front>end的情况,表示查找不成功。

代码:

public static void main(String[] args) {
        int[] a = new int[]{3, 36, 55, 68, 75, 88, 12, 24};
        int[] orderAsc = maoPaoOrder(a);
        System.out.println("升序排序好的数组为:");
        printArray(orderAsc);
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个您要查找的数:");
        int number = sc.nextInt();
        int front = 0;
        int end = a.length - 1;
        int res = -1;
        while (front <= end) {
            int mid = (front + end) / 2;
            if (number > a[mid]) {
                front = mid + 1;
            } else if (number < a[mid]) {
                end = mid - 1;
            } else {
                res = mid;
                break;
            }
        }
        if (res == -1) {
            System.out.println(-1);
        } else {
            System.out.println("查找成功!你要查找的数的索引为:" + res);
        }
    }

    public static int[] maoPaoOrder(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr;
    }

    public static int[] printArray(int[] arr) {
        for (int k = 0; k < arr.length; k++) {
            if (k == 0) {
                System.out.print("[" + arr[k] + ", ");
            } else if (k == arr.length - 1) {
                System.out.print(arr[k] + "]");
            } else {
                System.out.print(arr[k] + ", ");
            }
        }
        System.out.println();
        return arr;
    }

结果截图:

5.二维数组遍历求和操作:用二重循环求出二维数组b所有元素的和:int[][] b={{11},{21,22},{31,32,33}}。

代码:

  public static void main(String[] args) {
        int[][] b = {{11}, {21, 22}, {31, 32, 33}};
        int sum = 0;
        for (int i = 0; i < b.length; i++) {
            for (int j = 0; j < b[i].length; j++) {
                sum = sum + b[i][j];
            }
        }
        System.out.println("二维数组b的元素和为:" + sum);
    }

结果截图:

*6.题目:输入某年某月某日,判断这一天是这一年的第几天?分析:以3月5日为例,先把前两个月的加起来,然后再加上5天即本年第几天,特殊情况,闰年且输入月份大于3需考虑多加一天。可定义数组存储1-12月各月天数。 *
代码:

public static void main(String[] args) {
        int[] days = new int[]{31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
        int year = 0;
        int month = 0;
        int day = 0;
        int sum = 0;
        System.out.println("请输入日期,包含年月日,两个数之间用空格分隔:");
        Scanner sc = new Scanner(System.in);
        year = sc.nextInt();
        month = sc.nextInt();
        day = sc.nextInt();
        if ((year % 100 != 0 && year % 4 == 0) || year % 400 == 0) {
            days[1] = 29;
        }
        for (int i = 0; i < month - 1; i++) {
            sum = sum + days[i];
        }
        sum = sum + day;
        System.out.println(year + "年" + month + "月" + day + "日对应这一年的第" + sum + "天。");
    }

结果截图:

7.使用二分法查找有序数组中元素。找到返回索引,不存在输出-1。使用递归实现。
代码:

public static void main(String[] args) {
        int[] a = new int[]{3, 36, 55, 68, 75, 88, 12, 24};
        int[] orderAsc = maoPaoOrder(a);
        System.out.println("升序排序好的数组为:");
        printArray(orderAsc);
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个您要查找的数:");
        int number = sc.nextInt();
        int res = erFenSearch(a, number);
        if (res == -1) {
            System.out.println("查找失败!" + -1);
        } else {
            System.out.println("查找成功!你要查找的数的索引为:" + res);
        }
    }

    //二分查找的结果方法
    public static int erFenSearch(int[] arr, int x) {
        return erFenSearch(arr, x, 0, arr.length - 1);
    }

    //二分查找的方法
    public static int erFenSearch(int[] arr, int x, int front, int end) {
        int mid = (front + end) / 2;
        while (front <= end) {
            if (x > arr[mid]) {
                return erFenSearch(arr, x, mid + 1, end);
            } else if (x < arr[mid]) {
                return erFenSearch(arr, x, front, mid - 1);
            } else {
                return mid;
            }
        }
        return -1;
    }

    //冒泡排序数组
    public static int[] maoPaoOrder(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr;
    }

    //打印数组方法
    public static int[] printArray(int[] arr) {
        for (int k = 0; k < arr.length; k++) {
            if (k == 0) {
                System.out.print("[" + arr[k] + ", ");
            } else if (k == arr.length - 1) {
                System.out.print(arr[k] + "]");
            } else {
                System.out.print(arr[k] + ", ");
            }
        }
        System.out.println();
        return arr;
    }

结果截图:

8.数组A:1,7,9,11,13,15,17,19;数组b:2,4,6,8,10 两个数组合并为数组c,按升序排列。
代码:

public static void main(String[] args) {
        int[] a = new int[]{1, 7, 9, 11, 13, 15, 17, 19};
        System.out.println("数组a为:");
        printArray(a);
        int[] b = new int[]{2, 4, 6, 8, 10};
        System.out.println("数组b为:");
        printArray(b);
        int[] c = new int[a.length + b.length];
        int size = 0;
        for (int i = 0; i < c.length; i++) {
            if (i < a.length) {
                c[i] = a[i];
            } else if (i >= a.length) {
                c[i] = b[size];
                size++;
            }
        }
        System.out.println("合并后的数组c为:");
        printArray(c);
        int[] res = maoPaoOrder(c);
        System.out.println("排序后的数组c为:");
        printArray(res);
    }

    //冒泡排序数组的方法
    public static int[] maoPaoOrder(int[] arr) {
        for (int i = 0; i < arr.length; i++) {
            for (int j = i + 1; j < arr.length; j++) {
                if (arr[i] > arr[j]) {
                    int temp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = temp;
                }
            }
        }
        return arr;
    }

    //打印数组的方法
    public static int[] printArray(int[] arr) {
        for (int k = 0; k < arr.length; k++) {
            if (k == 0) {
                System.out.print("[" + arr[k] + ", ");
            } else if (k == arr.length - 1) {
                System.out.print(arr[k] + "]");
            } else {
                System.out.print(arr[k] + ", ");
            }
        }
        System.out.println();
        return arr;
    }

结果截图:

9.字符大小转换:输入一个字符,判断它是否为小写字母,如果是,将它转换成大写字母,否则,不转换;
代码:

 public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入一个英文字母:");
        char c = sc.next().charAt(0);
        if (65 <= c && c <= 90) {
            c += 32;
            System.out.println("转为小写字母为:"+c);
        } else if (97 <= c && c <= 122) {
            c -= 32;
            System.out.println("转为大写字母为:"+c);
        }else {
            System.out.println("输入无效,请输入a-z任意一个字母(不分大小写)再试!");
        }
        char res1 = upperLower(c);
        System.out.println("转换后:" + res1);
    }
    public static char upperLower(char a ){
        if (65 <= a && a <= 90) {
            a += 32;
            return a;
        } else if (97 <= a && a <= 122) {
            a -= 32;
            return a;
        }
        return '0';
    }

结果截图:

10.打印杨辉三角。
代码:

public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        System.out.println("请输入要打印的杨辉三角的行数:");
        int number = sc.nextInt();
        int[][] array = new int[number][number];
        for (int i = 0; i < number; i++) {
            array[i][0] = 1;
        }
        for (int j = 1; j < number; j++) {
            for (int k = 1; k <= j; k++) {
                array[j][k] = array[j - 1][k - 1] + array[j - 1][k];
            }
        }
        for (int i = 0; i < number; i++) {
            for (int j = i; j < number - 1; j++) {
                System.out.print("  ");
            }
            for (int k = 0; k <= i; k++) {
                System.out.print(array[i][k] + "   ");
            }
            System.out.println();
        }
    }

结果截图:

欢迎大家在下面评论出你的想法,如有错误还请批评指正。

标签:arr,int,编程,System,length,println,十题,JavaSE,out
From: https://www.cnblogs.com/cjybigdatablog/p/18337506

相关文章

  • Python教程(十):面向对象编程(OOP)
    目录专栏列表前言一、面向对象编程概述1.1类和对象1.2继承1.3多态1.4封装二、Python中的类和对象2.1定义类2.2`__init__`函数解释2.3创建对象三、继承3.1基本继承3.2创建子类对象四、多态五、封装六.访问限制七、综合实例结语专栏列表Python教程(一):环......
  • 解密编程的八大法宝(三)(附贪心算法、动态规划和字符串匹配算法详解)
    算法题中常见的几大解题方法有以下几种:暴力枚举法(BruteForce):这是最基本的解题方法,直接尝试所有可能的组合或排列来找到答案。这种方法适用于问题规模较小的情况,但在大多数情况下效率不高。贪心算法(GreedyAlgorithm):贪心算法在每一步都选择当前看起来最优的解,希望最终能......
  • C++核心编程
    C++核心编程主要针对C++面向对象编程技术,探讨C++中的核心和精髓1内存分区模型C++程序在执行时,将内存大方向划分为4个区域代码区:存放函数体的二进制代码,由操作系统进行管理的全局区:存放全局变量和静态变量及常量栈区:由编译器自动分配释放,存放函数的参数值,局部变量等堆区:由......
  • 深入理解PHP8的新特性:如何高效使用异步编程和代码
    PHP8是PHP编程语言的最新主要版本,带来了许多令人兴奋的新特性和改进。其中最突出的特性之一是对异步编程的支持。异步编程允许我们在处理并发任务时提高性能和响应能力。本文将深入探讨PHP8的异步编程特性,并介绍如何高效地使用它们。首先,让我们了解一下什么是异步编程。在传统的......
  • 网络编程基本流程介绍
    参照:恋恋风尘的官方博客讲解:C++asio网络编程笔记下载地址:gitee:笔记/c++/网络编程/asio网络编程基本流程网络编程的基本流程对于服务端是这样的服务端socket——创建socket对象。bind——绑定本机ip+port。listen——监听来电,若在监听到来电,则建立起连接。accept——......
  • 解密编程的八大法宝(四)(附二分查找、分治法和图论算法(深度和广度优先搜索、最短路径、最
    算法题中常见的几大解题方法有以下几种::暴力枚举法(BruteForce):这是最基本的解题方法,直接尝试所有可能的组合或排列来找到答案。这种方法适用于问题规模较小的情况,但在大多数情况下效率不高。贪心算法(GreedyAlgorithm):贪心算法在每一步都选择当前看起来最优的解,希望最终能......
  • 循环语句:解锁编程世界的无限迭代
    引言循环,它不仅仅是简单的重复,更是高效、优雅的代名词。无论是遍历数组、处理文件、模拟复杂系统,还是优化算法性能,循环都是不可或缺的基石。接下来将带您深入循环的奥秘,揭示其背后的工作原理,以及如何在编程实践中灵活运用,让您的代码在迭代中绽放光彩。循环流程图循环结构对......
  • 多线程编程
    目录思维导图:学习内容:1. 多线程基本概念2.多线程编程2.1 pthread_create:创建线程 2.2 pthread_self线程号的获取2.3 pthread_exit:线程退出函数课外作业:1、使用两个线程完成两个文件的拷贝,分支线程1拷贝前一半,分支线程2拷贝后一半,主线程回收两个分支线程的资......
  • Linux系统编程-临时文件
    临时文件:1、如何不冲突  2、及时销毁创建临时文件有两种方法:1、tmpnam  2、tmpfiletmpnam函数tmpnam的用法为一个临时文件创建一个名字。该方法创建临时文件,需要两步:1、产生文件名字   2、创建文件。所以从并发的角度,可能有两个用户获取同一个文件名字,因此......
  • 探索Mojo编程语言在实时通信领域的应用
    在当今快速发展的技术世界中,实时通信已成为许多应用程序的核心需求。无论是在线游戏、协作工具还是实时数据流应用,WebSockets和其他实时通信协议都扮演着至关重要的角色。本文将深入探讨一种假想的编程语言——Mojo——在实现这些实时通信功能方面的潜力和应用。1.引言实......