Loading... <div class="panel panel-default collapse-panel box-shadow-wrap-lg"><div class="panel-heading panel-collapse" data-toggle="collapse" data-target="#collapse-9e4d3d381c7844a0fbf0d87d721ccabf59" aria-expanded="true"><div class="accordion-toggle"><span style="">温馨提示!</span> <i class="pull-right fontello icon-fw fontello-angle-right"></i> </div> </div> <div class="panel-body collapse-panel-body"> <div id="collapse-9e4d3d381c7844a0fbf0d87d721ccabf59" class="collapse in collapse-content"><p></p> <div class="tip inlineBlock warning"> 文中代码均于VScode程序中正常运行,使用其他软件程序请适当做出对应的调整!! </div> <p></p></div></div></div> <div class="tip inlineBlock info"> 代码压缩包:<button class=" btn m-b-xs btn-primary " onclick="window.open('https://www.zmzaxg.top/usr/uploads/2023/11/165003500.zip','_blank')">java_for.zip</button> </div> ## And 1.简单逻辑算法 <div class="tip inlineBlock success simple small"> no01九九乘法表系列 no02星星系列 no03完数 no04斐波纳契数列 no05水仙花数 no06阶乘 no07回文数 no08输出最大值和最小值 </div> ### no01九九乘法表系列 ![请输入图片描述](https://www.zmzaxg.top/usr/uploads/2023/11/3412456249.png) 完整代码 ```java public class no01九九乘法表系列 {// 保持与java文件名称相对应 public static void main(String[] args) {// 文件程序的主方法,这里用于调用其他代码块 // 控制 hr();// hr分割 main0();// 调用常规99乘法表 hr(); main1();// 调用常规乘法表列倒叙 hr(); main2();// main1左右翻转 hr(); main3();// main0左右翻转 // 控制 } public static void hr() {// 代码分割 char character = '-'; // 打印字符 int count = 81; // 重复数 for (int i = 0; i < count; i++) { System.out.print(character); } System.out.print("\n"); } public static void main0() {// 常规99乘法表 for (int i = 1; i <= 9; i++) { // 控制行,从1开始循环 for (int j = 1; j <= i; j++) { // 控制每行对应的数 System.out.print(i + "*" + j + "=" + i * j + "\t"); } // 第一次循环i是1 j也是1 结果1*1=1 这是图1第一种 // 第二次循环i是2 j是1和2 结果2*1=2 2*2=4 // 第三次循环i是3 j是1、2、3 结果3*1=3 3*2=6 3*3=9 // 同理 System.out.println();// 每次循环完换行 } } public static void main1() {// 常规乘法表列倒叙 // 添加第二个程序的代码 for (int i = 9; i >= 1; i--) { // 控制行,从9开始循环 for (int j = 1; j <= i; j++) { // 控制每行对应的数 System.out.print(i + "*" + j + "=" + i * j + "\t"); } // 第一次循环i是9 j也是1到9 9*1 9*2.... 这是第二图 // 第二次循环i是8 j是1到8 // 同理 System.out.println();// 每次循环完换行 } } public static void main2() { for (int i = 9; i >= 1; i--) { // 控制行,从9开始循环 for (int m = 1; m <= 9 - i; m++) { System.out.print("\t");// 控制每行对应的数 // 第一次i=9的时候m是false不运行 // 第二次i=8的时候m是1,运行一次 // i=7,运行2次 同理 关键是9-i要想到 } for (int j = 1; j <= i; j++) { // 控制每行对应的数 System.out.print(i + "*" + j + "=" + i * j + "\t"); } // 第一次循环i是9 j也是1到9 // 第二次循环i是8 j是1到8 // 同理 System.out.println();// 每次循环完换行 } } public static void main3() { for (int i = 1; i <= 9; i++) { // 控制行,从9开始循环 for (int m = 9; m > i; m--) { System.out.print("\t");// 控制每行对应的数 // 第一次i=1的时候m循环8次 // 第二次i=2的时m循环7次 // 同理 } for (int j = 1; j <= i; j++) { // 控制每行对应的数 System.out.print(i + "*" + j + "=" + i * j + "\t"); } // 第一次循环i是1 j也是1到1 // 第二次循环i是2 j是1和2 // 同理 System.out.println();// 每次循环完换行 } } } ``` ### no02星星系列 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/11/3412026860.png) 完整代码 ```java public class no02星星系列 { public static void main(String[] args) { hr(); main0();// 平行四边形 hr(); main1();// 实心正三角形 hr(); main2();// 实心菱形 hr(); main3_0();// 空心菱形1 main3_1();// 空心菱形2 hr(); main4();// 空心正三角形 } public static void hr() {// 代码分割 char character = '-'; // 打印字符 int count = 30; // 重复数 for (int i = 0; i < count; i++) { System.out.print(character); } System.out.print("\n"); } public static void main0() { for (int i = 1; i <= 5; i++) {// i控制行,共5行 for (int j = 5; j > i; j--) {// j控制每一行的数量 System.out.print(" ");// 输出错误用其他字符代替一下 // i=1 j=4,3,2,1 输出4个空格 // i=2 j循环3次空格 同理 } for (int k = 1; k <= 5; k++) { System.out.print("*"); // K控制每行多少个 都是5个 } System.out.println(); } } public static void main1() { for (int i = 1; i <= 5; i++) {// i控制行,共5行 for (int j = 5; j > i; j--) {// j控制每一行的数量 System.out.print(" ");// 输出错误用其他字符代替一下 // i=1 j=4,3,2,1 输出4个空格 // i=2 j循环3次空格 同理 } for (int k = 1; k <= (2 * i) - 1; k++) { System.out.print("*"); // i=1 k=1 // i=2 K=3同理,3就是循环了3次* } System.out.println(); } } public static void main2() { for (int i = 1; i <= 5; i++) {// i控制行,共5行 for (int j = 5; j > i; j--) {// j控制每一行的数量 System.out.print(" "); // i=1 j=4,3,2,1 输出4个空格 // i=2 j循环3次 同理 } for (int k = 1; k <= (2 * i) - 1; k++) { System.out.print("*"); // i=1 k=1 // i=2 K=3同理,3就是循环了3次* } System.out.println(); } // 下面新的循环是控制倒的三角 for (int ii = 4; ii >= 1; ii--) { // ii控制行,共4行,倒3角有4行 for (int jj = 1; jj <= 5 - ii; jj++) {// jj控制每一行的数量 System.out.print(" "); // 发现ii=4时候 jj循环1次 ii=3 jj循环2次 } for (int kk = 1; kk <= (2 * ii) - 1; kk++) { System.out.print("*"); // ii=4 kk=7 就是7颗* // ii=3 Kk=3同理,3就是循环了3次* } System.out.println(); } } public static void main3_0() { for (int i = 1; i <= 5; i++) {// i控制行,共5行 for (int j = 5; j > i; j--) {// j控制每一行的数量 System.out.print(" "); // i=1 j=4,3,2,1 输出4个空格 // i=2 j循环3次 同理 } for (int k = i; k == i; k++) {// 即每次循环画1次 System.out.print("*"); // 前面画完空格 再接1颗*即可 } for (int m = 2; m < 2 * i - 1; m++) { System.out.print(" ");// 这是空格的规律从第二行开始 // i=1,不运行 i=2 2<3 第二行只循环1次空格 } if (i > 1) { for (int kk = i; kk == i; kk++) { System.out.print("*"); // 因为第一行已经有了。所以第二行开始 } } System.out.println(); } // 下面新的循环是控制倒的三角,同理 for (int ii = 4; ii >= 1; ii--) { // ii控制行,共4行,倒3角有4行 for (int jj = 1; jj <= 5 - ii; jj++) {// jj控制每一行的数量 System.out.print(" "); // 发现ii=4时候 jj循环1次 ii=3 jj循环2次 } for (int kk = ii; kk <= ii; kk++) { System.out.print("*"); } for (int m = 2; m < 2 * ii - 1; m++) { System.out.print(" "); } if (ii > 1) { for (int kk = ii; kk <= ii; kk++) { System.out.print("*"); } } System.out.println(); } } public static void main3_1() { for (int i = 1; i <= 5; i++) {// i控制行,共5行 for (int j = 5; j > i; j--) {// j控制每一行的数量 System.out.print(" "); // i=1 j=4,3,2,1 输出4个空格 // i=2 j循环3次 同理 } for (int m = 1; m <= 2 * i - 1; m++) { if (m == 1 || m == 2 * i - 1) { System.out.print("*");// 这是直接来判断开头和结尾 // i=1 m=1 进判断 循环1次* // i=2 m=1,2,3 正常循环3次 进判断,1时候打印*,m==2*2-1==3 所以m=2时候是空格 3时候才是* } else { System.out.print(" "); } } System.out.println(); } // 下面新的循环是控制倒的三角,同理 for (int ii = 4; ii >= 1; ii--) { // ii控制行,共4行,倒3角有4行 for (int jj = 1; jj <= 5 - ii; jj++) { System.out.print(" "); } for (int m = 1; m <= 2 * ii - 1; m++) { if (m == 1 || m == 2 * ii - 1) { System.out.print("*"); } else { System.out.print(" "); } } System.out.println(); } } public static void main4() { for (int i = 1; i <= 5; i++) {// i控制行,共5行 for (int j = 5; j > i; j--) {// j控制每一行的数量 System.out.print(" "); // i=1 j=4,3,2,1 输出4个空格 // i=2 j循环3次 同理 } for (int m = 1; m <= 2 * i - 1; m++) { if (m == 1 || m == 2 * i - 1 || i == 5) { System.out.print("*");// 这是直接来判断开头和结尾 // i=1 m=1 进判断 循环1次* // i=2 m=1,2,3 正常循环3次 进判断,1时候打印*,m==2*2-1==3 所以m=2时候是空格 3时候才是* // 补一个i==5就行了,就直接打印9颗,m<=9 } else { System.out.print(" "); } } System.out.println(); } } } ``` ### no03完数 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/11/1470937015.png) 完整代码 ```java import java.util.Scanner; public class no03完数 { public static void main(String[] args) { hr(); main0();// 用户输入判断 hr(); main1();// 区间存在 } public static void hr() {// 代码分割 char character = '-'; // 打印字符 int count = 10; // 重复数 for (int i = 0; i < count; i++) { System.out.print(character); } System.out.print("\n"); } public static void main0() { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个整数:"); int a = scanner.nextInt(); int sum = 0; for (int i = 1; i < a; i++) { if (a % i == 0) { sum += i; System.out.println(i); } } if (sum == a) { System.out.println(a + "是完数"); } else { System.out.println(a + "不是完数"); } } public static void main1() { for (int a = 100; a < 1000; a++) { int sum = 0; for (int i = 1; i < a; i++) { if (a % i == 0) { sum += i; } } if (sum == a) { System.out.println("100到999之间的完数有:" + a); } } } } ``` ### no04斐波纳契数列 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/11/73667086.png) 完整代码 ```java public class no04斐波纳契数列 { public static void main(String[] args) { int b = 1; int a = 0; for (int m = 1; m < 6; m++) { System.out.print(a + "\t" + b + "\t"); a = a + b; b = a + b; } } } ``` ### no05水仙花数 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/11/214843628.png) 完整代码 ```java import java.util.Scanner; public class no05水仙花数 { public static void main(String[] args) { hr(); main0();// 区域存在 main1();// 输入判断 } public static void hr() {// 代码分割 char character = '-'; // 打印字符 int count = 50; // 重复数 for (int i = 0; i < count; i++) { System.out.print(character); } System.out.print("\n"); } public static void main0() { for (int a = 100; a < 1000; a++) { int b = a / 100; // 百位 int c = a % 10; // 个位 int d = a / 10 % 10;// 十位 a == Math.pow(b,3) + Math.pow(c,3) + Math.pow(d,3) if (a == b * b * b + c * c * c + d * d * d) { System.out.println(a + "这是水仙数"); } } } public static void main1() { try { Scanner scanner = new Scanner(System.in); System.out.print("请输入一个三位的正整数:"); int a = scanner.nextInt(); int b = a / 100; // 百位 int c = a % 10; // 个位 int d = a / 10 % 10;// 十位 if (a == b * b * b + c * c * c + d * d * d) { System.out.println(a + "这是水仙数"); } else { System.out.println(a + "不是水仙数"); } } catch (Exception e) { System.out.println("您的输入有误!"); } } } ``` ### no06阶乘 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/11/271099493.png) 完整代码 ```java public class no06阶乘 { public static void main(String[] args) { jieChenHe1(); jieChenHe2(); } public static void jieChenHe1() { long sum = 0; int n = 5; for (int i = 1; i <= n; i += 2) { // 求1!+3!+5! long temp = 1; for (int j = 1; j <= i; j++) { temp *= j; } sum += temp; } System.out.println("1!+3!+5!= " + sum); } public static void jieChenHe2() { int sum = 0; int n = 5; int factorial = 1; for (int i = 1; i <= n; i++) { factorial *= i; sum += factorial; } System.out.println("1到5的阶乘和: " + sum); } } ``` ### no07回文数 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/11/3287656564.png)![image.png](https://www.zmzaxg.top/usr/uploads/2023/11/2045533629.png) 完整代码 ```java import java.util.Scanner; public class no07回文数 { public static void main(String[] args) { try { Scanner scanner = new Scanner(System.in); System.out.println("请输入一个数:"); int i = scanner.nextInt(); int temp = i; int num = 0; while (i != 0) { int ge = i % 10; i = i / 10; num = num * 10 + ge; } if (temp == num) { System.out.println("这是回文数"); } else { System.out.println("这不是回文数"); } } catch (Exception e) { System.out.println("输入有误!"); } } } ``` ### no08输出最大值和最小值 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/11/200018502.png) 完整代码 ```java ////////////////////////////// //输入10个数,输出最大值和最小值 ////////////////////////////// import java.util.Scanner; public class no08输出最大值和最小值 { public static void main(String[] args) { // getMaxAndMin(); newgetMaxAndMin();// 优化 } public static void getMaxAndMin() { try { Scanner sc = new Scanner(System.in); System.out.println("请输入第1个数:"); // 把第一次输入的数字赋给max和min int num1 = sc.nextInt(); int max = num1; int min = num1; int count = 2; while (count <= 10) { System.out.println("请输入第" + count + "个数字:"); int numx = sc.nextInt(); if (numx > max) { max = numx;// 比最大的值还大 } else if (numx < min) { min = numx;// 比最小的值还小 } count++; } System.out.println("最大值:" + max + ", 最小值:" + min); } catch (Exception e) { System.out.println("输入错误,请重新输入!!!"); getMaxAndMin(); } } public static void newgetMaxAndMin() { try { Scanner sc = new Scanner(System.in); System.out.println("请输入第1个数:"); // 把第一次输入的数字赋给max和min int num1 = sc.nextInt(); int max = num1; int min = num1; int count = 2; while (count <= 10) { try { System.out.println("请输入第" + count + "个数字:"); int numx = sc.nextInt(); if (numx > max) { max = numx;// 比最大的值还大 } else if (numx < min) { min = numx;// 比最小的值还小 } count++; } catch (Exception e) { System.out.println("输入错误,请重新输入!!!"); sc = new Scanner(System.in); } } System.out.println("最大值:" + max + ", 最小值:" + min); } catch (Exception e) { System.out.println("输入错误,请重新输入!!!"); getMaxAndMin(); } } } ``` ## And 2.经典的排序算法 <div class="tip inlineBlock error simple small"> no01冒泡排序 no02选择排序 no03插入排序 no04归并排序 no05希尔排序 no06快速排序 no07堆排序 no08基数排序 </div> ### no01冒泡排序 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/11/1037103726.png) 完整代码 ```java public class no01冒泡排序 { public static void main(String[] args) { main0(); System.out.println("\n"); main1();// 优化 } public static void main0() { int[] a = new int[] { 3, 1, 6, 2, 5 }; // 外层for循环控制轮数,循环数组长度-1轮 for (int i = 0; i < a.length - 1; i++) { // 内层for循环控制比较的次数 for (int k = 0; k < a.length - 1 - i; k++) { if (a[k] > a[k + 1]) { var c = a[k]; a[k] = a[k + 1]; a[k + 1] = c; } } } // 使用循环打印数组元素 for (int i = 0; i < a.length; i++) { System.out.print(a[i] + " "); } } public static void main1() { int[] a = new int[] { 3, 1, 4, 886, 2, 5 }; Boolean Sort = false; // 外层for循环控制轮数,循环n-1轮 for (int i = 0; i < a.length - 1; i++) { // 内层for循环控制比较的次数 if (!Sort) { Sort = true; for (int k = 0; k < a.length - 1 - i; k++) { if (a[k] > a[k + 1]) { var c = a[k]; a[k] = a[k + 1]; a[k + 1] = c; Sort = false; } } } else { break; } } for (int m = 0; m < a.length; m++) { System.out.print(a[m] + " "); } } } ``` ### no02选择排序 ![image.png](https://www.zmzaxg.top/usr/uploads/2023/11/1526283054.png) 完整代码 ```java public class no02选择排序 { public static void main(String[] args) { int[] arr = new int[] { 11, 2, 33, 24, 15 }; for (int i = 0; i < arr.length - 1; i++) { int k = i; for (int j = k + 1; j < arr.length; j++) { if (arr[j] < arr[k]) { k = j; } } if (k != i) { int t = arr[k]; arr[k] = arr[i]; arr[i] = t; } } for (int m = 0; m < arr.length; m++) { System.out.print(arr[m] + "\t"); } } } ``` ### no03插入排序 完整代码 ```java public class no03插入排序 { public static void main(String[] args) { int[] arr = new int[] { 11, 2, 33, 24, 15 }; for (int i = 0; i < arr.length; i++) { // arr[j]~arr[j-1] for (int j = i; j > 0; j--) { if (arr[j] < arr[j - 1]) { int t = arr[j]; arr[j] = arr[j - 1]; arr[j - 1] = t; } else { break; } } } for (int m = 0; m < arr.length; m++) { System.out.print(arr[m] + "\t"); } } } ``` ### no04归并排序 完整代码 ```java public class no04归并排序 { public static void main(String[] args) { int[] arr = new int[] { 11, 2, 33, 24, 15 }; mergeSort(arr, 0, arr.length - 1); System.out.println("排序后的数组:"); for (int num : arr) { System.out.print(num + " "); } } public static void mergeSort(int[] arr, int left, int right) { if (left < right) { int mid = (left + right) / 2; // 分割数组:递归调用mergeSort对左右两部分进行归并排序 mergeSort(arr, left, mid); mergeSort(arr, mid + 1, right); // 合并有序数组 merge(arr, left, mid, right); } } public static void merge(int[] arr, int left, int mid, int right) { int n1 = mid - left + 1; int n2 = right - mid; int[] L = new int[n1]; int[] R = new int[n2]; // 将数据复制到临时数组L和R for (int i = 0; i < n1; i++) { L[i] = arr[left + i]; } for (int j = 0; j < n2; j++) { R[j] = arr[mid + 1 + j]; } // 归并临时数组L和R int i = 0, j = 0; int k = left; while (i < n1 && j < n2) { if (L[i] <= R[j]) { arr[k] = L[i]; i++; } else { arr[k] = R[j]; j++; } k++; } // 复制剩余的元素 while (i < n1) { arr[k] = L[i]; i++; k++; } while (j < n2) { arr[k] = R[j]; j++; k++; } } } ``` ### no05希尔排序 完整代码 ```java public class no05希尔排序 { public static void main(String[] args) { int[] arr = new int[] { 11, 2, 33, 24, 15 }; shellSort(arr); System.out.println("排序后的数组:"); for (int num : arr) { System.out.print(num + " "); } } public static void shellSort(int[] arr) { int n = arr.length; // 初始步长为数组长度的一半,然后逐步减小步长 for (int gap = n / 2; gap > 0; gap /= 2) { // 对每个步长进行插入排序 for (int i = gap; i < n; i++) { int temp = arr[i]; int j = i; // 在当前步长下,将元素插入到正确的位置 while (j >= gap && arr[j - gap] > temp) { arr[j] = arr[j - gap]; j -= gap; } arr[j] = temp; } } } } ``` ### no06快速排序 完整代码 ```java public class no06快速排序 { public static void main(String[] args) { int[] arr = new int[] { 11, 2, 33, 24, 15 }; quickSort(arr, 0, arr.length - 1); System.out.println("排序后的数组:"); for (int num : arr) { System.out.print(num + " "); } } public static void quickSort(int[] arr, int low, int high) { if (low < high) { // 将数组划分为两部分,获取中间位置pivot int pivot = partition(arr, low, high); // 分别对左右部分进行递归快速排序 quickSort(arr, low, pivot - 1); quickSort(arr, pivot + 1, high); } } public static int partition(int[] arr, int low, int high) { // 选择最右边的元素作为基准值 int pivot = arr[high]; int i = low - 1; for (int j = low; j < high; j++) { if (arr[j] < pivot) { i++; // 交换arr[i]和arr[j] int temp = arr[i]; arr[i] = arr[j]; arr[j] = temp; } } // 将基准元素放到正确的位置 int temp = arr[i + 1]; arr[i + 1] = arr[high]; arr[high] = temp; return i + 1; } } ``` ### no07堆排序 完整代码 ```java public class no07堆排序 { public static void main(String[] args) { int[] arr = new int[] { 11, 2, 33, 24, 15 }; heapSort(arr); System.out.println("排序后的数组:"); for (int num : arr) { System.out.print(num + " "); } } public static void heapSort(int[] arr) { int n = arr.length; // 构建最大堆 for (int i = n / 2 - 1; i >= 0; i--) { heapify(arr, n, i); } // 逐个将最大元素移到数组末尾并调整堆 for (int i = n - 1; i > 0; i--) { // 将堆顶元素(最大值)与当前未排序区域的末尾元素交换 int temp = arr[0]; arr[0] = arr[i]; arr[i] = temp; // 在剩余未排序的区域构建最大堆 heapify(arr, i, 0); } } public static void heapify(int[] arr, int n, int i) { int largest = i; // 初始化父节点为最大节点 int left = 2 * i + 1; // 左子节点索引 int right = 2 * i + 2; // 右子节点索引 // 如果左子节点大于父节点,标记左子节点为最大节点 if (left < n && arr[left] > arr[largest]) { largest = left; } // 如果右子节点大于父节点,标记右子节点为最大节点 if (right < n && arr[right] > arr[largest]) { largest = right; } // 如果最大节点不是父节点,则交换父节点和最大节点,并递归调整堆 if (largest != i) { int temp = arr[i]; arr[i] = arr[largest]; arr[largest] = temp; heapify(arr, n, largest); } } } ``` ### no08基数排序 完整代码 ```java public class no08基数排序 { public static void main(String[] args) { int[] arr = new int[] { 11, 2, 33, 24, 15 }; radixSort(arr); System.out.println("排序后的数组:"); for (int num : arr) { System.out.print(num + " "); } } public static void radixSort(int[] arr) { int max = getMaxValue(arr); // 对每个位数进行计数排序 for (int exp = 1; max / exp > 0; exp *= 10) { countingSort(arr, exp); } } public static void countingSort(int[] arr, int exp) { int n = arr.length; int[] output = new int[n]; int[] count = new int[10]; // 统计每个数字的出现次数 for (int i = 0; i < n; i++) { int digit = (arr[i] / exp) % 10; count[digit]++; } // 计算累加次数,确定排序后的位置 for (int i = 1; i < 10; i++) { count[i] += count[i - 1]; } // 从后向前遍历原数组,并将元素放入正确的位置 for (int i = n - 1; i >= 0; i--) { int digit = (arr[i] / exp) % 10; output[count[digit] - 1] = arr[i]; count[digit]--; } // 将排序好的数组拷贝回原数组 for (int i = 0; i < n; i++) { arr[i] = output[i]; } } public static int getMaxValue(int[] arr) { int max = arr[0]; for (int i = 1; i < arr.length; i++) { if (arr[i] > max) { max = arr[i]; } } return max; } } ``` 最后修改:2024 年 08 月 30 日 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 觉得文章有用,可以赞赏请我喝瓶冰露