zoukankan      html  css  js  c++  java
  • System.exit(0)

    表示程序正常退出

    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);
        }
    }
    麻烦很多,不仅有重复代码,而且增加运行负担。

    有时候在递归中强制关闭编译器是有必要的。

  • 相关阅读:
    CPPFormatLibary提升效率的优化原理
    Unity4、Unity5移动平台多线程渲染在部分安卓手机上会造成闪退
    Hello World!
    Mac/IOS/linux获取当前时间包含微秒毫秒的代码
    插入图块闪烁问题的原因
    选择实体时的选项
    dataGridView 单元格添加combox checkbox
    交互拾取点时 右键取消 禁止出现点无效
    曲线上到指定点最近的点
    移除实体应用程序名(xdata)
  • 原文地址:https://www.cnblogs.com/fthjane/p/4776070.html
Copyright © 2011-2022 走看看