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){ // 传入100 int 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,1 return 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) ; } } } 五、源代码地址 GitHub·地址 https://github.com/cicadasmile/java-base-parent GitEE·地址 https://gitee.com/cicadasmile/java-base-parent