从数组中打印唯一值
print unique values from array
我需要获取第一个数组索引的唯一值,这就是我尝试的方法。
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));
会有所帮助。但是,它没有。
此条件比较相同的值,因此将始终为真:
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
你只需要写:
Set<Integer> uniqueNumbers = new LinkedHashSet<Integer>();
for (int i = 0; i < array.length; i++) {
uniqueNumbers.add(array[i][0]);
}
System.out.println(uniqueNumbers);
你的代码有很多问题:
i <= array.length
- Java 中的数组从零开始
- 你的内部循环从 0 到 1,你到底想在这里实现什么?
- 您在每次迭代时都覆盖了集合,这并不是您想要的
您的问题有很多可能的解决方案,其中之一是展平二维数组(使用 Java 8 非常简单),然后将其转换为 Set
:
int[] myArr = Arrays.stream(array)
.flatMapToInt(Arrays::stream)
.toArray();
Set<Integer> mySet = new HashSet<>(Arrays.asList(myArr));
这很简单,创建一个 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]);
}
}
here 是工作示例
我需要获取第一个数组索引的唯一值,这就是我尝试的方法。
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));
会有所帮助。但是,它没有。
此条件比较相同的值,因此将始终为真:
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
你只需要写:
Set<Integer> uniqueNumbers = new LinkedHashSet<Integer>();
for (int i = 0; i < array.length; i++) {
uniqueNumbers.add(array[i][0]);
}
System.out.println(uniqueNumbers);
你的代码有很多问题:
i <= array.length
- Java 中的数组从零开始
- 你的内部循环从 0 到 1,你到底想在这里实现什么?
- 您在每次迭代时都覆盖了集合,这并不是您想要的
您的问题有很多可能的解决方案,其中之一是展平二维数组(使用 Java 8 非常简单),然后将其转换为 Set
:
int[] myArr = Arrays.stream(array)
.flatMapToInt(Arrays::stream)
.toArray();
Set<Integer> mySet = new HashSet<>(Arrays.asList(myArr));
这很简单,创建一个 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]);
}
}
here 是工作示例