我最近进入了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)
我做错了什么?
答案 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;
}
}