Java - 2D数组,检查重复

时间:2016-10-19 16:10:23

标签: java arrays multidimensional-array duplicates

变量" num"是一个2D数组。如果有任何重复,我试图检查该数组。 " NUM"是用户输入。

我已经广泛浏览了Java文档并询问了我的讲座,但我找不到合适的答案。我理解这个概念,我的意思是做什么,但只是不能正确编码。

这是我的代码:

    for(int i = 0; i < 3; i++){ //3 rows with 5 numbers each
        for(int j = 0; j < 5; j++){
            num[i][j] = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter value for line: " + i + " and position: "+  j ));
            if((num[i][j] == num[i][0]) || (num[i][j] == num[i][1]) ||(num[i][j] == num[i][2]) || (num[i][j] == num[i][3]) || (num[i][j] == num[i][4])){
                if(num[i][j] != 0){
                    num[i][j] = Integer.parseInt(JOptionPane.showInputDialog(null, "ERROR. Enter value for line: " + i + " and position: "+  j ));
                }
            }
        }
    }

我也尝试过使用HashSet,但我认为这只适用于1D数组。

我想使用这样的东西,因为我觉得我最了解:

    secret = new Random().ints(1, 40).distinct().limit(5).toArray();

但显然不是随机的。

我试过这个:

    Set<Integer> check = new HashSet<>();
    Random gen = new Random();

    for(int i = 0; i < 3; i++){ // 3 rows, 5 numbers
        for(int j = 0; j < 5; j++){
            num[i][j] = Integer.parseInt(JOptionPane.showInputDialog(null, "Enter value for row " + i + " and position " + j));
            check.add(gen.nextInt(num[i][j]));
        }
    }

编码的最后一部分(直接在此之上)编译并运行,但不检查是否有重复。

2 个答案:

答案 0 :(得分:0)

这是实现此目的的一种方法,您可以使用哈希集来跟踪已插入到2D阵列中的内容:

CurrencyPipe

答案 1 :(得分:0)

还有其他方法可以检查重复项(例如,您可以将之前输入的数据循环回2D阵列以检查重复值)但是,这是我如何使用Set进行检查为了重复,您是否尝试使用所有唯一值填充2d数组,其中每个值来自用户?? (同样 - 在原始帖子中明确知道这将非常有帮助,感谢Michael Markidis指定的那个)

在这里有一点UX知识,分离ERROR对最终用户有帮助,因为ERROR +同时重新输入会让人感到困惑。

import java.util.Arrays;
import java.util.HashSet;
import java.util.Set;

import javax.swing.JOptionPane;

public class App {
    public static void main(String[] args) {
        int[][] num = new int[3][5];
        System.out.println("Before:");
        for (int i = 0; i < 3; ++i)
            System.out.println(Arrays.toString(num[i]));
        Set<Integer> data = new HashSet<Integer>();
        for (int i = 0; i < 3; i++) { // 3 rows with 5 numbers each
            for (int j = 0; j < 5; j++) {
                boolean isGoodInput = false;
                while (!isGoodInput) {
                    String input = JOptionPane.showInputDialog(null, "Enter value for line: " + i + " and position: " + j);
                    Integer n = Integer.parseInt(input);
                    if (data.contains(n)) {
                        JOptionPane.showMessageDialog(null, "ERROR: Try again");
                    } else {
                        num[i][j] = n;
                        isGoodInput = data.add(n);
                    }
                }
            }
        }
        System.out.println("After:");
        for (int i = 0; i < 3; ++i)
            System.out.println(Arrays.toString(num[i]));
    }
}

注意:2D阵列仅限于您在原始帖子中的规格为3x5,因此您必须在多个位置更改这些值以制作不同大小的阵列 - 可能使这些更加动态可以加速进一步开发这个应用在未来。