表示程序正常退出
System.exit(status)
当status非0时,表示程序为非正常退出。
status=0, 关闭当前正在运行的虚拟机。
求质因数分解的程序如下:
两种算法:
一种是用System.exit(0)
// 若不加此句,代码在运行完System.out.println(number)后,会回到for中从i++开始执行,不断执行 else和后面的打印语句。是因为递归吗?
代码
package basic40;
public class Divid { public static void divide(int a){ for (int i = 2; i <= (int)(Math.sqrt(a)); i++){ if(a % i == 0){ System.out.print(i+"*"); a = a / i; divide(a); break; } } System.out.print(a); System.exit(0); } public static void main(String []args){ int a = 90; divide(a); }}
另一种是不用System.exit(0)
package basic40;
public class Divide2PrimeMultiple { //need to judge whether the last number is prime number public static void divide(int number) { if (isPrimeNumber(number)) { System.out.println(number); } else { int i = 2; while(i <=(int)(Math.sqrt(number))){ if (number % i == 0) { System.out.println(i + ","); number = number / i; divide(number); break; } else { i++; } } } }// } private static boolean isPrimeNumber(int number) { boolean flag = true; for (int i = 2; i <= (int) (Math.sqrt(number)); i++) { if (number % i == 0) { flag = false; break; } else { flag = true; } } return flag; } public static void fenjie(int n){ for(int i=2;i<=(int)(Math.sqrt(n));i++){ if(n%i==0){ System.out.print(i+"*"); fenjie(n/i); } } System.out.print(n); System.exit(0);///不能少这句,否则结果会出错 } public static void main (String []args){ int a = 90; divide(a);// divideNoJudge(a);// fenjie(a); }}麻烦很多,不仅有重复代码,而且增加运行负担。有时候在递归中强制关闭编译器是有必要的。