Codingbat数组2没有14

时间:2014-03-18 15:07:18

标签: java

我在编码中遇到问题。关于这个问题,我认为我已经做得正确,但结果不对。 Plz帮助我找出错误。问题是:给定一组int,如果它不包含1或者它不包含4,则返回true。

        no14({1, 2, 3}) → true
        no14({1, 2, 3, 4}) → false
        no14({2, 3, 4}) → true

以下是我的代码:

   public boolean no14(int[] nums) {
   int i=0;
   int count1=0;
   int count4=0;
   while(i<nums.length)
   {
   if(nums[i]==1)
    {count1++;}
    i++;
   }
   while(i<nums.length)
   {
     if(nums[i]==4)
     {count4++;}
     i++;
   }
   if(count1==0&&count4!=0)
   {return true;}
   else if(count1!=0&&count4==0)
   {return true;}
   else if(count1==0&&count4==0)
   {return true;}
   else return false;
   }

7 个答案:

答案 0 :(得分:1)

我认为这里的许多解决方案存在缺陷,因为人们没有仔细阅读问题描述。 如果找到1或4,则返回false是不正确的。

public boolean no14(int[] nums){

/*  Given an array of ints, return true if it contains no 1's OR it contains no 4's. 

    no14({1, 2, 3}) = true
    no14({1, 2, 3, 4}) = false
    no14({2, 3, 4}) = true
*/  

    boolean containsNoOnes=true, containsNoFours=true;  //We assume we don't have any 1's or 4's.
    for (int i : nums) {
        if(i==1) containsNoOnes = false;                //If we find a 1, then false.
        if(i==4) containsNoFours = false;               //If we find a 4, then false.

    }       
    return containsNoOnes || containsNoFours;           //If array did not contain any 1's return true. 
                                                        //Or if array did not contain any 4's, return true;                                                           

}

答案 1 :(得分:0)

在第一个while循环之后,您必须在i

之前将0的值设为while
 while(i<nums.length)
   {
   if(nums[i]==1)
    {count1++;}
    i++;
   }
    i = 0;
   while(i<nums.length)
   {
     if(nums[i]==4)
     {count4++;}
     i++;
   }

一旦找到1或4就可以返回false以使其有效。

答案 2 :(得分:0)

我认为你已经让它变得过于复杂,如果我明白你被要求做什么 - 这应该有效 -

public boolean no14(int[] nums) {
    for (int i : nums) {
        if (i == 1 || i == 4) return false;
    }
    return true;
}

答案 3 :(得分:0)

public boolean no14(int[] nums) {
    int one = 0;
    int four = 0;

    for (int i=0; i<nums.length; i++)
    {
        if (nums[i] == 1) one++;
        if (nums[i] == 4) four++;
    }

    if (one > 0 && four > 0) return false;
    else return true;
}

答案 4 :(得分:0)

public boolean no14(int[] nums) {
  boolean isOne = false;
  boolean isFour = false;
  for(int i = 0 ; i < nums.length; i++ ) {
    if(!isOne && nums[i] == 1 ) {
       isOne = true;
    } else if(!isFour && nums[i] == 4) {
      isFour = true;
    }
  }
  return !(isOne && isFour);
}

答案 5 :(得分:0)

public boolean no14(int[] nums) {
    boolean ones = false, fours = false;

    for(int i = 0; i &lt; nums.length; i++) {
        if(nums[i] == 1) {
            ones = true;
        } else if(nums[i] == 4) {
            fours = true;
        }
    }
    return (!ones) || (!fours);
}

答案 6 :(得分:0)

这是我的答案:

public boolean no14(int[] nums) {
  int count1 = 0;//counting 1's
  int count4 = 0;//counting 4's
  for(int i = 0; i < nums.length; i++){
    if(nums[i] == 1){
      count1++;
    }
    if(nums[i] == 4){
      count4++;
    }
  }
  if((count1 == 0 && count4 > 0) || (count4 == 0 && count1 > 0) || (count4 == 0 && count1 == 0) )//checking if it contains only 1's or 4's or no one
    return true;

  return false;
}