java基础算法和结构 详解java常用算法( 二 )


  • Node01:for循环作为计算中的常用方式;
  • Node02:foreach遍历模式,简化循环操作,也可以改写为for语句;
  • Node03:循环for语句的基础执行机制,两道面试常见题;
注意:越是基础的东西,学起来越难,for语句作为很多算法实现的基础控制,理解起来相当的绕 。
2、While循环while循环语句首先判断条件是否成立,成立才执行循环体;
do···while循环语句先执行一次循环体,然后判断条件是否成立,所以do···while至少会执行一次;
public class Process05 {public static void main(String[] args) {int num1 = 1;int num2 = 1;// while循环while(num1 <= 3) {System.out.println("num1 == " + num1);num1++;}// do...while循环do {System.out.println("num2 == " + num2);num2++;} while(num2 <= 3);}}注意:while循环在实际的开发中,因为极其容易导致死循环,所以使用并不多 。
三、流程中断Java中有三种流程中断语句,关键字分别为break、continue、return语句 。
1、Return语句Java中最常用的流程控制关键字,当执行return语句后,从该方法返回,返回到调用该方法的业务流程中 。
public class Process06 {public static void main(String[] args) {System.out.println(getNum1());System.out.println(getNum2());}public static int getNum1 (){int a =100;try{return a+1;// 这里是运算逻辑,非赋值}catch(Exception e){e.printStackTrace();}finally{return a;}}public static int getNum2 (){int a =100;try{return a++;//a++ -> a=a+1 此时a的值改变}catch(Exception e){e.printStackTrace();}finally{return a;}}}return 常在位置
  • return语句只在方法最后出现一次 。
  • return语句仅在try和catch里面都出现 。
  • return语句仅在try和方法最后都出现 。
  • return语句仅在catch和方法的最后都出现 。
2、Break语句break中断语句常用在for、while、do···while循环中,用于退出当前整个循环流程,非当前这一次循环 。
public class Process07 {public static void main(String[] args) {for (int i = 1 ; i < 3 ; i++){if (i == 2){break ;}System.out.println("i = " + i);}}}3、Continue语句Continue中断语句常用在for、while、do···while循环中,用于退出当前这一次循环,进入下一次循环 。
public class Process08 {public static void main(String[] args) {for (int i = 1 ; i < 3 ; i++){if (i == 1){continue ;}System.out.println("i = " + i);}}}四、应用场景1、冒泡排序算法public class Process09 {public static void main(String[] args) {int[] score = {9,8,7,6,5} ;// 排序次数:最多 length - 1 次for (int i = 0 ; i < score.length -1 ; i ++){// 当前排序的集合区间,排序完一个数据就放弃一个for (int j = 0 ; j < score.length - i - 1 ; j++){// 冒泡排序:把结果大的向后扔if (score[j] > score[j+1]){int temp = score[j] ;score[j] = score[j+1] ;score[j+1] = temp ;}}}// 输出排序后的结果集for (int i = 0 ; i < score.length ; i++){System.out.print(score[i]);}}}2、排列组合算法有1、2、3、4个数字,能组成多少个互不相同且无重复数字的三位数?都是多少?
public class Process10 {public static void main(String[] args) {arrange() ;}public static void arrange (){int i=0; // 百位数int j=0; // 十位数int k=0; // 个位数int t=0; // 计数器for (i = 1 ; i <= 4 ; i++){for (j = 1 ; j <= 4 ; j++){for (k = 1 ; k <=4 ; k++){if (i != j && j != k && k != i){t += 1 ;System.out.print(i*100+j*10+k+"--");}}}}System.out.println();System.out.println("t="+t);}}3、递归常见算法基于递归思想的各种计算方法实现 。
public class Process11 {public static void main(String[] args) {System.out.println(getSumOne(100));System.out.println(getSumTwo(30));System.out.println(getSumThree(5));}/*** 使用递归的方式计算1+2+...+100*/public static int getSumOne (int i){ // 传入100int sum ;if (i == 1){return 1 ;}else {sum = i + getSumOne(i - 1) ;}return sum ;}/*** 一列数的规则如下: 1、1、2、3、5、8、13、21、34...* 求第30位数是多少,用递归算法实现*/public static int getSumTwo (int i){ // 传入第几位数下标if (i <= 0){return 0 ;} else if (i == 1 || i == 2){ // 处理前面2位的1,1return 1 ;} else { // 当前位数是前两位之和return getSumTwo(i - 1) + getSumTwo(i - 2) ;}}/*** 1*2*3*...*100 递归计算阶乘*/public static int getSumThree (int i){if (i == 1){return i ;} else {return i * getSumThree (i - 1) ;}}}

推荐阅读