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();、プログラムの最後で 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 に答える
0

あなたの問題は、ステートメント

System.out.println();

数字が1つ残っているため、実行されません

while (number > 1) == false

メソッドの下部にある while ループの外にステートメントを移動すると、正常に動作します。

ブロックが見えないので、コードをリファクタリングする方法についても考えてください

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

上で説明した問題のために実行されることはありません。(数 > 1 の間)

マーク

于 2013-10-09T23:03:44.233 に答える