繁体   English   中英

获取二维 INT 数组中 2 个重复元素的索引 JAVA

[英]Get indexes of 2 duplicated elements in 2d array of INTs JAVA

我需要专家的帮助。 我有一项任务要在二维数组中查找 2 个重复元素并打印出它们的索引。 这是我制作的代码。 它创建一个二维数组,然后从键盘手动填充它。 但是现在我在查找和打印重复项的方法上遇到了一些问题。 如果没有重复,则打印 FALSE,如果有,则打印 TRUE。 但我不能让它打印出所有的重复项及其索引。 请帮我解决一下这个。 此致

import java.io.*;
import java.util.HashSet;
import java.util.Set;

import static java.lang.System.out;

public class Main {

    public static void main(String[] args) 
        throws NumberFormatException, IOException {
        BufferedReader reader = new BufferedReader
                (new InputStreamReader (System.in));

        out.println("Введите размерность массива n:");

        int n = Integer.parseInt(reader.readLine());

        out.println("Введите размерность массива m:");

        int m = Integer.parseInt(reader.readLine());

        int [][] a = new int [n][m];

        out.println("Введите числа массива :");

        int i,j;

        for (i = 0; i < a.length; i++) {
            for (j = 0; j < a[i].length; j++) {
            a[i][j] = Integer.parseInt(reader.readLine());
            }
        }
        out.println("Введенный массив : ");
        for (i = 0; i < a.length; i++, out.println()) {
            for (j = 0; j < a[i].length; j++) {
                out.printf(" %4d", a[i][j]);
            }
        }

        out.println(extra(a));

    }

    private static boolean extra(int[][] data) {
        Set<Integer> set = new HashSet<Integer>();
        for (int i = 0; i < data.length; i++) {
            for (int j = 0; j < data[i].length; j++) {
                if (set.contains(data[i][j])) {

                    out.printf("[%d][%d] - %d\n", i, j, data[i][j]);
                    return true;
                } else {
                    set.add(data[i][j]);
                }
            }
        }
        return false;
    }


}

确定集合中的任何项目是否满足条件,同时还处理每个项目的一般方法是:

boolean conditionSatisfied = false;

for each item in collection {
    if item satisfies condition {
        process item;
        conditionSatisfied = true;
    }
}

return conditionSatisfied;

我改变了你的方法并使用了一个发现的布尔变量..这会起作用

private static boolean extra(int[][] data) {
    boolean found = false;
    Set<Integer> set = new HashSet<Integer>();
    for (int i = 0; i < data.length; i++) {
        for (int j = 0; j < data[i].length; j++) {
            if (set.contains(data[i][j])) {

                out.printf("[%d][%d] - %d\n", i, j, data[i][j]);
                found = true;
            } else {
                set.add(data[i][j]);
            }
        }
    }
    return found;
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM