Java分解失败 - 为什么循环?

时间:2015-10-15 00:40:20

标签: java

我试图让代码找到用户输入的因子,为用户的输入提供素数分解,并给出lcm和gcm。它应该很简单。它是一个编程简介类,但它对我来说太快了。我花了好几个小时阅读和学习,并试图让这些代码工作。请帮忙。

import java.util.Scanner;


public class PattersonFactorization {


    public static void main(String[] args) 
    {
        //create scanner to obtain input from command window
        Scanner input = new Scanner(System.in);

        //initialization phase
        int input1 = 0; //initialize first input from user
        int input2 = 0; //initialize second input from user


        //prompt twice for two inputs from user 
        //until they enter a positive value for each input

        do
        {
            System.out.println("Please provide your first positive number: ");
            input1 = input.nextInt();
        }//end do for input1
        while(input1 <= 0);

        do
        {
            System.out.println("Please provide your next positive number: ");
            input2 = input.nextInt();
        }//end do for input2
        while(input2 <= 0);

        // call methods for factorization calculations
        calculateFactors(input1);
        calculateFactors(input2);
        calculatePrime(input1);
        calculatePrime(input2);
        calculateLCM(input1, input2);
        calculateGCF(input1, input2);


    }//end of main

    public static void calculateFactors(int input)
    {

        for(int countFactor = 1; countFactor < input; countFactor++)
        {
            if(countFactor % input == 0); 
            System.out.println(countFactor);
        }

    }//end of calculateFactors

    public static void calculatePrime(int input)
    {
        for(int countPrime = 1; countPrime < input; countPrime++)
        {
            if(countPrime % input == 0);
            System.out.println(countPrime);
            input = input/countPrime;
            countPrime--;
        }
    }//end of calculatePrime

    public static void calculateLCM(int input1, int input2)
    {
        for(int factorNum = 1; input1 % factorNum != 0 && input2 % factorNum != 0; factorNum++)
        System.out.println(factorNum);
    }//end of calculateLCM

    public static void calculateGCF(int input1, int input2)
    {
        for(int factorNum = input1; input1 % factorNum != 0 && input2 % factorNum != 0; factorNum--)
        System.out.println(factorNum);
    }

}//end of class

`

2 个答案:

答案 0 :(得分:2)

我认为问题在于:

        for(int countPrime = 1; countPrime < input; countPrime++)
        {
            if(countPrime % input == 0);
            System.out.println(countPrime);
            input = input/countPrime;
            countPrime--;
        }

递增循环递减 countPrime。结果它永远不会改变它的价值。

答案 1 :(得分:0)

您的代码存在一些问题:

if(countFactor % input == 0);
System.out.println(countFactor);

无论条件表达式的值如何,此处的代码始终会执行System.out.println(countFactor);。问题是if(countFactor % input == 0); - 您的if在结尾处有分号。

您可以使用no braces in this case

if(countFactor % input == 0)
    System.out.println(countFactor);

但是对于编码器来说,使用大括号几乎总是更清楚,编译器会显示范围:

if(countFactor % input == 0) {
    System.out.println(countFactor);
}

您的无限循环来自countPrime循环中递增和递减for

for(int countPrime = 1; countPrime < input; countPrime++)
{
    if(countPrime % input == 0);
    System.out.println(countPrime);
    input = input/countPrime;
    countPrime--;
}

countPrime将在循环结束时递减到0,然后在下一次循环迭代时递增回1input = input/countPrime;始终为input = input/1,这是您的终止表达式永远不会true的另一个原因。