public static boolean beCompere(int[] a,int b){
    for(int i=0;i<20;i++){
       if(b==a[i]){
        return true;
       }
    }
    return false;
}
public static int loop(int[] a){ 
  int b=(int)(Math.random()*26)+97;
  if(beCompere(a, b)){
      loop(a);//1 问题点
  }
   return b;//2 问题点
        }
这只是一本分代码,问题是出在方法 loop()这段里,当执行到1 之后,重新回到loop()方法头,b的值也随机给了一个新值,接着就直接跳过if(beCompere(a, b)) 方法,跳到return b;请问各位为什么没有执行if(beCompere(a, b)) 这一段呢,而且return b的是上一次的随机数,并不是随机给得那个新值?

解决方案 »

  1.   

    跳过去应该是说beCompere(a,b)返回了false,所以没有执行if语句的分支吧。
    不然想不明白怎么会跳过去。
    return b 的值再看看吧,我也看不出来什么问题
      

  2.   

    晕,public static int loop(int[] a){ 
      int b=(int)(Math.random()*26)+97; 
      if(beCompere(a, b)){ 
          loop(a);//1 问题点 ---你这里没有 return 所以loop(a)没有意义,它loop多少次对结果没有影响.b不是指针.
      } 
      return b;//2 问题点 

      

  3.   

    问题解决了~ 谢谢orangemike  了,就是没有return才发生的问题 .
      

  4.   

    在 loop(a);前加个return 变成return loop(a);问题就解决了