如何查看数组中的两个整数是否相同

时间:2015-09-29 12:42:47

标签: java arrays for-loop

大家好日子。 我不太确定如何在数组示例中检查相同的元素。 %java stuff 4 6 1 2 3 1 / *现在数组中有两个,它应该抽出“是的!相同!”* / 然而,我确实意识到我可以获取数组中的第一个值并使用for循环检查,然后依此类推。 我对语法还不太自信。 到目前为止,我已经尝试设置一个if case来检查它是否无法正常工作。任何人都可以这么善良,帮助我更好地了解我的项目吗? 附:我对这个问题的所有改进持开放态度。

  public class seeIT
    {
      public static void main (String[] args)
      {
       int N = args.length;   
       int [] a =   new int[N];

        boolean flag = false; 
        for ( int i = 0; i < N; i++)
        {
        a[i] = Integer.parseInt(args[0]);

        }
      for(int i = 0; i < N; i++)
      for(int j = i +1; j < N; j++)
{ if(a[i] == a[j])
   { flag = true; 
} else
  {
      System.out.print("correct, there are no numbers that are the same here");}



        }

    }
    }
  • 我创建了布尔标志,因为我再次意识到我需要检查语句是否为真。 谢谢大家的好意,祝你有个愉快的一天。 约瑟夫。

5 个答案:

答案 0 :(得分:1)

将元素添加到集合(HashSet),如果set.add在元素上返回false,则表示该元素重复。

答案 1 :(得分:1)

您的代码中存在一些缺陷: 这总是读取数组的第一个元素:a[i] = Integer.parseInt(args[0]);,永远不会评估boolean,并且变量N是不必要的(并且在Java局部变量中应该以小写字母开头)。

我想,这就是你想要的:

int[] a = new int[args.length];
for (int i = 0; i < a.length; i++) {
    a[i] = Integer.parseInt(args[i]);
}

for (int i = 0; i < a.length; i++) {
    for (int j = i + 1; j < a.length; j++) {
        if (a[i] == a[j]) {
            System.out.print("same " + a[i]);
        } 
    }
}

但更好的方法(如前所述)将使用HashSet。这样你甚至不必将字符串转换为int。只需使用==的equals()进行比较。代码更简单:

public static void main(String[] args) {        
        java.util.Set<String> dbl = new java.util.HashSet<String>();

        for (int i = 0; i < args.length; i++) {
            for (int j = i + 1; j < args.length; j++) {
                if (args[i].equals(args[j])) {
                    dbl.add(args[i]);
                } 
            }
        }

        System.out.print("" + dbl.size() + " figure(s) appear more than once.");
        java.util.Iterator<String> it = dbl.iterator();
        while (it.hasNext()) {
            System.out.print("   " + it.next());
        }
    }

答案 2 :(得分:1)

HashSet将成为用于解决此类问题的类,但是这样做并不会造成伤害#34;手动&#34;如果你正在学习。以下是对您的代码的一些评论:

a[i] = Integer.parseInt(args[0]);

我认为你的意思是

a[i] = Integer.parseInt(args[i]);

否则你会将args[0]放在a的每个位置。

if(a[i] == a[j]) {
    flag = true;
} else {
  System.out.print("correct, there are no numbers that are the same here");
}

您要过早打印结果 - 在您知道之前。此时你只知道两个特定元素是否相同(如果它们是你正确设置了标志),但你必须等到循环完成才知道整个数组中没有这样的元素。

答案 3 :(得分:1)

首先,我建议使用HashSet,因为它会照顾所有重复检查。但是,由于你处于学习阶段,我宁愿坚持你的方法。

我建议将数组检查逻辑放在一个返回boolean的单独方法中。这样,一旦找到重复的数字(true立即退出方法),就可以返回return,从而避免无用地迭代数组的其余部分。这也使您的代码可以重复使用。

这给出了以下代码。我还做了一些重新格式化以使代码更具可读性,并且我更正了一个错字,使您的代码重复将第一个参数添加到int数组中。

public class SeeIT {

  public static void main(String[] args) {
    int n = args.length;   
    int[] a = new int[n];

    boolean flag = false; 
    for (int i = 0; i < n; i++) {
      a[i] = Integer.parseInt(args[i]);
    }
    boolean repeats = hasRepetitions(a);
    if (repeats) {
      System.out.println("There is at least one repeated number.");
    } else {
      System.out.println("correct, there are no numbers that are the same here");
    }
  }

  private static boolean hasRepetitions(int[] a) {
    int n = a.length;
    for (int i = 0; i < n; i++) {
      for (int j = i + 1; j < n; j++) {
        if (a[i] == a[j]) {
          return true; 
        }
      }
    }
    return false;
  }

}

我希望这会有所帮助......

干杯,

杰夫

答案 4 :(得分:0)

public class SeeIT {

    public static void main(String[] args) {
            int [] a = new int[]{1,2,5,4,3,7,2};

            boolean flag = false;
            for(int i = 0; i< a.length; i++){
                    for(int j = 0; j< a.length; j++){
                         if(a[j] == a[i]){
                           if(j != i) {
                            flag = true;
                             }
                      }
                    }
            }

            if(flag == true){
                    System.out.println("Duplicates");

            }else{
                    System.out.println("not duplicate");
            }



    }

}
}

这个for循环应该可以解决问题。它是一个双重for循环,它在同一个数组中迭代。