[英]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循环之外声明i
和j
才能使该方法起作用。 另外,如果要打印数组中基于1的位置,则可以打印numbers[i+1]
和numbers[j+1]
,我猜应该只是i+1
和j+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.