问答详情
源自:7-1 编程练习

变量声明位置不同而已,怎么输出不同的结果啊?困扰

 public void sort(int[] scores){

    Arrays.sort(scores) ;

     int num=0;

  for(int i=scores.length-1;i>=0;i--){

      if(scores[i]<0||scores[i]>100){

          continue;

      }

      num++;

      if(num>3){

          break;

      }

      System.out.println(scores[i]);

  }

    }

 public void sort(int[] scores){

    Arrays.sort(scores) ;

     

  for(int i=scores.length-1;i>=0;i--){

      if(scores[i]<0||scores[i]>100){

          continue;

      }

     int num=0

      num++;

      if(num>3){

          break;

      }

      System.out.println(scores[i]);

  }

    }

这两个代码我只是把int num=0放的位置不同,怎么输出的不一样啊,前者有3个数,后者有5个数

提问者:一起创业 2015-02-07 15:22

个回答

  • LeonardGrimm
    2015-03-08 20:36:01

    只出5个数是因为数组里的符合条件的都已经遍历完了。其他如上。

  • Jy_z
    2015-02-07 16:28:36

    简单来说,

    第一种num是在循环语句for之外定义,你循环一次,它自增一次,根据条件限制,最多它不能超过3

    第二种num你把它定义在循环语句for内,那么你循环一次,它自增后又被你定义为0了,无限num=0......

  • Jy_z
    2015-02-07 16:24:16

    第一种写法是对的,求出最后三位.

    第二种有两个问题:

    1.第二种代码,你的int num=0后面没加分号.

    2.先看for语句 (事实上这三个肯定是正数)

    第一次循环:最后一位元素---大于0---执行判断if条件---(不满足)即在0到100范围内---跳出if---定义num=0且自增(此时num=1)---再判断if(num大于3吗?)(不满足)跳出---输出scores[scores.length-1](即倒数第一个元素,最大值)-->然后执行i--

    第二次循环(问题在这里):,现在开始第二次循环---倒数第二个元素---大于0---执行判断if条件---(不满足)即在0到100范围内---跳出if---《定义num=0......》《之前第一次循环后num已经自增为1,这里又重新定义为0是干嘛的?只出5个数,没有无限循环已经很幸运了~~》


    最后两行才是你的症结所在.