黑马程序员技术交流社区

标题: java基础,可有大神求帮助? [打印本页]

作者: 永飞    时间: 2015-8-11 10:46
标题: java基础,可有大神求帮助?
这个程序是怎么运行的?流程是什么?

/*
题目:将一个正整数分解质因数。例如:输入90,打印出90=2*3*3*5。
程序分析:对n进行分解质因数,应先找到一个最小的质数k,然后按下述步骤完成:
(1)如果这个质数恰等于n,则说明分解质因数的过程已经结束,打印出即可。
(2)如果n<>k,但n能被k整除,则应打印出k的值,并用n除以k的商,作为新的正整数n,重复执行第一步。
(3)如果n不能被k整除,则用k+1作为k的值,重复执行第一步。
*/
class Demo
{
       
        public static void main(String[] args){
                int n = 30;
                decompose(n);
        }
        private static void decompose(int n){
                System.out.print(n+"=");
                for(int i=2;i<n+1;i++){    //   2<=i<=n
                        while(n%i==0 && n!=i){
                                n/=i;
                                System.out.print(i+"*");
                        }
                        if(n==i){
                                System.out.println(i);
                                break;
                        }
                }
       
        }
}


作者: 18027587106    时间: 2015-8-11 11:40
int num=90;
                int temp=2;
                System.out.print("num="+num+"=");
                for(;temp<=num;temp++){
                       
                        if(num%temp==0)
                        {
                                System.out.print(temp+"*");
                                num=num/temp;
                        }
                       
                        //temp++;
                       
                }
               
                        System.out.print(num);
作者: 永飞    时间: 2015-8-11 12:03
18027587106 发表于 2015-8-11 11:40
int num=90;
                int temp=2;
                System.out.print("num="+num+"=");

这个是什么意思呀
作者: 怪我?    时间: 2015-8-11 14:08
永飞 发表于 2015-8-11 12:03
这个是什么意思呀

那就是一个输出哦,输出你的分解的那个数{:2_35:}
作者: 耀阳圣尊    时间: 2015-8-11 14:12
首先执行decompose()方法。
输出 30=
1、执行for循环,发现i=2;n=30,i<n
2、执行while循环,n能整出i,并且n不等于i
3、执行while循环体,n/=i;也就是30/2,之后输出i;
4、此时程序打印30=2*
5、执行完循环体之后就会在判断while的表达式是否成立。发现条件成立。执行 n是否等于i。发现不等于再次换到while的循环体。
之后就是重复上面的动作了。


如果您觉得我的回答还满意的话,请回复一下我
我的QQ:2355928351
如果您还有其他的入学前问题可以加我的QQ


作者: 永飞    时间: 2015-8-11 15:45
耀阳圣尊 发表于 2015-8-11 14:12
首先执行decompose()方法。
输出 30=
1、执行for循环,发现i=2;n=30,i

赞了,好详细,谢谢啦
作者: 怪我?    时间: 2015-8-11 16:00
    public static void decompose(int n){         int num = n;         int demp = 2;         for(;demp<= num;demp ++) {             if(num%demp == 0) {                 System.out.print(demp);                 if(num != demp) {                     System.out.print("*");                 }                 num = num/demp;                 demp = 2;             }         }     }     public static void main(String[] args) {         int n = 90;         System.out.print(n + "=");         decompose(n);     }
作者: 小柒    时间: 2015-8-11 17:49
程序是从main方法开始执行的,将30赋给n,然后执行decompose()方法,进入循环:这个循环结构就是分解质因数的过程,一个数除以1没有意义,所以循环从2开始。
当i=2时,判断i是否<n+1,实际上就是判断是否i<=n,然后进入while循环,其实这里的判断条件可以是 while(n%i==0 && n==i),下面的if语句就可以不用写了,但是这样,你输出的分解质因数的结果,就会出现这样90=2*3*3*5* 的情况,所以有了你现在写的这个操作让n!=i,如果n==i了说明就是最后一个质因数了,就不用加*号了,直接打印出i就可以了。
while循环的思路是,判断一个数的质因数都有哪些,执行步骤是,一个数先除以2,(为什么不从1开始,前面说过了)如果余数为零了,那么再用这个数除以2的结果在去除以2,如果满足条件就继续除以2,知道不满足,就退出当前的while循环,i累加就开始除以3,依次除到最后一个数等于你for循环循环的次数,就说明分解完成了,那一个数做例子。

80 程序开始的时候80/2 余数为零,这时候还应该在继续除以2,(因为有可能这个数的质因数有多个2组成,所以不能看到当80/2余数为零的时候就直接除以3)而且是用你80/2之后的结果去除以2,所以是40/2,余数依然为零,继续除以2,20/2,余数依然为零,继续除以2,10/2,余数依然为零,5/2,余数不为零,while循环条件不满足,终止while循环,继续从for循环开始,所以是5/3,余数不为零,接着5/4,余数也不为零,继续5/5,这时候余数为零了,而且通过观察已经除到最后了,所以当你除到最后的结果等于for循环的次数的时候,就终止循环,也就有了, if(n==i){System.out.println(i);break;}这条语句。希望你能理解明白。
作者: 王哲zhe    时间: 2015-8-11 21:05
666666666666666
作者: 永飞    时间: 2015-8-15 21:57
耀阳圣尊 发表于 2015-8-11 14:12
首先执行decompose()方法。
输出 30=
1、执行for循环,发现i=2;n=30,i

我已经在黑马学习啦
作者: 亚瑟王的神剑    时间: 2015-8-15 22:30
看了一下,不错




欢迎光临 黑马程序员技术交流社区 (http://bbs.itheima.com/) 黑马程序员IT技术论坛 X3.2