日常Java编程练习题(每天进步一点点系列)

Posted Amo Xiang

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了日常Java编程练习题(每天进步一点点系列)相关的知识,希望对你有一定的参考价值。

1.实现两个变量值的互换

变量的互换常见于数组排序算法中,当判断两个数组元素需要交互时,将创建一个临时变量来共同完成互换,临时变量的创建增加了系统资源的消耗(但是开发中一般都会使用这种方法),如果需要交换的是两个整数类型的变量,那么可以使用更高效的方法(面试的时候使用)。

public class VariableExchange {
    public static void main(String[] args) {
        int a = 10;
        int b = 20;
        int temp = a;
        System.out.println("变换交换前,a的值为:" + a + " b的值为:" + b);
        a = b;
        b = temp;
        System.out.println("变换交换后,a的值为:" + a + " b的值为:" + b);
        System.out.println("-------------------分隔线-----------------------");
        a = a ^ b;
        b = a ^ b;
        a = a ^ b;
        System.out.println("再次交换后,a的值为:" + a + " b的值为:" + b);
        System.out.println("-------------------分隔线-----------------------");
        a = a + b;
        b = a - b;
        a = a - b;
        System.out.println("再次交换后,a的值为:" + a + " b的值为:" + b);
        System.out.println("-------------------分隔线-----------------------");
        a = (a + b) - (b = a);
        System.out.println("再次交换后,a的值为:" + a + " b的值为:" + b);

    }
}

程序运行结果如下:

变换交换前,a的值为:10 b的值为:20
变换交换后,a的值为:20 b的值为:10
-------------------分隔线-----------------------
再次交换后,a的值为:10 b的值为:20
-------------------分隔线-----------------------
再次交换后,a的值为:20 b的值为:10
-------------------分隔线-----------------------
再次交换后,a的值为:10 b的值为:20

2.判断某一年是否为闰年

为了弥补因人为历法规定造成的年度天数与地球实际公转周 期的时间差,设立了366天的闰年,闰年的二月份有29天。本实例通过程序计算用户输入的年份是否为闰年,本实例计算闰年的关键技术是公式。满足两种条件的整数可以称为闰年,第一,能被4整除但不能被100整除;第二,能被400整除。该公式用 Java 语法实现的格式如下:

year % 4 == 0 && year % 100 != 0 || year % 400 == 0

完整代码如下:

import java.util.Scanner;

public class LeapYear {
    public static void main(String[] args) {
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个年份:");
        int year = scan.nextInt();// 接收用户输入
        if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { // 是闰年
            System.out.print(year + "是闰年!");
        } else { // 不是闰年
            System.out.print(year + "不是闰年!");
        }
    }
}

程序运行结果如下:

我测试了两次,结果如下:
请输入一个年份:
2021
2021不是闰年!
请输入一个年份:
2020
2020是闰年!

3.使用for循环输出杨辉三角

杨辉三角形由数字排列,可以把它看作一个数字表,其基本特性是两侧数值均为1,其他位置的数值是其正上方的数值与左上角数值之和,本实例通过数组来实现杨辉三角形。示例代码如下:

public class YanghuiTriangle {
    public static void main(String[] args) {
        int triangle[][] = new int[8][];// 创建二维数组
        // 遍历二维数组的第一层
        for (int i = 0; i < triangle.length; i++) {
            triangle[i] = new int[i + 1];// 初始化第二层数组的大小
            // 遍历第二层数组
            for (int j = 0; j <= triangle[i].length - 1; j++) {
                // 将两侧的数组元素赋值为1
                if (i == 0 || j == 0 || j == triangle[i].length - 1) {
                    triangle[i][j] = 1;
                } else {// 其它数值通过公式计算
                    triangle[i][j] = triangle[i - 1][j] + triangle[i - 1][j - 1];
                }
                // 输出数组元素
                System.out.print(triangle[i][j] + "\\t");
            }
            System.out.println();
        }
    }
}

程序运行结果如下:

1	
1	1	
1	2	1	
1	3	3	1	
1	4	6	4	1	
1	5	10	10	5	1	
1	6	15	20	15	6	1	
1	7	21	35	35	21	7	1	

4.使用嵌套循环在控制台上输出九九乘法表

Java基本语法中的for循环非常灵活并且可以嵌套使用,其中双层for循环是程序开发中使用最频繁的,常用于操作表格数据,对于行数与列数相同的表格操作代码比较简单,但是类似九九乘法表就不好控制了,因为它的列数要与行数对应,可以说这个表格是个三角形,本实例通过双层循环输出了这个九九乘法表。示例代码如下:

public class MultiplicationTable {
    public static void main(String[] args) {
        for (int i = 1; i <= 9; i++) {// 循环控制变量从1遍历到9
            for (int j = 1; j <= i; j++) {// 第二层循环控制变量与第一层最大索引相等
                // 输出计算结果但不换行
                System.out.print(j + "*" + i + "=" + i * j + "\\t");
            }
            System.out.println();// 在外层循环中换行
        }
    }
}

程序运行结果如下:

1*1=1	
1*2=2	2*2=4	
1*3=3	2*3=6	3*3=9	
1*4=4	2*4=8	3*4=12	4*4=16	
1*5=5	2*5=10	3*5=15	4*5=20	5*5=25	
1*6=6	2*6=12	3*6=18	4*6=24	5*6=30	6*6=36	
1*7=7	2*7=14	3*7=21	4*7=28	5*7=35	6*7=42	7*7=49	
1*8=8	2*8=16	3*8=24	4*8=32	5*8=40	6*8=48	7*8=56	8*8=64	
1*9=9	2*9=18	3*9=27	4*9=36	5*9=45	6*9=54	7*9=63	8*9=72	9*9=81	

5.for循环输出空心的菱形

本实例在输出菱形的基础上加大了难度,输出空心的菱形图案,在等级考试与公司面试时也出现过类似题目,实例目的在于熟练掌握for循环的嵌套使用。示例代码如下:

public class Diamond {
    public static void main(String[] args) {
        printHollowRhombus(10);
    }

    public static void printHollowRhombus(int size) {
        if (size % 2 == 0) {
            size++;// 计算菱形大小
        }
        for (int i = 0; i < size / 2 + 1; i++) {
            for (int j = size / 2 + 1; j > i + 1; j--) {
                System.out.print(" ");// 输出左上角位置的空白
            }
            for (int j = 0; j < 2 * i + 1; j++) {
                if (j == 0 || j == 2 * i) {
                    System.out.print("*");// 输出菱形上半部边缘
                } else {
                    System.out.print(" ");// 输出菱形上半部空心
                }
            }
            System.out.println("");
        }
        for (int i = size / 2 + 1; i < size; i++) {
            for (int j = 0; j < i - size / 2; j++) {
                System.out.print(" ");// 输出菱形左下角空白
            }
            for (int j = 0; j < 2 * size - 1 - 2 * i; j++) {
                if (j == 0 || j == 2 * (size - i - 1)) {
                    System.out.print("*");// 输出菱形下半部边缘
                } else {
                    System.out.print(" ");// 输出菱形下半部空心
                }
            }
            System.out.println("");
        }
    }
}

程序运行结果如下:

     *
    * *
   *   *
  *     *
 *       *
*         *
 *       *
  *     *
   *   *
    * *
     *

6.将二维数组中的行列互换

数组是程序开发中最常用的,其中二维数组使用最频繁,它可以存储表格数据,根据数组下标索引可以加入各种运算,图片的关键运算方法也是以二维数组为基础进行矩阵运算的。作为数组知识的巩固,本实例实现数组模拟表格行与列数据的交换,这在程序开发中常用于表格数据整理。示例代码如下:

public class ArrayRowColumnSwap { // 创建类
    public static void main(String[] args) {
        // 创建2维数组
        int arr[][] = new int[][]{{1, 2, 3}, {4, 5, 6}, {7, 8, 9}};
        System.out.println("行列互调前:");
        // 输出2维数组
        printArray(arr);
        int arr2[][] = new int[arr.length][arr.length];
        for (int i = 0; i < arr.length; i++) {// 调整数组行列数据
            for (int j = 0; j < arr[i].length; j++) {
                arr2[i][j] = arr[j][i];
            }
        }
        System.out.println("行列互调后:");
        // 输出2维数组
        printArray(arr);
    }

    private static void printArray(int[][] arr) {
        for (int i = 0; i < arr.length; i++) {// 遍历数组
            for (int j = 0; j < arr.length; j++) {
                System.out.print(arr[i][j] + " ");// 输出数组元素
            }
            System.out.println();
        }
    }
}

程序运行结果如下:

行列互调前:
1 2 3 
4 5 6 
7 8 9 
行列互调后:
1 2 3 
4 5 6 
7 8 9 

7.有四个数字:1、2、3、4,能组成多少个互不相同且无重复数字的三位数?各是多少?

public class Test1 {
    public static void main(String[] args) {
        int count = 0;  //计数器
        for (int i = 1; i < 5; i++) {
            for (int j = 1; j < 5; j++) {
                for (int k = 1; k < 5; k++) {
                    if (i != j && i != k && j != k) {
                        count ++; //# 符合条件计数器就+1
                        System.out.println(i * 100 + j * 10 + k);//打印符合条件的三位数
                    }
                }
            }
        }
        System.out.println(count);//打印符合条件的三位数的个数
    }
}

程序运行结果如下:

123
124
132
134
142
143
213
214
231
234
241
243
312
314
321
324
341
342
412
413
421
423
431
432
24

8.求应发奖金数

import java.util.Scanner;

public class Test2 {
    public static void main(String[] args) {
        //# 需求: 企业发放的奖金根据利润提成。从键盘输入当月利润I,求应发放奖金总数?
        //# 利润(i)低于或等于10万元时,奖金可提10%;
        //# 利润高于10万元,低于20万元时,低于10万元的部分按10%提成,高于10万元的部分,可提成7.5%;
        //# 20万到40万之间时,高于20万元的部分,可提成5%;
        //# 40万到60万之间时高于40万元的部分,可提成3%;
        //# 60万到100万之间时,高于60万元的部分,可提成1.5%
        //# 高于100万元时,超过100万元的部分按1%提成
        int[] profit = {1000000, 600000, 400000, 200000, 100000, 0}; //利润
        double[] rate = {0.01, 0.015, 0.03, 0.05, 0.075, 0.1}; //利率
        double bonus = 0; //#奖金
        // 键盘录入当月的利润i
        Scanner scan = new Scanner(System.in);
        System.out.println(">>>:");
        int i = scan.nextInt();// 接收用户输入
        for (int j = 0; j < profit.length; j++) {
            if (i > profit[j]) {
                bonus += (i - profit[j]) * rate[j];  //减去基本数 再计算奖金
                i = profit[j];  //下次计算的利润值
            }
        }
        System.out.println(bonus);
    }
}

程序运行结果如下:

>>>:
120000
11500.0

9. 输入某年某月某日,判断这一天是这一年的第几天?

import java.util.Scanner;

public class Test3 {
    public static void main(String[] args) {
//        # 需求:输入某年某月某日,判断这一天是这一年的第几天?
//        # 思路:以5月20日为例,应该先把前四个月的加起来,然后再加上20天即本年的第几天
//        # 特殊情况就是: 如果年份为闰年且输入月份大于2时需考虑多加一天
        Scanner scan = new Scanner(System.in);
        System.out.println("请输入一个年份:");
        int year = scan.nextInt();// 接收用户输入
        System.out.println("请输入一个月份:");
        int month = scan.nextInt();// 接收用户输入
        System.out.println("请输入一个天数:");
        int day = scan.nextInt();// 接收用户输入
        int sum_day = 0;  // 第几天
        int leap_year = 0;  // 闰年

        //使用数组定义天数
        //如果输入的月份是1月份,则直接计算day即可
        // 如果输入的月份是2月份,则要先计算出1月份的天数,即为31天 以此类推
//    # 1  2   3   4   5    6    7    8    9    10   11   12
//    # 0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334
        int[] months = {0, 31, 59, 90, 120, 151, 181, 212, 243, 273, 304, 334};
        //根据输入的月份,计算出前几个月的天数
        if (0 < month && month <= 12) {
            sum_day = months[month - 1];
        } else {
            System.out.println("输入的月份有误");
        }
        //判断是否为闰年:
        //1. 能被400整除 或者是 2. 能被4整除并且不能被100

以上是关于日常Java编程练习题(每天进步一点点系列)的主要内容,如果未能解决你的问题,请参考以下文章

日常Java练习题(每天进步一点点系列)

日常Java练习题(每天进步一点点系列)

日常Java练习题(每天进步一点点系列)

日常Java练习题(每天进步一点点系列)

日常Java练习题(每天进步一点点系列)

日常Java练习题(每天进步一点点系列)