繁体   English   中英

如何在随机生成的数字数组中打印出重复项的第一个实例?

[英]How do I print out the first instance of duplicates in an array of randomly generated numbers?

我将10个随机数存储在一个数组中,并将其打印在20-50范围内。 我无法找到重复的作品。 如果数组中有一个实例,发现有重复项,我将尝试打印出找到它的位置,而不是下标。

例如:

46

24

46

48

44

20

24

46

44

27

在以下位置发现第一对重复项:1和3

如果存在重复项,然后除了“未生成任何重复项”之外,其余的都是我要达到的输出。 如果没有的话。

import javax.swing.JOptionPane;
public class sheet11t1
{
    public static void main(String[] args)
    {
        String results = "";
        int numbers[] = new int[10];
        int j;
        for(int i = 0; i < numbers.length; i++)
        {
            numbers[i] = (int) ((Math.random() * 31) + 20);
            results += i + "\n";
        }
        boolean duplicateFound = false;
        for(int i = 0; i < numbers.length - 1 && !duplicateFound; i++)
        {
            for(j = i + 1; j < numbers.length && !duplicateFound; j++)
            {
                if(numbers[i] == numbers[j])
                    duplicateFound = true;
            }
        }
        if(duplicateFound)
                results += "First pair of duplicates were found at positions: " + numbers[i + 1] + " and " + numbers[j + 1];
        else
                results += "No duplicates were generated.";
        JOptionPane.showMessageDialog(null, results);
    }
}

您必须在for循环之外声明ij才能使该方法起作用。 另外,如果要打印数组中基于1的位置,则可以打印numbers[i+1]numbers[j+1] ,我猜应该只是i+1j+1

几个问题:

  • 您的if检查是否在循环之外找到重复项。 你应该把它们带进去。

  • 一旦设置了plicateFound布尔值,就永远不会重置它。 所以你只会得到一场比赛。 因此,您可能还需要重置它。

  • 您正在使用number [i + 1或j + 1],在结果字符串格式中应为i + 1或j + 1。

     for (int i = 0; i < numbers.length - 1 && !duplicateFound; i++) { for (j = i + 1; j < numbers.length && !duplicateFound; j++) { if (numbers[i] == numbers[j]) { duplicateFound = true; } if (duplicateFound) { results += "pair of duplicates were found at positions: " + (i + 1) + " and " + (j + 1) + "\\n"; duplicateFound = false; } } } if (results.isEmpty()) { System.out.println("No duplicates were generated."); } else { System.out.println(results); } 

还有进一步的改进范围,例如您不需要plicateFound变量,也不需要进一步检查,即是否需要进一步设置和重置变量。

您需要更改的是显示数字而不是索引。 因此,对于您的第一个循环,请更改为number [i]而不是i。 其次,在退出循环的情况下,i和j为+1,因此当您要打印索引时,只需指定i和j。 下面是代码。

import javax.swing.JOptionPane;
public class example {

public static void main(String[] args) {
    String results = "";
    int numbers[] = new int[10];
    int j = 0;
    int i;
    for(i = 0; i < numbers.length; i++)
    {
        numbers[i] = (int) ((Math.random() * 31) + 20);
        results += numbers[i] + "\n";
    }
    boolean duplicateFound = false;
    for(i = 0; i < numbers.length - 1 && !duplicateFound; i++)
    {
        for(j = i + 1; j < numbers.length && !duplicateFound; j++)
        {
            if(numbers[i] == numbers[j])
                duplicateFound = true;
        }
    }
    if(duplicateFound)
            results += "First pair of duplicates were found at positions: " + (i) + " and " + (j);
    else
            results += "No duplicates were generated.";
    JOptionPane.showMessageDialog(null, results);

}

}

您需要使用数字[i + 1],数字[j + 1]更改为i和j值的打印数字

public static void main(String[] args) {
    String results = "";
    int numbers[] = new int[10];

    for (int i = 0; i < numbers.length; i++) {
        numbers[i] = (int) ((Math.random() * 31) + 20);
        results += (i + 1) + " --- " + numbers[i] + "\n";
    }

    boolean duplicateFound = false;

    int i = 0;
    int j = 0;

    for (; i < numbers.length - 1 && !duplicateFound; i++) {
        for (j = i + 1; j < numbers.length && !duplicateFound; j++) {
            if (numbers[i] == numbers[j]) {
                duplicateFound = true;
            }
        }
    }
    if (duplicateFound) {
        results += "First pair of duplicates were found at positions: " + i + " and " + j;
    } else {
        results += "No duplicates were generated.";
    }

    JOptionPane.showMessageDialog(null, results);
}

暂无
暂无

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

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