在一个数组中识别重复数字

4

输入图像说明

我正在处理以下问题。我不是要求任何人给出解决方案,而是寻求一些解决此问题的指导。以下是我到目前为止想到的解决方法。

我基本上尝试首先将重复的值放在()中。然而,我得到了一个越界错误。如果有人能够把我引导到编写能够处理此问题的小算法的正确路径上,我将不胜感激。

我的代码(正在进行中)

import java.util.Random;

public class Test {

    public static void main(String[] args) {

        int[] values = { 1, 2, 5, 5, 3, 1, 2, 4, 3, 2, 2, 2, 2, 3, 6, 5, 5, 6,
                3, 1 };

        boolean inRun = false;

        for (int i = 0; i < values.length; i++) {

            if (values[i] == values[i + 1] && values[i + 1] < values.length) {
                System.out.print("(");

            }

            System.out.print(values[i]);

        }

    }

}

2
考虑在循环的每次迭代中打印'i'的值。 - hoipolloi
@hoipolloi,我不明白你的意思...你能详细说明一下吗?抱歉。 我难道不是已经通过每次迭代打印了 i 的值吗? - user1010101
1
你的 if 语句正在检查 values[i+1]。当你到达循环的末尾,即 values[i] 是最后一个元素时,values[i+1] 会是什么? - azurefrog
你可以将该数组转换为字符串,并使用正则表达式 (.)\1+ - Bohemian
@user:不,你正在打印数组中的值。我的意思是打印实际的索引,例如System.out.println(i);,然后考虑随着循环的继续索引如何变化。 - hoipolloi
2个回答

4

你的错误在这里,

if (values[i] == values[i + 1] && values[i + 1] < values.length) {

因为 i + 1 没有按正确的顺序进行 less than 测试 -
if (i + 1 < values.length && values[i] == values[i + 1]) {

或者你可以使用以下方式:

for (int i = 0; i < values.length - 1; i++) { // the length of values - 1 so we can
                                              // get the next value.

在这种情况下,如果我像这样更改它,它将不会打印最后一个值。 - user1010101
1
如果您像第二个示例那样进行更改,循环结束后可以打印 values[values.length-1] - Elliott Frisch
1
@user2733436,你还需要单独处理当运行结束于最后一个元素的情况。 - Pham Trung

4
你需要迭代整个数组,如果找到一对,则需要在while循环中再次迭代,直到找到非配对项。
示例:
 int[] values = { 1, 2, 5, 5, 3, 1, 2, 4, 3, 2, 2, 2, 2, 3, 6, 5, 5, 6, 3, 1 };

 boolean inRun = false;

 for (int i = 0; i < values.length; i++) {

     if (i + 1 < values.length && values[i] == values[i + 1] )
     {
         System.out.print("(");
         while (i + 1 < values.length && values[i] == values[i + 1] )
         {
             System.out.print(values[i++]);
         }
         System.out.print(values[i++]);
         System.out.print(")");
     }
     System.out.print(values[i]);

 }

结果:

12(55)31243(2222)36(55)631

太棒了。我正在考虑类似的事情。你能推荐一些资源或地方,让我可以解决更多这样的问题吗?因为我想开始自己分解这些问题。 - user1010101
1
@user2733436,请查看http://projecteuler.net/(目前离线)。该网站提供不同类型的问题,但能帮助你学习编程语言。 - Justin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接