查找数组中的连续数字

时间:2017-12-12 22:20:19

标签: java

过去3个小时我一直在努力解决这个问题,我很沮丧。如果有人能帮助我,我会非常感激。程序必须生成10个随机整数,然后它必须打印出整数行并将连续的整数组合在一起

实施例: 4 3 3 4 0 0 1 3 0 4 4 5 2 2 5 4 5 1 2 2 分组后: 4(3 3)4(0 0)1 3 0(4 4)5(2)2 5 4 5 1(2 2)

Heres是我的代码

package week6assignments;

import java.util.Random;

public class Question2REal 

{

public static void main(String[] args) {
    Random rand = new Random();
    int[] rolls = new int[20];
    int input;
    int x = 1;
    boolean found = false;

    for (int i = 0; i < rolls.length; i++) {
        input = rand.nextInt(6);
        rolls[i] = input;
    }

    System.out.println("Raw data output after 20 dice rolls");
    for (int i = 0; i < rolls.length; i++) {
        System.out.print(rolls[i] + " ");
    }

    System.out.println("");
    System.out.println("Data after grouping runs together");

    for (int i = 0; i < rolls.length; i++) {
        ++x;
        if (x > 19) {
            x = 19;
        }
        if (rolls[i] == rolls[x] && found == false) {
            System.out.print("(");
            found = true;

            if (rolls[i] == rolls[x] && found == true) {
                System.out.print(rolls[i]);
            }
        }

        if (rolls[i] > rolls[x] || rolls[i] < rolls[x] && found == true) {
            found = false;
        }
        System.out.print(rolls[i]);
    }
}
}

我知道这个程序已经完成了它应该做的事情,但我已经尝试了100个我能想到的东西,并且无法弄清楚或在网上找到一个例子。 :(

2 个答案:

答案 0 :(得分:0)

我真的很困惑你在你的代码中尝试做的事情(就像你说的那样,离开了)所以忘掉你在最后一个for循环中已经拥有的一切。

首先,您要确定当前的数字是否与下一个数字相同,以便将它们组合在一起。就像这样。

if (rolls[i] == rolls[i+1]) {
    System.out.print("(" + rolls[i]);
}

现在,在您的问题和示例中,尚不清楚在是否存在超过2个相同数字的情况下,预期的操作是什么。所以我假设你会把它包含在小组中。

在这种情况下,你做一个while循环(在if内和print之后),检查以下所有数字是否相同。

i++;

while (rolls[i] == rolls[i+1]) {
    System.out.print(" " + rolls[i]);
    i++;
}

最后,我们一直在打印最后一个数字而不是当前数字,所以如果下一个数字不再与当前数字相同,它将退出while循环,我们必须打印当前数字并关闭托架。所以像这样......

System.out.print(" " + rolls[i] + ") ");

现在让我们来处理其他情况。简单,只需打印数字然后继续......

} else {
    System.out.print(rolls[i] + " ");
}

当然,这并不完美,仍然需要处理一些边缘情况。如果while循环遍历最后一项怎么办?现在我们有一个ArrayIndexOutOfBound。所以这里有一点调整......

while ((i+1) < rolls.length && rolls[i] == rolls[i+1])

但是那么在最后一次for循环迭代中第一个if呢?可能需要相同的修复...

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

我基本上完成了所有的工作并为你思考。如果您理解我所解释的内容,您应该能够轻松地将这些部分组合在一起。

答案 1 :(得分:-4)

家庭作业准备就绪。 ;)

import java.util.Random;

public class Homework {


    public static void main(String[] args) {

        Random rand = new Random();

        Integer last = null;
        boolean equals = false;

        for (int i = 0; i < 20; i++) {
            int newInteger = rand.nextInt(6);

            if(Integer.valueOf(newInteger).equals(last)) {

                if(!equals) System.out.print("( ");

                equals = true;

                System.out.print(last+" ");

            } else {

                if(last != null) System.out.print(last+" ");

                if(equals) System.out.print(") ");

                equals = false;

            }

            last = newInteger;

        }

        System.out.print(last);

        if(equals) System.out.print(" )");

    }

}