在数组中查找缺少的元素

时间:2016-03-03 12:59:04

标签: java

我的程序是:在一个数组中存储1-10个数字,缺少一个数字你怎么找到它?

我尝试过以下代码,但它没有给出正确的输出。

public class MissingNumber {

    public static void main(String[] args) {

        int arr[] = { 1, 2, 3, 4, 5, 6, 7, 9, 9, 10 };
        System.out.println(arr.length);

        int arr2[] = new int[10];

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

            arr2[i] = i + 1;
            System.out.println("second array is : " + arr2[i]);
        }

        //compare two arrays i.e arr and arr2

        for(int a=0;a<arr.length;a++){
            for(int b=0;b<arr2.length;b++){
                 if(arr[a]==arr2[b]){
                     break;
                 }
                 else{
                     System.out.println("missing element is : "+arr[a]);
                 }

            }
        }

    }

}

我想要丢失的号码。谁能告诉我哪里出错了?

6 个答案:

答案 0 :(得分:1)

检查以下代码,了解输入数组是否为任何顺序或随机数

公共类MissingNumber {

public static void main(String[] args) {

    int arr[] = {1, 2, 3, 4, 5, 6, 7, 9, 9, 10};
    System.out.println(arr.length);

    int arr2[] = new int[10];

    for (int i = 0; i < arr2.length; i++) {
        arr2[i] = i + 1;
    }
    for (int a = 0; a < arr2.length; a++) {
        int count = 0;
        for (int b = 0; b < arr.length; b++) {
            if (arr2[a] == arr[b]) {
                break;
            } else {
                count++;
            }
        }
        if (arr2.length == count) {
            System.out.println("missing element is : " + arr2[a]);
        }
    }

}

}

答案 1 :(得分:0)

一旦两个阵列匹配,你就会从循环中脱离出来。从逻辑的角度来看,将其更改为(您不需要嵌套循环):

if(arr[a]!=arr2[a]){
    System.out.println("missing element is : "+arr[a]);
    break;
}

但是如果确定数组从1开始始终按顺序排列,则不需要另一个数组。就这样做:

for(int x=0; x<arr.lengthl x++){
    if(arr[x] != (x+1)){
        System.out.println("Missing element is " + (x+1));
        break;
    }
}

答案 2 :(得分:0)

当你找到正确的匹配时,你就破坏了代码:

只需使用以下内容:

if(arr[a] != arr2[b]){
    System.out.println("missing element is : "+arr[a]);
    break;
}

或者只使用continue

替换break

答案 3 :(得分:0)

删除第二个数组,你不需要它,一旦你将元素添加到原始数组,它可能只会导致错误。

基本上,通过以下方式替换您的测试:

if(arr[a] != (a+1)){ System.out.println("Missing element: " + (a+1)); }

不要突破它,因为可能会缺少更多元素。

答案 4 :(得分:0)

它无法正常工作,因为您正在arr循环查找arr2内没有的任何值,而arr中的每个元素都在arr2中。您希望arr2作为外部循环。

答案 5 :(得分:0)

  

我的程序是:在一个数组中存储1-10个数字,缺少一个数字你怎么找到它?

也可以仅使用数组本身来完成。请注意,只有在此问题中指定的其中一个号码丢失时,它才有效。

例如,

让数组为array = {1,2,3,4,5,6,7,9,9,10}

现在,让我们假设Array不会总是被排序,因此第一步是对数组进行排序。

Arrays.sort(array);

下一步是简单地检查任何给定位置的数组值,如果value != location + 1那么这是缺失的数字。

for(int x = 0; x < array.length; x++) {
    if(array[x] != x + 1) {
        System.out.println("Missing Entry: " + (x+1));
        break;
    }
}