我正在尝试自己学习 Java 编程(没有类(class)/老师/导师/等),所以这不是家庭作业。
我的问题已在 Java Challenge for beginners: Generate random numbers in a while loop 中提到过然而,正如提出这个问题的前一位程序员所说,我在本书中的进展还不够深入,无法涵盖 ArrayList。
回答这个问题肯定会帮助大多数初学者程序员更好地理解如何编写 while 循环语句,这是一个通常很复杂的过程,特别是对于初学者来说。
问题是:编写一个 while 循环,生成 1 到 100 之间的随机数,并在生成两次相同的数字后停止循环。
您将认识到,每次运行此程序时,只会创建 1 到 100 之间的两个随机数的输出。我相信遇到此错误是由于第 17 行: equal = numberCheck ==values[i];不正确,因为这是定义 while 循环条件何时变为 true 并因此停止计算的语句。
非常感谢任何帮助。谢谢。
我的代码是:
import java.util.Random;
public class SameNumber {
public static void main(String args[]) {
Random rand = new Random();
int[] values = new int[100];
int counter = 0;
boolean equal = false;
for (int i = 0; i < 2; i++) {
values[i] = rand.nextInt(100) + 1;
System.out.println(values[i]);
int numberCheck;
}
while (!equal) {
for(int i = counter - 1; i >= 0; i--) {
int numberCheck = values[i];
equal = numberCheck == values[i];
//}
if (!equal) {
System.out.println(rand.nextInt(100) + 1);
}
for (int j = counter - 1; j >= 0; j--) {
if (numberCheck == values[j]) {
break;
}
}
}
}
}
}
P.S.:我知道这可能听起来很荒谬,但是我已经研究这个问题大约一周了,并试图收集更多的研究,但我仍然无法找到正确的解决方案。我一直犹豫是否要寻求帮助,因为我担心其他程序员会用我还没有学过的方法来回答。
最佳答案
您的方法非常间接...让我们直接按照说明进行尝试:
- 生成新的随机数
- 确定您以前是否见过这个随机数
- 没有?记录您已看到此随机数并转到 1。
- 是吗?停止
那么真正的问题是,“我如何确定我以前是否见过随机数?”。
由于它是有限集,因此您可以将 boolean 数组 ( boolean seen[100]
) 初始化为 false。每当您看到数字时,请标记 seen[<number>]
如true
。如果seen[<number from 2>]
是永远正确的,您以前已经生成过它。
使用ArrayList
顺便说一句,跟踪这些事情并不是数据结构的最佳选择。当您准备好查看 Java 集合时,请查看 HashSet
,它具有恒定时间(不依赖于列表的大小)执行 contains
.
关于Java While 循环与 Java 初学者编程中提出的挑战相关,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11996290/