java吧 关注:1,247,192贴子:12,727,181
  • 11回复贴,共1

java初学者求教 标题长。。。。。。。。。。。。。。。。。。...

只看楼主收藏回复



想输出前五十个质数,就开头这点不一样,为什么结果也不一样?
附上完整版图片。

I


来自百度影音浏览器1楼2013-10-09 12:40回复
    求详细一点的解答。


    来自百度影音浏览器2楼2013-10-09 12:45
    回复


      来自百度影音浏览器3楼2013-10-09 13:07
      回复
        问题出在for (n = 2; n <= 200; n++) 这里 初始化的位置不对。
        因为你的双层for循环 中 内层循环达到的目标是将你从2遍历到m
        你的第二种写法:
        int m = 2;
        int n = 2;
        对m没啥影响,但是n就不一样了,变成了局部变量,每次从外层循环进入内层循环时,n就不再是从2开始到m了,m%n就没意义了,所以出来的结果也不准I


        IP属地:北京4楼2013-10-09 16:48
        收起回复
          把 int n=2 写在循环的外面,
          for(;n<m;n++) 那么第一次循环的时候 n 取值是初始值 2 ,
          第二次循环的时候 n 的取值就变成第一次循环之后的值 也就是3。
          后面的一次类推。


          IP属地:广东6楼2013-10-09 19:28
          收起回复
            我是这么理解的:
            int n=2;
            int m=2;
            // n 变成局部常量
            for(;m<=300;m++) <——第二次循环从这里开始
            for(;n<m;n++) <——括号内没指定n的值,故第二次循环时n的值被赋值为第一次结束后的值
            ……


            IP属地:广东7楼2013-10-09 21:10
            收起回复
              其实两种写法最本质的区别就是n的赋值
              第一种:int n;
              for (n = 2; n <= 200; n++) {}
              每一次进for循环时,不管n以前有没有值,值是多少,n都会被重新赋值为2(n=2),然后进入循环,值随着里面的条件而改变。 接着下一次for循环……
              第二种:int n = 2;
              for (; n <= 200; n++) {}
              你在外面给n赋初值为2,当每次进入for循环时,n的值就会随着里面的条件而改变。但是;前是空的,这种写法每次进入for循环没有对n进行初始化为2的操作,所以n的值就是上次for循环结束时的值了。
              等你学了局部变量就懂了,{}内定义的变量跟{}外定义的变量作用范围不一样。初学者都不容易,当初学for循环不知道写了多少个死循环……
              第一种写法稍微改改也是可行的:
              int c = 0;
              int m = 2;
              int n = 2;
              // int n, m;
              for (m = 2; m <= 200; m++) {
              for (; n <= 200; n++) {
              if (m % n == 0) {break;}
              }if (n >= m)
              {System.out.print(m + "\t");
              c++;
              if (c % 10 == 0) {
              System.out.println();
              }
              }
              n = 2;
              }
              }I


              IP属地:北京8楼2013-10-10 10:01
              收起回复