首页 > 解决方案 > 简单的 Java 程序不打印任何东西

问题描述

这是我第一次在这里发帖,如有错误请见谅。我是 Java 的绝对初学者,我的任务是编写“生日问题”。它是这样的:

假设人们一次进入一个房间。人们必须如何进入直到两个人共享生日?编写一个程序Birthday.java,接受两个整数命令行参数n和试验,并执行以下试验,试验次数:

0为下一个人选择一个生日,在和之间均匀随机n−1。让那个人进入房间。如果该人与房间里的其他人共享生日,请停止;否则重复。在每个实验中,计算进入房间的人数。i打印一个表格,总结从直到分数达到(或超过ii50 %。i1

问题是,我的代码没有打印任何东西。它正在正常编译并且没有显示任何错误,但是当我尝试运行它时,它只是没有显示任何输出,而且我已经没有关于如何改进它的想法。命令行参数的示例以及输出的外观:图像

这是我的代码:

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("");
        }
    }
}      

标签: javaoutput

解决方案


由于您现在希望看到但没有得到它们的语句都在您的 while 循环中,您应该将注意力集中在 while 循环如何/何时执行上。正如其他人已经建议的那样,这本质上意味着查看情况。

只是为了检查您的代码是否能够打印,您可以添加一个打印语句,它将无条件运行。例如在程序开始时,或在进入 while 循环之前。

为了专注于条件,查看用于决定循环的变量值可能会很有趣,因此无论如何我都会在循环之前和内部添加打印语句。如果您正确地执行此操作,您甚至不需要调试您的代码。

最后同样重要的是,学习如何在小型项目中调试代码肯定会帮助您处理大型项目。


推荐阅读