我有一个设置为x的随机数和一个初始化为true的布尔数组。我需要能够以随机数(x)开始并将每第三个值转为false,直到剩下一个真值。真正的价值是新的“赢家”。这是我到目前为止所有的建议都很棒。
int win;
for( win = x; win < trueStatus.length; win++)
{
if((win % 3 == 0 && trueStatus[win]==true))
{
trueStatus[win]=false;
}
}
答案 0 :(得分:0)
首先,您win
的标准(最后一个仍为true
)要求您每次都获得一个新的随机数....基本上,您需要一些东西来计算{{1你true
中的(s)。使用可能类似
for-each
loop
boolean[]
然后你可以循环直到有赢家之类的
private static int countTrues(boolean[] arr) {
int c = 0;
for (boolean b : arr) {
if (b) {
c++;
}
}
return c;
}
另外,如果你想以三的倍数进行迭代,请使用public static void main(String[] args) throws Exception {
boolean[] trueStatus = new boolean[10];
Arrays.fill(trueStatus, true);
Random rand = new Random();
while (countTrues(trueStatus) > 1) {
trueStatus[rand.nextInt(trueStatus.length)] = false;
}
for (int i = 0; i < trueStatus.length; i++) {
if (trueStatus[i]) {
System.out.println("winner at " + i);
break;
}
}
// Display entire array to prove there is only one "true"
System.out.println(Arrays.toString(trueStatus));
}
(它的多更快然后递增1并使用模3进行测试)。
答案 1 :(得分:0)
我提出的解决方案:
private static int findWinner(boolean[] trueStatus, int x) {
int win = 0;
if (trueStatus == null || trueStatus.length % 3 == 0 || x < 0 || x >= trueStatus.length) {
throw new IllegalArgumentException();
}
int numberOfTrues = trueStatus.length;
if (trueStatus.length == 1) {
return 0;
}
if (trueStatus.length == 2) {
return 1 - x;
}
int index = x;
while (numberOfTrues > 1) {
if (trueStatus[index]) {
trueStatus[index] = false;
numberOfTrues--;
index = (index + 3) % trueStatus.length;
}
}
for (int i = 0; i < trueStatus.length; i++) {
if (trueStatus[i]) {
win = i;
break;
}
}
return win;
}
编辑:还有更聪明的方法来查找公式,在这种情况下应该是:
win = (trueStatus.length - 3 + x) % trueStatus.length;
完整的方法将是:
private static int findWinner(boolean[] trueStatus, int x) {
int win = 0;
if (trueStatus == null || trueStatus.length % 3 == 0 || x < 0 || x >= trueStatus.length) {
throw new IllegalArgumentException();
}
int numberOfTrues = trueStatus.length;
if (trueStatus.length == 1) {
return 0;
}
if (trueStatus.length == 2) {
return 1 - x;
}
win = (trueStatus.length - 3 + x) % trueStatus.length;
return win;
}