我在学校从事过该项目,并因出错而卡住了。我无法运行此代码,因为它有一个错误'randA2
已在方法main(String[])
中定义'如何解决?
String [] A = {"Russia", "Saudi_Arabia", "Egypt", "Uruguay"};
int A1 = A.length;
int randA1 = (int)(Math.random()*A1);
int randA2 = (int)(Math.random()*A1);
int randA3 = (int)(Math.random()*A1);
int randA4 = (int)(Math.random()*A1);
while(randA1 == randA2) {
int randA2 = (int)(Math.random()*A1);
}
while(randA1 == randA3) {
int randA3 = (int)(Math.random()*A1);
}
while(randA2 == randA3) {
int randA3 = (int)(Math.random()*A1);
}
while(randA1 == randA4) {
int randA4 = (int)(Math.random()*A1);
}
while(randA2 == randA4) {
int randA4 = (int)(Math.random()*A1);
}
while(randA3 == randA4) {
int randA4 = (int)(Math.random()*A1);
}
String AnnounceA1 = A[randA1] +" " + "VS" + " " + A[randA2];
System.out.println(AnnounceA1);
String AnnounceA2 = A[randA3] +" " + "VS" + " " + A[randA4];
System.out.println(AnnounceA2);
答案 0 :(得分:5)
我想使用另一种方法来解决您的问题,您所需要的只是:
String[] contries = {"Russia", "Saudi_Arabia", "Egypt", "Uruguay"};
Collections.shuffle(Arrays.asList(contries));
String announceA1 = contries[0] + " VS " + contries[1];
System.out.println(announceA1);
String announceA2 = contries[2] + " VS " + contries[3];
System.out.println(announceA2);
答案 1 :(得分:1)
如果要在Java中将新值重新分配给变量,则无需再次声明其类型。因此,您的第一个while
循环应如下所示:
while (randA1 == randA2) {
randA2 = (int)(Math.random()*A1);
}
但是除此之外,您的代码还有一个逻辑问题,它实际上不会生成4个唯一的随机数。实际上,如果您控制接受的数字,它们并不是真正随机的。我会选择这个版本:
String[] teams = { "Russia", "Saudi_Arabia", "Egypt", "Uruguay" };
Set<Integer> rands = new HashSet<>();
while (rands.size() < teams.length) {
rands.add((int)(Math.random()*teams.length));
}
String AnnounceA1 = teams[rands[0]] +" " + "VS" + " " + teams[rands[1]];
System.out.println(AnnounceA1);
String AnnounceA2 = teams[rands[2]] +" " + "VS" + " " + teams[rands[3]];
System.out.println(AnnounceA2);
我建议的代码版本中的策略是使用 set 来容纳4个随机整数(这是示例中的团队数)。集的属性是每个条目都必须是唯一的。因此,如果我们迭代此集合并添加随机整数,则最终将得到4个唯一的随机整数。然后,我们可以使用它们来选择要在您的输出消息中显示的团队名称。
答案 2 :(得分:0)
您可以在while循环中重新定义变量。
在while循环中忽略let rangeOne = 1...500
let rangeTwo = 501...1000
let array = [] + rangeOne.reversed() + rangeTwo.reversed()
// [500, 499, ..., 2, 1, 1000, 999, ..., 502, 501]
声明:
let array = Array(rangeOne.reversed()) + rangeTwo.reversed()
let array = Array([rangeOne.reversed(), rangeTwo.reversed()].joined())
let array = Array(rangeOne.reversed()) + Array(rangeTwo.reversed())
let array = [rangeOne.reversed(), rangeTwo.reversed()].flatMap { $0 }
Java是一种类型安全语言。这与例如JavaScript不同。在JavaScipt内部,JIT(及时编译器)不会抱怨,因为它允许重新定义变量(如果类型发生更改,则为事件)。