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

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

  • 相关阅读:
    浅谈数据分析中的“暗物质”
    浅谈数据分析中的“暗物质”
    房屋价格数据采集与分析
    房屋价格数据采集与分析
    基于Python对象引用、可变性和垃圾回收详解
    基于Python对象引用、可变性和垃圾回收详解
    人脸识别中常用的几种分类器
    人脸识别中常用的几种分类器
    解析新零售,互联网大数据时代的到来
    osg::NodeVisitor中计算一个节点对应的世界变换矩阵、法向量、顶点坐标
  • 原文地址:https://www.cnblogs.com/fthjane/p/4776070.html
Copyright © 2020-2023  润新知