简单的java麻烦

时间:2013-10-09 22:47:06

标签: java

我知道这不是什么大问题,但我讨厌我的程序在做什么。 这是一个简单的程序,我写了一个程序,询问用户一个整数,然后打印出所有的因素。例如,当用户输入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时程序结束并且它的结束在同一行。这是一张图片,因为我无法描述:

enter image description here

我尝试了一些东西,但是在编程方面我是新手,我没有太多选择。谢谢你的帮助!

4 个答案:

答案 0 :(得分:6)

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

System.out.println();

所以它以新的一行结束

答案 1 :(得分:0)

每当您需要移动到下一行时,只需使用System.out.println();您只需在程序结束时使用它。

答案 2 :(得分: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(),但无论输入的数字是什么,它都会发生。

答案 3 :(得分:0)

你的问题是声明

System.out.println();

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

while (number > 1) == false

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

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

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

由于我上面描述的问题,它会被执行。 (数字> 1)

标记