【问题标题】:I need to print Null if there are no unique elements in an Array list如果数组列表中没有唯一元素,我需要打印 Null
【发布时间】:2022-02-03 00:04:34
【问题描述】:

我需要一个只打印数组的唯一元素的程序,或者,如果没有唯一元素,它会打印“Null”。 我的代码已经可以找到唯一的元素并打印它,但它也为每个重复的元素打印 Null。如果没有唯一数字或只有唯一元素(已经为此工作),我只需要打印一个“Null”。 下面的例子,它应该打印 3(不重复的元素),如果你在列表中放另一个 3,应该只打印一次 Null(我不知道怎么做)。 提前感谢您的帮助!

public static void main(String[] args) {

        int IDs[] = { 1, 2, 3, 2, 2, 1, 5, 5 };

        int items = IDs.length;

        uniqueIDs(IDs, items);

    }

    static void uniqueIDs(int IDs[], int items) {

        Map<Integer, Integer> hash = new HashMap<>();

        for (int i = 0; i < items; i++) {

            if (hash.containsKey(IDs[i])) {

                hash.put(IDs[i], hash.get(IDs[i]) + 1);

            }

            else {

                hash.put(IDs[i], 1);
            }
        }

        for (Map.Entry<Integer, Integer> uniqueIDs : hash.entrySet())

            if (uniqueIDs.getValue() == 1)

                System.out.print(uniqueIDs.getKey() + "\n");
        
            else {
                System.out.println("null");
            }
    }
}

【问题讨论】:

    标签: java arrays arraylist hash hashmap


    【解决方案1】:

    在您的方法中的第一个循环之后,您应该添加以下内容:

       public static void main(String[] args) {
    
        int IDs[] = {1, 2, 3, 2, 2, 1, 5, 3, 5};
    
        int items = IDs.length;
    
        uniqueIDs(IDs, items);
    
    }
    
    static void uniqueIDs(int IDs[], int items) {
    
        Map<Integer, Integer> hash = new HashMap<>();
    
        for (int i = 0; i < items; i++) {
    
            if (hash.containsKey(IDs[i])) {
    
                hash.put(IDs[i], hash.get(IDs[i]) + 1);
    
            } else {
    
                hash.put(IDs[i], 1);
            }
        }
    
        boolean flag = false; //We assume we don't have unique elements
        for (Map.Entry<Integer, Integer> uniqueIDs : hash.entrySet()) {
            if (uniqueIDs.getValue() == 1) {
                flag = true;//Now we have at least one unique element
            }
        }
        if (flag) {
            for (Map.Entry<Integer, Integer> uniqueIDs : hash.entrySet()) {
                if (uniqueIDs.getValue() == 1) {
                    System.out.print(uniqueIDs.getKey() + "\n");
                }
            }
        } else {
            System.out.println("null");
        }
    }
    

    //输出:

    null
    

    另外:更一般的建议是,在复杂的代码中添加 {},因为有时很难理解代码块的开始或结束位置,因为其他人试图阅读您的代码,有时甚至是您自己!

    【讨论】:

    • 我刚刚在我的 Eclipse 上替换了你的代码(我也可以使用 Spring,没问题),但它不能正常工作。拜托,我希望我没有做错任何事,但是如果您删除我的代码的最后一部分(“else”部分),它将完美地工作,打印数字 3,但我需要打印 Null(仅一次)如果例如,我在列表中添加了另外 3 个。
    • 我已经投了赞成票并将其列为“最佳答案”,如果您能看到其中的问题,我将不胜感激!
    • 但是你说你只想打印一次 null ......你能再描述一下这个问题吗?就像现在一样,它将打印所有唯一数字(在您的情况下只有 3 个),但只有在没有唯一数字时才会打印 null 。我将使用完整代码更新答案,以明确新代码将是什么
    • 我的原始代码,没有用于打印“null”的“Else”的最后一部分,可以正常工作,只打印唯一的数字(这是我在这个程序中需要的功能之一),所以,在那个列表上,如果只有一个数字 3,它应该打印 3 而没有其他任何东西,只有数字 3。但是,如果我输入另一个数字 3,列表将没有任何唯一的数字,只有重复的数字,所以程序应该只打印一个“Null”而不是别的。我只设法将唯一数字与 null 一起打印(并且它为每个重复的数字打印 null,我不想要它)
    • 请复制并粘贴答案中的代码。我添加了两次带有数字 3 的输出,这就是您想要的输出
    猜你喜欢
    • 1970-01-01
    • 2010-10-01
    • 1970-01-01
    • 1970-01-01
    • 2015-06-28
    • 2021-10-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多