java - 简单的 Java 程序不打印任何东西
问题描述
这是我第一次在这里发帖,如有错误请见谅。我是 Java 的绝对初学者,我的任务是编写“生日问题”。它是这样的:
假设人们一次进入一个房间。人们必须如何进入直到两个人共享生日?编写一个程序Birthday.java
,接受两个整数命令行参数n
和试验,并执行以下试验,试验次数:
0
为下一个人选择一个生日,在和之间均匀随机n−1
。让那个人进入房间。如果该人与房间里的其他人共享生日,请停止;否则重复。在每个实验中,计算进入房间的人数。i
打印一个表格,总结从直到分数达到(或超过i
)i
50 %。i
1
问题是,我的代码没有打印任何东西。它正在正常编译并且没有显示任何错误,但是当我尝试运行它时,它只是没有显示任何输出,而且我已经没有关于如何改进它的想法。命令行参数的示例以及输出的外观:图像
这是我的代码:
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 循环之前。
为了专注于条件,查看用于决定循环的变量值可能会很有趣,因此无论如何我都会在循环之前和内部添加打印语句。如果您正确地执行此操作,您甚至不需要调试您的代码。
最后同样重要的是,学习如何在小型项目中调试代码肯定会帮助您处理大型项目。
推荐阅读
- python - 加入 pandas 系列字符串
- android - 获取语言环境阅读方向(Android)
- android - URL HTML解析器在android中的速度如此之慢
- datagrid - React-Admin - 如何在 React-Admin 中创建没有列表的 Datagrid
- office-js - 如何从 Office.js API 更改自动更正表格选项?
- java - 使用 Maven Surefire 保留 JUnit XML 报告结构
- android - 获取 isConnected 失败:Kotlin Retrofit 发布请求的 ECONNREFUSED(连接被拒绝)错误
- ms-access - 如何根据限制字段计算与描述匹配的记录
- excel - VBA Excel如何在文本框中编写Excel公式
- rest - req.FormValue 不映射 req.body 值