java - 生成 6 个不相等数字的循环失败(java)
问题描述
我这里有以下代码:
import java.util.Random;
public class Main {
public static void main(String[] args) {
int numnovo, numeros[], j;
boolean igual;
numeros = new int[6];
Random rand = new Random();
numnovo = rand.nextInt(60)+1;
numeros[0] = numnovo;
System.out.println("Número 1: " + numeros[0]);
for(int i = 1; i < 6; i++)
{
do
{
igual = true;
numnovo = rand.nextInt(60)+1;
j=0;
while(j<=i && igual)
{
igual = (numnovo == numeros[j++]);
}
}while(igual);
numeros[i] = numnovo;
System.out.println("Número " + (i+1) + ": " + numeros[i]);
}
}
}
所以,这是我从中得到的结果之一:
numeros[0]=48
numeros[1]=31
numeros[2]=52
numeros[3]=25 - repeated
numeros[4]=18
numeros[5]=25 - repeated
然而,在分析代码时,我想它会在循环内部出现以下情况:
i=5
j=0 numeros[0]=48 false
j=1 numeros[1]=31 false
j=2 numeros[2]=52 false
**j=3 numeros[3]=25 true**
特别是在标记的行中,我假设满足 while 循环 (j<=i && igual) 的条件,因此,它将退出循环并生成一个新数字,但这并没有发生,它直接通过并认为它是一个有效值。
我已经为这个问题绞尽脑汁大约一天了,但找不到解决方案,而且这发生在大约 10% 的执行中,所以这不是一个孤立的案例。
我试图研究“j vs i”关系,如“重复的数字是否总是接近前一个”,但在某些执行中,重复的数字将是 numeros[0] 和 numeros[5],而在其他情况下它可能像 numeros[0] 和 numeros[1],所以论文没有用。
我也尝试将条件从 && 更改为 ||,但得到的却一点也没有改变。
我还尝试了一些不同的条件语法,如朝着相反的方向前进(使用错误语句而不是真),以及不同的循环而不是 Do-While,但仍然没有运气。
所以...这里有什么帮助吗?
解决方案
while(j<=i && igual)
{
igual = (numnovo == numeros[j++]);
}
你第一次停止一个数字不相等,所以在你的例子中,你只检查第一个数字是否相等。
在这种情况下,您通常想尝试相反的方法:
do {
boolean found = false;
numnovo = rand.nextInt(60)+1;
j=0;
while (j<=i){
if (numnovo == numeros[j++]){
found = true;
}
}
}while(found);
从评论中
这个想法是不在代码中使用任何 if,这就是为什么我使用语法 igual = (numnovo == numeros[j++])
在这种情况下,您可以尝试:
do {
boolean found = false;
numnovo = rand.nextInt(60)+1;
j=0;
while (j<=i){
found = numnovo == numeros[j++] || found;
}
}while(found);
或者,就像@nullptr 的回答一样,从循环中中断:while (j<=i && !found)
推荐阅读
- docker - 将大于 400 KB 的有效负载 POST 到 Kubernetes 中的容器失败
- javascript - 无法将文件上传到盒子(文件存储系统)
- javascript - 无法读取 null 的属性“播放”
- regex - nginx 匹配路径中的文件夹并且没有需要重写的 .html 附加 .html
- javascript - 在 discord.js 中将反应用作按钮的最佳方法?
- c# - 使用 Newtonsoft.Json 检测 json 对象的结尾
- java - 即使在 bootstrap.properties 中提供应用程序名称和 URI 后,配置服务器(JDBC 后端)也没有找到属性源
- kubernetes - 将 kube-state-metrics 安装到 GCE 上的现有集群中
- acumatica - 如何在销售订单屏幕中隐藏操作按钮
- aix - AIX 中 gcc 编译器中的异常处理