1

我需要获取第一个数组索引的唯一值,这就是我尝试的方式。

public class Array {

    public static void main(String[] args) {

        int[][] array = { 
                  {100, 12 , 0, 3},
                  {100, 177, 0, 3},
                  {100, 233, 0, 3}, 
                  {100, 144242, 0, 3},
                  {100, 14, 0, 4},  
                  {100, 12234, 0, 4},
                  {100, 134, 1, 4},
                  {2, 15, 0, 3},
                  {23, 1533, 0, 3},
                  {23, 1322, 1, 4}, 
                  {23, 13, 1, 4}, 
                  {23, 122, 1, 4},
                  {1321, 142, 1, 4},
                  {1321, 133,1, 4},
                  {3, 16, 0, 5},
                  {55, 1003, 0,3},
                  {553, 1002, 2, 6},
                  {31, 162, 0, 5},
                  {7, 1626, 0, 5},
                  {7, 2336, 0,5}           
                 };




        boolean isUnique = true;

        for(int i=0; i<= array.length; i++)
        {
             for (int j = 0; j < 1; j++)
             {
                 if (array[j]==array[j])
                 {                       

                     int riid = array[i][j];    

                     Set<Integer> uniqueNumbers = new HashSet<Integer>(Arrays.asList(riid));

                     System.out.println(riid);
                 }               
             }
         }
    }
}

我的输出必须是 100、2、23、1321、3、55、553、31 和 7。但是,它没有给我唯一的值。它打印 100 100 100 100 100 100 100 2 23 23 23 23 1321 1321 3 55 553 31 7 7

我怎样才能得到这个输出的唯一值。我认为Set<Integer> uniqueNumbers = new HashSet<Integer>(Arrays.asList(riid));会有所帮助。但是,它没有。

4

4 回答 4

2

你只需要写:

    Set<Integer> uniqueNumbers = new LinkedHashSet<Integer>();
    for (int i = 0; i < array.length; i++) {
        uniqueNumbers.add(array[i][0]);
    }
    System.out.println(uniqueNumbers);
于 2015-10-01T08:18:46.857 回答
1

您的代码中有很多问题:

  • i <= array.length- 数组在 Java 中是从零开始的
  • 您的内部循环从 0 运行到 1,您到底想在这里实现什么?
  • 您在每次迭代时都覆盖了集合,这并不是您想要的

您的问题有很多可能的解决方案,其中之一是将 2D 数组展平(使用 Java 8 非常容易),然后将其转换为Set

int[] myArr = Arrays.stream(array)
            .flatMapToInt(Arrays::stream)
            .toArray();

Set<Integer> mySet = new HashSet<>(Arrays.asList(myArr));
于 2015-10-01T08:20:10.623 回答
0

这很简单,创建一个 ArrayList 并检查它是否包含每个数组的第一个元素,然后不要将此元素添加到 ArrayList,如果它不包含它,请将其添加到 ArrayList

 ArrayList<Integer> list = new ArrayList<>();
      for(int i = 0 ; i < array.length ;i++ ){
              if(!list.contains(array[i][0])){
                  list.add(array[i][0]);
              }
      }

是工作示例

于 2015-10-01T08:22:02.607 回答
-1

此条件比较相同的值,因此将始终为真:

if (array[j]==array[j])
//        ↑         ↑

据我了解,您只需要检查第一个位置:

int lastRiid = 0;

for (int i = 0; i < array.length; i++) {
    if (array[i][0] != lastRiid) {
        lastRiid = array[i][0];
        System.out.println(lastRiid);
    }
}

输出:

100
2
23
1321
3
55
553
31
7
于 2015-10-01T08:13:03.127 回答