检查数组中的每个元素是否具有相同的值

时间:2014-07-12 03:42:45

标签: java arrays

基本上我想做的是检查int数组中的每个元素,如果所有元素都具有相同的值。

我按如下所示创建int数组以传递给比较每个数组元素的方法,它返回布尔值true,即使很难,元素也不是全部相同的值。

Int[] denominator = {3,3,4,3};

boolean compare;

compare = bruteforce(denominator);

public static boolean bruteforce(int[] input) {

int compare =0;
int count =0;

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

        compare = input[i];

        while(count<input.length){

            if(input[i+1]==compare){
            return true;

            }
            i++;
            count++;

        }//end while

    }//end for
    return false;
}//end method

我想上面的方法将为数组的每个元素循环并保持比较。

当我打印出输出时,它显示它只循环一次,将布尔值返回为真。

我真的忘记了我的代码中可能出错的线索。

也许我只是忽略了一些愚蠢的错误。

8 个答案:

答案 0 :(得分:3)

尝试,

Integer[]    array = {12,12,12,12};
Set<Integer> set   = new HashSet<Integer>(Arrays.asList(array));
System.out.println(set.size()==1?"Contents of Array are Same":"Contents of Array are NOT same");

说明:

将数组添加到集合中并检查大小os集,如果为1,则内容相同,否则不会。

答案 1 :(得分:2)

如果数组元素相等,您只需要将第一个元素与其余元素进行比较,以便更好地解决您的问题:

public static boolean bruteforce(int[] input) {
     for(int i = 1; i < input.length; i++) {
         if(input[0] != input[i]) return false;
     }

     return true;
}

这个简单的算法不需要多个循环。希望这有帮助。

答案 2 :(得分:2)

您只需要一个循环,并且应尽可能快地返回false(例如,当您遇到与第一个元素不匹配的元素时)。

您还需要考虑输入数组为null或具有一个元素的边缘情况。

尝试这样的事情,我从你提供的代码中最低限度地改编......

public class BruteForceTest {

    public static boolean bruteforce(int[] input) {

        // NOTE: Cover the edge cases that the input array is null or has one element.
        if (input == null || input.length == 1)
            return true; // NOTE: Returning true for null is debatable, but I leave that to you.

        int compare = input[0]; // NOTE: Compare to the first element of the input array.

        // NOTE: Check from the second element through the end of the input array.
        for (int i = 1; i < input.length; i++) {
            if (input[i] != compare)
                return false;
        }

        return true;

    }

    public static void main(String[] args) {

        int[] denominator = {3,3,4,3};
        boolean compare = bruteforce(denominator);

        // FORNOW: console output to see where the first check landed
        System.out.print("{3,3,4,3}:\t");
        if (compare)
            System.out.println("Yup!");
        else
            System.out.println("Nope!");

        // NOTE: a second array to check - that we expect to return true
        int[] denominator2 = {2,2};
        boolean compare2 = bruteforce(denominator2);

        System.out.print("{2,2}:\t\t");
        if (compare2)
            System.out.println("Yup!");
        else
            System.out.println("Nope!");

        /*
         *  NOTE: edge cases to account for as noted below
         */

        // array with one element
        int[] denominator3 = {2};
        System.out.print("{2}:\t\t");
        if (bruteforce(denominator3))
            System.out.println("Yup!");
        else
            System.out.println("Nope!");

        // null array
        System.out.print("null:\t\t");
        if (bruteforce(null))
            System.out.println("Yup!");
        else
            System.out.println("Nope!");

    }

}

...和输出:

{3,3,4,3}:  Nope!
{2,2}:      Yup!
{2}:        Yup!
null:       Yup!

答案 3 :(得分:0)

如果所有元素都是相同的值,为什么不只使用一个for循环来测试数组中的下一个值?如果不是,则返回false。

答案 4 :(得分:0)

现在,您不会检查&#34;所有元素是否具有相同的值&#34;。您正在结束该函数并且每当(第一次)两个元素彼此相等时返回true。 为什么不将布尔值设置为true,并且只要有两个不相等的元素,就返回false?这样你就可以保留你已经拥有的大部分内容。

if(input [i + 1]!= compare)return false;

答案 5 :(得分:0)

public class Answer {

    public static void main(String[] args)
    {
        boolean compare = false;
        int count = 0;
        int[] denominator = { 3, 3, 4, 3 };


        for (int i = 0; i < denominator.length; i++)
        {
            if(denominator[0] != denominator[i]) 
            {
                count++;
            }
        }
        if(count > 0)
        {
            compare = false;
        } else
        {
            compare = true;
        }
        System.out.println(compare);

    }
}

我注意到的一个错误是你将数组声明为Int [],这不是一个java关键字,实际上是int []。此代码检查您的数组,如果数组具有彼此不相等的值,则返回false。如果数组具有彼此相等的值,则程序返回true。

答案 6 :(得分:0)

如果您想检查所有元素是否具有相同的值,那么您可以更简单的方式进行,

int arr = {3,4,5,6};

int value = arr[0];


flag notEqual = false;

for(int i=1;i < arr.length; i++){

     if(!arr[i] == value){
           notEqual = true;
           break;
     }

}

if(notEqual){
     System.out.println("All values not same");
}else{
     System.out.println("All values same);
}

答案 7 :(得分:-1)

如果您对测试数组相等感兴趣(而不是自己编写此测试),那么您可以使用Arrays.equals(theArray, theOtherArray)