日常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编程练习题(每天进步一点点系列)的主要内容,如果未能解决你的问题,请参考以下文章