我必须找到并列出数组中所有重复的索引值。
实施例: int [] array = {0,7,9,1,5,8,7,4,7,3};
7位于索引1,6和8的三个不同位置。为了让outputResults.setText()显示重复值的位置,我将如何修改现有代码?如果有帮助,outputResults.setText()是JTextField。
String tmp1 = getNumbers.getText();
try {
int search = Integer.parseInt(tmp1);
for (p = 0; p < array.length; p++) {
if(array[p]==search) {
b = true;
index = p;
}
}
if(b==true)
outputResults.setText(search + " was in the following fields of the array " + index);
else
throw new NumberNotFoundException("Your number was not found.");
} catch (NumberFormatException ex) {
JOptionPane.showMessageDialog(getContentPane(), "You can only search for integers.");
} catch (NumberNotFoundException ex) {
JOptionPane.showMessageDialog(getContentPane(), ex.getMessage());
}
在它的当前状态下,它将仅根据我的示例列出重复号码的最后一次定位,这将是索引8。数组中的数字列表由用户输入,我不允许对值进行排序。我最初的猜测是创建一个嵌套循环,每当它找到一个重复的数字时,将p(它正在搜索的当前索引)添加到一个新数组。然后我会在outputResults.setText()中列出完整的数组,但是当我尝试时它会发出一些警告和错误。
如果需要,可以在此处找到完整代码:http://pastebin.com/R7rfWAv0 是的,完整的程序是一团糟,但它完成了工作,我对此感到头疼。另请注意,在完整的程序中,教授要求我们在检测到重复值作为额外信用时抛出异常。我做到了,但我评论它完成了原来的任务,所以请忽略它。
答案 0 :(得分:1)
我认为您应该使用List
来记录索引
List<Integer> indexs =new ArrayList<Integer>();
for (p = 0; p < array.length; p++) {
if(array[p]==search) {
indexs.add(p);
}
}
if(p.length()>0){
//print the result
}
答案 1 :(得分:1)
不需要哈希表,列表或其他任何东西,你可以很容易地做到这一点:
int [] array = { 0, 7, 9, 1, 5, 8, 7, 4, 7, 3};
int pointer=0;
int currNumber;
while(pointer<array.length)
{
currNumber=array[pointer];
for(int i=0;i<array.length;i++){
if(currNumber==array[i] && i>pointer){
System.out.println("Duplicate for "+currNumber +" in " +i);
break;
}
}
pointer++;
}
它将打印阵列中所有数字的所有重复项。
Duplicate for 7 in 6
Duplicate for 7 in 8
显然,您可能必须连接一个字符串并通过调用outputResults.setText()
答案 2 :(得分:1)
两个for循环怎么样?
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array.length; j++) {
if (array[i] == array[j]) {
System.out.println("Duplicate - " + array[i] + " found at index " + i + " and " + j);
}
}
}
答案 3 :(得分:0)
一种选择是创建一个使用该值作为键的HashMap,以及该值的索引集合。在扫描数组时,如果该值不在HashMap中,请使用新的索引集合添加它。如果值在数组中,请拉取集合,添加下一个索引并完成迭代。
完成后,迭代HashMap,任何具有size()&gt;值的条目。 1有重复。
答案 4 :(得分:0)
当您遍历数组时,您将使用行index = p;
覆盖以前找到的任何索引。只有在搜索到一个值时,此行才有效。每次到达该行时,让index
成为一个字符串并连接到它,以便index += " "+p;
。你的行:
outputResults.setText(search + " was in the following fields of the array " + index);
然后将打印出所搜索值的所有找到的索引。
所以,有几种方法可以完成你的解决方案(一些天真的,一些是最优的)。你应该仔细思考你想要实现的目标,并在遇到问题时弄清楚每行在你的代码(调试)中做了什么。