检查数组是否至少有两个具有特定值的元素

时间:2014-11-10 22:01:23

标签: java arrays loops

假设我有一个包含以下值的数组:0,1,0,0,0,1,0,1,1

我正在循环我的数组并将0替换为0。但是如果我的数组中剩下2个1,我会打破这个循环。我的代码并没有多少,但这是我一直在努力的原因

if(//There are more than 2 1s ){
        return true; //carry on looping
    }

    return false; //break the loop

我不知道如何区分0和1,因此我对如何使其工作非常困惑。任何想法都将不胜感激。

2 个答案:

答案 0 :(得分:1)

一种可能的解决方案是首先编写一个实用程序方法来测试特定位置的给定值是否与数组中的每个后续位置都是唯一的,

private static boolean testUnique(int[] arr, int i) {
    int t = arr[i];
    for (int j = i + 1; j < arr.length; j++) {
        if (arr[j] == t) {
            return false;
        }
    }
    return true;
}

然后你可以从左到右迭代数组,检查每个值是否都是唯一的,如

public static boolean hasDuplicate(int[] arr) {
    for (int i = 0; i < arr.length - 1; i++) {
        if (!testUnique(arr, i)) {
            return false;
        }
    }
    return true;
}

使用您的阵列

public static void main(String[] args) {
    int[] arr = { 0, 1, 0, 0, 0, 1, 0, 1, 1 };
    System.out.println(hasDuplicate(arr));
}

那是false。或者,如果您首先对阵列进行排序,您可能会发现它更容易。

答案 1 :(得分:1)

public int[] testDuplicatesofOne(int[] arr)
{
    int count=0;
    for(int i=0;i<arr.length-1;i++)
    {
        count+=(arr[i]>0?1:0);
    }

    if(count>=2)
    {
    for(int j=0;j<arr.length-1;j++)
    {
        if(count>2) 
        {
            if(arr[j]==1)
            {
                arr[j]=0;
                count--;
            }
        }else
        {
            break;
        }

    }
    }
}

嗨Lukasz试试这个,很抱歉,如果我没有正确理解你的要求。