《java练习题》习题集三

【程序21】
题目:求1+2!+3!+…+20!的和

【程序22】
题目:利用递归方法求5!。

/**
 * 【程序21】
 * 题目:求1+2!+3!+…+20!的和
 * 【程序22】
 * 题目:利用递归方法求5!。
 */
public class Subject21And22 {

    public static void main(String[] args) {
        int sum = factorialSum(20);
        System.out.println("1+2!+3!+…+20!之和:"+sum);
    }

    /**
     * 阶乘求和
     * @param num
     * @return
     */
    private static int factorialSum(int num) {
        int sum = 0;
        for (int j = 1; j <= num; j++) {
            sum = sum+factorial(j);
        }
        return sum;
    }

    /**
     * 计算num的阶乘!
     * @param num
     * @return
     */
    public static int factorial(int num){
        if(num == 1){
            return 1;
        }else{
           return num*factorial(num-1);
        }
    }
}

运行结果:

【程序23】
题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?

/**
 * 【程序23】
 * 题目:有5个人坐在一起,问第五个人多少岁?他说比第4个人大2岁。问第4个人岁数,他说比第3个人大2岁。问第三个人,又说比第2人大两岁。问第2个人,说比第一个人大两岁。最后问第一个人,他说是10岁。请问第五个人多大?
 */
public class Subject23 {
    public static void main(String[] args) {
        int ageNum = getAge(5);
        System.out.println("第五个人的年龄:"+ageNum);
    }

    /**
     * 获取年龄
     * @param p0
     * @return
     */
    private static int getAge(int p0) {
        if(p0 == 1){
            return 10;
        }else{
            return getAge(p0-1)+2;
        }
    }
}

运行结果:

【程序24】
题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。

/**
 * 【程序24】
 * 题目:给一个不多于5位的正整数,要求:一、求它是几位数,二、逆序打印出各位数字。
 */
public class Subject24 {

    public static void main(String[] args) {
        System.out.println("请输入需要分析的正整数:");
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();
        analysisInt(num);
    }

    /**
     * 分析正整数
     * @param num
     */
    private static void analysisInt(int num) {
        String tmpStr = String.valueOf(num);
        char[] arrStr =tmpStr.toCharArray();
        System.out.println("该正整数是"+arrStr.length+"位数。");
        System.out.println("倒序打印为:");
        for (int i = arrStr.length-1; i >= 0; i--) {
            System.out.print(arrStr[i]+" ");
        }
    }
}

运行结果:

【程序25】
题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。

import java.util.ArrayList;
import java.util.List;

/**
 * 【程序25】
 * 题目:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
 */
public class Subject25 {

    private static List<Integer> list = new ArrayList<>();

    public static void main(String[] args) {
        int num = 12321;
        palindromeNumber(num);
        if(list.get(0) == list.get(4) && list.get(1) == list.get(3)){
            System.out.println("数字("+num+")是回文数");
        }else{
            System.out.println("数字("+num+")不是回文数");
        }

        /***第二种方式**/
        char[] arr = (num+"").toCharArray();
        if(arr[0]==arr[4] && arr[1]==arr[3]){
            System.out.println("数字("+num+")是回文数");
        }else{
            System.out.println("数字("+num+")不是回文数");
        }
    }

    /**
     * 判断num是否是回文数
     * @param num
     */
    private static void palindromeNumber(int num) {
        int lenght =  (num+"").length()-1;
        int numTmp = 0;
        if(num < 10){
            numTmp =num;
        }else{
            numTmp = num/(int)Math.pow(10,lenght);
            int tmp =num - numTmp*(int)Math.pow(10,lenght);
            palindromeNumber(tmp);
        }
        list.add(numTmp);
    }
}

运行结果:

【程序26】
题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。

import java.util.Scanner;

/**
 * 【程序26】
 * 题目:请输入星期几的第一个字母来判断一下是星期几,如果第一个字母一样,则继续判断第二个字母。
 */
public class Subject26 {
    public static void main(String[] args) {
        System.out.println("请输入你现在心里想的哪个星期几(只需要前两个字母即可):");
        Scanner scanner = new Scanner(System.in);
        String  scannerStr= scanner.next();
        //判断输入的星期几
        weekDay(scannerStr);
    }

    /**
     * 判断输入的星期的星期几
     * @param scannerStr
     */
    private static void weekDay(String scannerStr) {
        char[] scannerArr = scannerStr.toCharArray();
        switch (scannerArr[0]){
            case ‘M‘: System.out.println("您输入的星期一"); break;
            case ‘T‘:
                switch (scannerArr[1]){
                    case ‘U‘: System.out.println("您输入的星期二"); break;
                    case ‘H‘: System.out.println("您输入的星期四"); break;
                    default:
                        System.out.println("您输入的不是星期,请重新输入:");
                        Scanner scanner = new Scanner(System.in);
                        scannerStr= scanner.next();
                        //判断输入的星期几
                        weekDay(scannerStr);
                } break;

            case ‘W‘: System.out.println("您输入的星期三"); break;
            case ‘F‘: System.out.println("您输入的星期五"); break;
            case ‘S‘:
                switch (scannerArr[1]){
                    case ‘A‘: System.out.println("您输入的星期六"); break;
                    case ‘U‘: System.out.println("您输入的星期天"); break;
                    default:
                        System.out.println("您输入的不是星期,请重新输入:");
                        Scanner scanner = new Scanner(System.in);
                        scannerStr= scanner.next();
                        //判断输入的星期几
                        weekDay(scannerStr);
                }break;
            default:
                System.out.println("您输入的不是星期,请重新输入:");
                Scanner scanner = new Scanner(System.in);
                scannerStr= scanner.next();
                //判断输入的星期几
                weekDay(scannerStr);
        }
    }
}

运行结果:

【程序27】
题目:对10个数进行排序

import java.util.Scanner;

/**
 * 【程序27】
 * 题目:对10个数进行排序
 */
public class Subject27 {

    public static void main(String[] args) {
        System.out.println("请输入10个整数:");
        Scanner scanner = new Scanner(System.in);

        int[] arr = new int[10];
        for (int i = 0; i <10 ; i++) {
            System.out.println("请输入第"+(i+1)+"个数:");
            int num = scanner.nextInt();
            arr[i] = num;
        }

        sortInt(arr);
    }

    /**
     * 对数组arr进行排序
     * @param arr
     */
    private static void sortInt(int[] arr) {
        int tmp = 0;
        for(int i =0 ;i<arr.length;i++){
            for (int j = i+1; j <arr.length ; j++) {
                if(arr[i] > arr[j]){
                    tmp = arr[i];
                    arr[i] = arr[j];
                    arr[j] = tmp;
                }
            }
        }

        System.out.println("从小到大排序为:");
        for (int i = 0; i <arr.length ; i++) {
            System.out.print(arr[i]+" ");
        }
    }
}

运行结果:

【程序28】
题目:求一个3*3矩阵对角线元素之和

import java.util.Random;

/**
 * 【程序28】
 * 题目:求一个3*3矩阵对角线元素之和
 */
public class Subject28 {

    public static void main(String[] args) {
        Random random = new Random();
        int[][] arr = new int[3][3];
        for (int i = 0; i < 3; i++) {
            for (int j = 0; j < 3; j++) {
                arr[i][j] = random.nextInt(10);
            }
        }

        seekDiagonalSum(arr);
    }

    /**
     * 计算矩阵对角线之后
     * @param arr
     */
    private static void seekDiagonalSum(int[][] arr) {
        int slash = 0;
        int backSlash = 0;

        for (int i = 0; i < arr.length; i++) {
            slash = slash + arr[i][i];
        }

        System.out.println("随机生成的3*3的矩阵为:");
        for (int i = 0; i < arr.length; i++) {
            for (int j = 0; j < arr[i].length ; j++) {
                System.out.print(arr[i][j] + " ");
                if(i+j == arr.length-1){
                    backSlash += arr[i][j];
                }
            }
            System.out.println("");
        }
        System.out.println("正向对角线之和:"+slash);
        System.out.println("反向对角线之和:"+backSlash);
    }
}

运行结果:

【程序29】
题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。

import java.util.Scanner;

/**
 * 【程序29】
 * 题目:有一个已经排好序的数组。现输入一个数,要求按原来的规律将它插入数组中。
 */
public class Subject29 {
    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6,7,8,0};
        System.out.println("请输入一个1到8之间的数:");
        Scanner scanner = new Scanner(System.in);
        int num = scanner.nextInt();

        for (int i = 0; i < arr.length-2 ; i++) {
            if(num >= arr[i] && num <= arr[i+1] ){
                for (int j = arr.length-1; j > i+1 ; j--) {
                    arr[j] = arr[j-1];
                }
                arr[i+1] = num;
                break;
            }
        }
        System.out.print("插入数字("+num+")之后的数组为:");
        for (int i = 0; i < arr.length; i++) {
            System.out.print(arr[i]+" ");
        }
    }
}

运行结果:

【程序30】
题目:将一个数组逆序输出。

/**
 * 【程序30】题目:将一个数组逆序输出。
 */
public class Subject30 {
    public static void main(String[] args) {
        int[] arr = new int[]{1,2,3,4,5,6,7,8,9};
        System.out.println("顺序打印:");
        printArray(arr);
        reverseOrder(arr);
    }

    /**
     * 将arr数组逆序处理
     * @param arr
     */
    private static void reverseOrder(int[] arr) {
        int tmp = 0;
        for (int i = 0; i < arr.length/2 ; i++) {
            tmp = arr[i];
            arr[i] = arr[arr.length-1-i];
            arr[arr.length-1-i] = tmp;
        }

        System.out.println("逆序打印:");
        printArray(arr);
    }

    /**
     * 打印数组
     * @param arr
     */
    private static void printArray(int[] arr) {
        for (int i = 0; i < arr.length ; i++) {
            System.out.print(arr[i]+" ");
        }
        System.out.println();
    }
}

运行结果:

参考:https://blog.csdn.net/zzzzzzzhu/article/details/82355001

原文地址:https://www.cnblogs.com/jssj/p/11260909.html

时间: 2024-08-04 03:35:56

《java练习题》习题集三的相关文章

疯狂java 讲义第三章练习题---画圆

public class PaintRound{ /** * @author Dream_e. * @version v1.0 */ private int r;//圆的半径 PaintRound(int r){ this.r = r; } public void paint(){ int y = 2*r;//y的最大值为半径的2倍 int x = 0; int c = 0; int z = 2;//坐标轴递减量. for(int j = y; j >= 0; j-=z){ x = getX(r

201671010140. 2016-2017-2 《Java程序设计》java学习第三周

java学习第三周       不知不觉,学习java已经是第三周了,不同于初见时的无措,慌张,在接触一段时日后,渐渐熟悉了一些,了解到了它的便利之处,也体会到了它的一些难点,本周主攻第四章,<对象与类>,事实上,在第二周的实验中,我就已经接触过它了,当时我并不理解Scanner方法使用时,为什么要使用import语句,现在,通过学习第四章,我知道了,通过控制台进行输入时,需要构造一个Scanner对象,并与"标准输入流"System.in关联,使用import语句引入ja

Java 线程第三版 第四章 Thread Notification 读书笔记

一.等待与通知 public final void wait() throws InterruptedException 等待条件的发生. public final void wait(long timeout) throws InterruptedException 等待条件的发生.如果通知没有在timeout指定的时间内发生,它还是会返回. public final void wait(long timeout, int nanos) throws InterruptedException

java入门第三步之数据库连接【转】

数据库连接可以说是学习web最基础的部分,也是非常重要的一部分,今天我们就来介绍下数据库的连接为下面学习真正的web打下基础 java中连接数据库一般有两种方式: 1.ODBC——Open Database Connectivity(开放数据库连接性):基于C语言的一套数据库编程接口,主要功能是提供数据库的访问和操作所有的数据库厂商对这套接口进行实现,不同数据库厂商提供的实现是不一样的,也就是通常所说的第三方支持,而这套编程接口就是我们的标准 2.JDBC——Java Database Conn

Java编程思想(三) —— 访问权限的控制

之前没去注意的修饰符,一般变量前面没添加,一个是不知道有什么用,一个是懒,后面遇到项目的时候就会发现私有和公有区别还是很大的. (1)首先是包名 使用一个类的时候,例如集合类,就需要引入这个包,然后再使用该包下面的类.如: package com.myown.iaiti; public class Print { static void print(String s){ System.out.println(s); } } 自定义的包,通过引入自己的包,以后你就可以使用自己写的方法进行字符串的打

Java 多线程(三) 线程的生命周期及优先级

Java 多线程(三) 线程的生命周期及优先级 线程的生命周期 线程的生命周期:一个线程从创建到消亡的过程. 如下图,表示线程生命周期中的各个状态: 线程的生命周期可以分为四个状态: 1.创建状态: 当用new操作符创建一个新的线程对象时,该线程处于创建状态. 处于创建状态的线程只是一个空的线程对象,系统不为它分配资源. 2.可运行状态: 执行线程的start()方法将为线程分配必须的系统资源,安排其运行,并调用线程体——run()方法,这样就使得该线程处于可运行状态(Runnable). 这一

Java设计模式(三)-装饰者模式

我们都知道,可以使用两种方式给一个类或者对象添加行为. 一是使用继承.继承是给一个类添加行为的比较有效的途径.通过使用继承,可以使得子类在拥有自身方法的同时,还可以拥有父类的方法.但是使用继承是静态的,在编译的时候就已经决定了子类的行为,我们不便于控制增加行为的方式和时机. 二是使用关联.组合即将一个对象嵌入到另一个对象中,由另一个对象来决定是否引用该对象来扩展自己的行为.这是一种动态的方式,我们可以在应用程序中动态的控制. 与继承相比,关联关系的优势就在于不会破坏类的封装性,且具有较好的松耦合

Java 线程第三版 第六章 高级同步议题 读书笔记

多线程数据同步错误比较难检测,因为通常是与事件的特定发生顺序有关. 一.同步术语 Barrier(屏障) barrier是多个Thread的集合点:所有的Thread都应该到齐在这个barrier之后才能允许它们继续下去. Condition variable(条件变量) 实际上不是变量,而是与某个lock有关联的变量. Event variable(事件变量) 条件变量的另一个名称. Critical section(临界区) 临界区是synchronized方法或者block. Lock(锁

Java 线程第三版 第八章 Thread与Collection Class 读书笔记

JDK1.2引入最有争议性的改变是将集合类默认为不是Thread安全性的. 一.Collection Class的概述 1. 具有Threadsafe 的Collection Class: java.util.Vector(List) 列表集合,通过索引操作. java.util.Stack(List) 继承自Vector,提供LIFO的顺序操作push进入,pop出元素. java.util.Hashtable(Map) 一个简单.无序的key与value的映射. java.util.conc

一大波Java来袭(三)Java常用类

本文简单介绍集中Java常用类 不同种类的工具用于处理不同的工作.比如:厨房中的工具用于烹饪:农场中的工具用于养殖--对于Java的学习中处理不同的工作也要采用不同的工具.如:处理数学函数问题用Math类.针对文件的操作采用File类--这也充分体现了Java面向对象的特点 一.字符串类(重点理解内存模型) (一)String Java.lang.String字符串常量,具有不可变性. (二)StringBuffer Java.lang.StringBuffer字符串可变量,是线程安全的. (三