给定一组int,如果数组同时包含1和3,则返回true,每个至少一个

时间:2015-08-02 23:31:17

标签: java arrays

如果数组中至少有1个和3个,那么这个Java代码假设返回true。这就是我所拥有的但是它不起作用:

public boolean find13(int[] nums) {

   boolean array = true; 

   for(int i = 0; i < nums.length; i++) { 

      if(nums[i] == 1 && nums[i] == 3){
      }

      else{
          array = false;
      }
   }
    return array;
}

7 个答案:

答案 0 :(得分:2)

Bitmap b = createBitmap(BitmapFactory.decodeResource(NinePatchImage), x, y, width, height);

答案 1 :(得分:1)

更新

如果您对Java 8流感兴趣。试试这个单行:

public static void main(String[] args) throws Exception {
    System.out.println(find1_3(new int[]{1, 2, 3, 4}));
    System.out.println(find1_3(new int[]{1, 2, 4}));
    System.out.println(find1_3(new int[]{2, 3, 4}));
}

public static boolean find1_3(int[] nums) {
    return Arrays.stream(nums).filter(n -> n == 1 || n == 3).distinct().count() == 2;
}

它过滤掉除1和3之外的所有数字,然后筛选出distinct()过滤器的结果。如果您的计数为2则为1&amp; 3在数组中,否则为false。

结果:

true
false
false

旧答案

不想复制@Cruentus_Nex答案(+1给你)所以这里有一个不使用旗帜的变体

public static void main(String[] args) throws Exception {
    System.out.println(find1_3(new int[] {1, 2, 3, 4}));
    System.out.println(find1_3(new int[] {1, 2, 4}));
    System.out.println(find1_3(new int[] {2, 3, 4}));
}

public static boolean find1_3(int[] num) {
    for (int i = 0; i < num.length; i++) {
        if (num[i] == 1 || num[i] == 3) {
            // Found first match
            int first = num[i];
            // Search for the next 
            for (int j = i + 1; j < num.length; j++) {
                if (num[j] != first && (num[j] == 1 || num[j] == 3)) {
                    // Found second match
                    return true;
                }
            }
            // Didn't find second match
            return false;
        }
    }
    // Didn't find first match
    return false;
}

结果:

true
false
false

答案 2 :(得分:0)

定义两个布尔值。当你遇到3时,将其中一个设置为true;当1时,将另一个设置为true

如果两个布尔值均为truetrue),则返回return one && three;

答案 3 :(得分:0)

更优雅的方式,

boolean find13(int[] nums){
    boolean[] results = new boolean[]{false, false};
    for(int n : nums){
        if(!results[0] && n == 1){
            results[0] = true;
        } else if(!results[1] && n == 3){
            results[1] = true;
        } else if(results[0] && results[1]){
            return true;
        }
    }
    return false;
}

答案 4 :(得分:0)

较短的解决方案使用java.util.List的contains函数。示例实现如下:

public boolean find13(int nums[])
{
   List<Integer> list = Arrays.asList(nums);
   return list.contains(1) && list.contains(3);
}

这个解决方案比自己检查每个值更简洁,但如果你有一个非常大的数组可能不是最快的,因为它必须首先将数组转换为列表然后搜索值。

答案 5 :(得分:0)

此代码可以正常工作:-

  public boolean lucky13(int[] nums) {
      for(int i=0;i<=nums.length-1;i++){
        if((nums[i]==1)||(nums[i]==3)){
          return false;
        }
      }
      return true;
    }

答案 6 :(得分:0)

我的解决方案:

public boolean lucky13(int[] nums) {
int count1 = 0;
int count3 = 0;
for (int num : nums) {
    if (num == 1)
        count1++;
    if (num == 3)
        count3++;}
return count1 == 0 && count3 == 0;}