java - 我在打印数组中的元素时遇到问题,以便任何两个重复的元素出现一次

标签 java

问题是找到数组中数字的不同出现次数,以便出现两次的任何元素仅打印一次。


public class ICT_Qoestions_34 {
    public static void main(String[] args) {
        Scanner input = new Scanner(System.in);
        System.out.println("Enter the Index of Numbers");
        int n = input.nextInt();
        int[] myList = RandomNumber(n);

        System.out.println("Distinct Numbers"); here I called a method that has a parameter of arrays coming from the RandomNumber() method.
        DistinctNumbers(myList);

    }

    // Generating Random Numbers And Pouplating them in an Array whose Rerference is myList

    //Question 1
    public static int[] RandomNumber(int n) {
        if (n < 0) {
            System.out.println("PLEASE Enter Positive Number!");
        }
        int[] myList = new int[n];
        for (int i = 0; i < n; i++) {

            int Values = (int) ((90 * Math.random()) + 10);
            System.out.print(Values + "\t");
            for (int j = i; j < n; j++) {

                myList[j] = Values;

            }

        }
        return myList;
    }

上述方法运行良好,并生成一个包含 n 个索引随机数的数组。

问题出现在这个方法中,因为它没有完成我期望的工作,而且我无法追踪我的错误。

public static void DistinctNumbers(int[] myList) {
        for (int j = 0; j < myList.length; j++) {
            int key = myList[j];
            int Occurance = 1;
            for (int i = 0; i < myList.length; i++) {
                if (myList[i] == myList[j] && i != j) 
                    Occurance++;
                } 

如果一个数字的出现次数为=1,没问题,但是当它>1时,我们应该小心,因为我们的订单只打印一次。所以我这样做了......

                if (Occurance== 1) 
                    System.out.println(myList[j] + "\t");
                else if(Occurance>1){
                for (int k=0; k<j;k++){                    

如果第 j 个索引之前的数组元素与第 j 个索引的元素匹配,我们将中断循环以避免控制台中的任何重复打印。

                if (myList[k]==key)
                    break;
                else if(myList[k]!=key){                   

如果数组的元素直到第 j 个索引都与第 j 个索引的元素不匹配,我们打印该不同的数字,然后中断循环以避免在控制台中重复打印。我相信这是有效的,因为如果在第 3 个和第 15 个索引中找到示例 15,则将打印第三个索引并跳转到第 15 个索引。

                    System.out.println(myList[j] + "\t");
                break;
                }
                }

                }
           } 

        }
    }

但这似乎不是结果,我追踪时什么也没发现......

最佳答案

那么你应该考虑稍微改变一下你的算法。具有出现次数的 For 循环不起作用。你最好的方法是检查生成的随机数是否存在于数组中。

while(isElementExist(generatedNum,arr)) {
   generatedNum = (int) ((90 * Math.random()) + 10);
}
// insert into array now.

关于java - 我在打印数组中的元素时遇到问题,以便任何两个重复的元素出现一次,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59642790/

相关文章:

java - IO异常 : Missing content for multipart request

java - @Disabled 在 JUnit5 中不起作用

java - 为什么 EnumMap 不是 Java 中的 SortedMap?

java - 如何从内容页面检索第一个 PAR 节点

java - 为方法创建异常

java - 前缀 后缀 中缀 Java 表达式求值器

Java - 使用 Accessor 和 Mutator 方法

java - 读取txt文件内容并存入数组

java - 分布式环境中的布隆过滤器

Java/Selenium (ieDriver) - 如何避免在每次测试运行中重复 webapp 登录 Before Method (jUnit)