2016-11-06 54 views
-1

所以我需要摆脱每行最后的乘法符号。我尝试了几种不同的方式,但他们只是搞乱了我的代码,或者没有工作,我似乎无法围绕如何解决这个问题。我该如何做到这一点,因此最后的乘法符号不包含在阶乘的行中?

下面是输出的一个例子:

Starting value (at least 2): 
59 

Ending value (at least 2): 
64 

59 = 59 x 

60 = 2 x 2 x 3 x 5 x 

61 = 61 x 

62 = 2 x 31 x 

63 = 3 x 3 x 7 x 

64 = 2 x 2 x 2 x 2 x 2 x 2 x 

以下是我希望它看起来:

Starting value (at least 2): 
59 

Ending value (at least 2): 
64 

59 = 59 

60 = 2 x 2 x 3 x 5 

61 = 61 

62 = 2 x 31 

63 = 3 x 3 x 7 

64 = 2 x 2 x 2 x 2 x 2 x 2 

而这里的代码:

import java.util.Scanner; 

public class PrimeFact { 

    public static void main(String[] args) { 
     int start, stop; 
     int number = 0; 

     Scanner input = new Scanner(System.in); 
     System.out.println("Starting value (at least 2): "); 
     start = input.nextInt(); 
     System.out.println("Ending value (at least 2): "); 
     stop = input.nextInt(); 

     // stops the program if the user entered n input that cannot be factored 
     if (start < 2 || stop < 2) { 
      System.out.println("Amount must be at least 2 rather than " + start + " and " + stop + ". Quitting."); 
      System.exit(0); 
     } // end if 

     // loop 
     // calls factors 
     for (int i = start; i <= stop; i++) { 
      number = i; 
      printFactors(i); 
      System.out.println(); 
     } // ends loop 

    }// ends main 

    // prints prime factors 
    public static void printFactors(int number) { 
     int out = number; 
     int count = 0; 
     System.out.print(out + " = "); 
     for (int factor = 2; factor <= number; factor++) { 
      int exponent = 0; 
      while (number % factor == 0) { 
       number /= factor; 
       exponent++; 
       count++; 
      } 
      if (exponent > 0) { 
       printExponents(exponent, factor, count); 

      } 
     } 
    } 

    //prints the factors the required number of times 
    public static void printExponents(int exponent, int factor, int count) { 

     for (int q = 1; q <= exponent; q++) { 
      System.out.print(factor + " x "); 
      // if (q /= count) { 
      // System.out.print(factor); 
      // } 
     } 
    } 

}// ends class 
+1

是System.out.print'(因子+(q!=指数? “x”:“”));' –

+0

@ElliottFrisch你试过了吗?看起来像这样会在2x2x3x5的第二秒后抑制x。我得到你想要做的。我想在不是第一个因素(因为你预计第一个而不是最后一个)之前建立一个x。 –

+0

@JeremyKahan在我自己的代码中,我可能会使用['StringJoiner'](https://docs.oracle.com/javase/8/docs/api/java/util/StringJoiner.html)。 –

回答

0

到附近的整数的声明printFactors加入

boolean hadFactor = false; 

也有修改您的来电:

if (exponent > 0) { 
      printExponents(exponent, factor, count, hadFactor); 
      hadFactor=true; 

     } 

和printExponents做

public static void printExponents(int exponent, int factor, int count, boolean hadFactor) { 

    for (int q = 1; q <= exponent; q++) { 
     if (hadFactor){System.out.print(" x ")} 
     System.out.print(factor); 
     hadFactor=true; 
     // if (q /= count) { 
     // System.out.print(factor); 
     // } 
    }