除数计数器程序产生奇怪的输出

时间:2019-11-14 23:28:22

标签: java math nested-loops

我正在尝试创建一个除数计数器程序,该程序将输出N的所有值除以一组从1到N(初始)的数字,同时还每当N%intial =时增加一个称为“ divisorcount”的变量。 0。下面是我编写的程序:

    public static void main(String[] args) {
        int divcount;
        int initial;
        int divisorcount;
        Scanner userinpt = new Scanner(System.in);
        int N = userinpt.nextInt();

        for (initial = 1; initial < N; initial++) {
            divisorcount = 0;
            System.out.print(N / initial);

            if (N % initial == 0) {
                divisorcount++;
                System.out.println(divisorcount);
            } 
        } 
    }

当我在程序中输入数字20时,得到以下结果: (20 //this is the input the following are outputs) 201 101 651 41 322221 111111111

Process finished with exit code 0

这与我想要或期望的输出并不相符,我不知道为什么得到这个结果。我尝试将变量更改为long,float和double等不同类型,以查看是否有帮助,但是我的代码仍然得到古怪的输出。我究竟做错了什么?特别是为什么我编写的代码会产生这些值。

1 个答案:

答案 0 :(得分:0)

我假设您的代码是Java。

请注意,System.out.print不会打印换行符。

因此,当initial = 1时,System.out.print(N/initial);将显示“ 20”。

然后,由于20%1 == 0,它将在同一行上打印除数(“ 1”)。现在的输出为“ 20” +“ 1”或“ 201”。

但是,由于您在此处使用println,因此会添加一个换行符。

System.out.println(divisorcount);

下一次迭代将打印“ 10”,然后在下一行打印“ 1”。

对于第三次迭代,它将首先打印“ 6”。由于20%3!= 0,它将跳过if块并转到下一个迭代(初始= 4)。然后它将打印“ 5”,然后输入if语句并用换行符打印“ 1”。

另外,正如所写的那样,divisorcount永远不会超过1,因为它将在每次迭代中重置。不知道这是否是故意的。

divisorcount=0;
System.out.print(N/initial);
if(N%initial==0){
    divisorcount++;
    System.out.println(divisorcount);
}