[英]Simple Java program not printing anything
这是我第一次在这里发帖,如有错误请见谅。 我是 Java 的绝对初学者,我的任务是编写“生日问题”。 它是这样的:
假设人们一次进入一个房间。 人们必须如何进入直到两个人共享生日? 编写一个程序Birthday.java
,它需要两个 integer 命令行 arguments n
并试验并执行以下实验,试验次数:
为下一个人选择一个生日,在0
和n−1
之间均匀随机。 让那个人进入房间。 如果该人与房间里的其他人共享生日,请停止; 否则重复。 在每个实验中,计算进入房间的人数。 打印一个表格,总结从1
到分数达到的每个可能值i
的结果(计数i
、恰好i
人进入房间的次数以及i
或更少人进入房间的次数) (或超过)50%。
问题是,我的代码没有打印任何东西。 它正在正常编译并且没有显示任何错误,但是当我尝试运行它时,它只是没有显示任何 output 并且我已经没有关于如何改进它的想法。 命令行 arguments 的示例以及 output 的外观:图片
这是我的代码:
public class Birthday {
public static void main(String[] args) {
int n = Integer.parseInt(args[0]);
int trials = Integer.parseInt(args[1]);
boolean[] birthdays = new boolean[n];
int[] visits = new int[n + 2];
int cumsum = 0;
int k = 1;
for (int i = 1; i <= trials; i++) {
for (int j = 0; j < n; j++) {
birthdays[j] = false;
}
for (k = 1; k <= n; k++) {
int r = (int)(Math.random() * (n - 1));
if (birthdays[r] == false) {
birthdays[r] = true;
continue;
} else
if (birthdays[r] == true) {
visits[k]++;
cumsum += visits[k];
break;
}
}
}
int l = 1;
while ((double)(cumsum / trials) <= 0.5) {
System.out.print(l + "(\t)" + visits[k] + "(\t)" + ((double) cumsum / trials));
l++;
System.out.println("");
}
}
}
由于您现在希望看到但没有得到它们的语句都在您的 while 循环中,您应该将注意力集中在 while 循环如何/何时执行上。 正如其他人已经建议的那样,这实质上意味着查看情况。
只是为了检查您的代码是否能够打印,您可以添加一个打印语句,它将无条件运行。 例如在程序开始时,或在进入 while 循环之前。
为了专注于条件,查看用于决定循环的变量值可能会很有趣,所以无论如何我都会在循环之前和内部添加打印语句。 如果您正确地执行此操作,您甚至不需要调试您的代码。
最后同样重要的是,学习如何在小型项目中调试代码肯定会帮助您处理大型项目。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.