将相似的数字分组到括号中

时间:2014-05-09 17:39:40

标签: java

我最近进入了java,我需要一个基本程序的帮助:

public static void main(String[] args) {
Random gen = new Random();
int roll = gen.nextInt(6) + 1;
    int[] array = new int[20];
    // Replacing all the numbers of the array to random ones
    for (int i=0; i<20; i++){
        roll = gen.nextInt(6) + 1;
        array[i] = roll;
    }
    // Bracketing all repeating numbers
    for (int i=0; i<19; i++){
        if (array[i] == array[i++]){
            System.out.print("(");
        }
        System.out.print(array[i]);
        if (array[i] == array[i--]){
            System.out.print(")");
        }
      }
    }
  }

所有这些代码都是随机掷骰并将所有相同的数字括起来:

13(66)5(2222)(66)71

但是,使用此代码所做的只是括号所有数字而不是相同的数字:

(1)(3)(6)(6)(5)(2)(2)(2)(2)(6)(6)(7)(1)

我做错了什么?

2 个答案:

答案 0 :(得分:0)

您的代码仅在array[i]中的索引编号之前和之后立即检查数字。

您可以在第一个循环中创建第二个循环,以迭代数组中的所有数字以检查匹配。

如果您这样做,则需要使用其他机制跟踪匹配的数字。当你正在做的时候立即打印出一个括号将会出现内循环问题。

要考虑的一个简单方法是另一个跟踪是否存在匹配的数组。

答案 1 :(得分:0)

如果您最近加入Java,请尽量避免在方括号内使用i ++和++ i。您可以使用布尔变量来解决此问题,该变量指示是否已打开括号。

生成随机数后,试试这个:

    boolean openBracket=false;
    for (int i=0; i<array.length-1; i++){
        if (array[i] == array[i+1] && !openBracket){
            System.out.print("(");
            openBracket=true;
        }
        System.out.print(array[i]);
        if(array[i] != array[i+1] && openBracket){
            System.out.print(")");
            openBracket=false;
        }
      }