1

我知道这没什么大不了的,但我讨厌我的程序在做什么。这是我编写的一个简单程序,它要求用户输入一个整数,然后打印出它的所有因数。例如,当用户输入 150 时,程序应该打印 2、3、5、5。

这是我的程序(它有效)

import java.util.Scanner; 

public class FirstProgram {  
    public static void main(String[] args) {  

        Scanner scan = new Scanner(System.in);  
        int number;
        int divisor = 2;  

        System.out.println("Enter the number: ");  
        number = scan.nextInt();  
        while (number > 1) {  
            if ((number % (number / divisor)) == 0 && number > 0) {  
                number = number / divisor;  
                System.out.print(divisor);  
                if (number != 1)  
                    System.out.print(", ");  
            } 
            else if ((number % (number / divisor)) != 0 && number > 1) { 
                divisor++;  
                if (number == 1) {
                    System.out.println(number);
                    System.out.println();
                }
            }   
        }  
    }  
}

让我发疯的愚蠢问题是成绩单的最后一行。当它打印 2, 3, 5, 5 时,程序结束并在同一行结束。这是一张图片,因为我无法描述事物:

在此处输入图像描述

我尝试了一些东西,但是作为编程新手,我没有很多选择可以尝试。谢谢您的帮助!

4

4 回答 4

6

在你的主要方法结束时,只需添加

System.out.println();

让它在新的一行结束

于 2013-10-09T22:50:17.377 回答
0

你的问题是声明

System.out.println();

未执行,因为当您还剩一个号码时

while (number > 1) == false

如果将语句移到方法底部的 while 循环之外,它将正常工作。

还要考虑一下如何重构代码,因为我看不到该块

if (number == 1) {
  System.out.println(number);
  System.out.println();
}

由于我上面描述的问题,将永远被执行。(当数字 > 1 时)

标记

于 2013-10-09T23:03:44.233 回答
0

每当您需要移动到下一行时,只需System.out.println();在程序末尾使用 You just need that。

于 2013-10-09T22:53:12.027 回答
0

使用更好的缩进,您的代码如下所示:

Scanner scan = new Scanner(System.in);  
int number;
int divisor = 2;  

System.out.println("Enter the number: ");  
number = scan.nextInt();  
while (number > 1)
{
    if ((number % (number / divisor)) == 0 && number > 0)
    {  
        number = number / divisor;  
        System.out.print(divisor);  
        if (number != 1)  
        System.out.print(", ");  
    }
    else if ((number % (number / divisor)) != 0 && number > 1)
    { 
        divisor++;  

        if (number == 1)
        {
            System.out.println(number);
            System.out.println();
        }
    }   
}

您遇到的问题是,对于某些数字,else if ...您的循环部分永远不会到达。像这样重组循环体,我认为它会做你想做的事:

while (number > 1)
{
    if ((number % (number / divisor)) == 0 && number > 0)
    {  
        number = number / divisor;  
        System.out.print(divisor);  
        if (number != 1)  
        System.out.print(", ");  
    }
    else if ((number % (number / divisor)) != 0 && number > 1)
    { 
        divisor++;  

        if (number == 1)
        {
            System.out.println(number);
        }
    }   
}

System.out.println();

请注意,最终println()发生在循环打印出所有因素之后,但无论输入数字是什么,它都会发生。

于 2013-10-09T22:53:13.620 回答