2013-12-05 5 views
0

У меня возникли проблемы с заполнением этого генератора факторов из моего класса программирования. Он должен взять номер и распечатать все факторы, используя метод nextFactor. Когда я ставлю число, чтобы сказать 150, он печатает «1 2 3 5», где предполагается напечатать «2 3 5 5». Итак, куда мне идти? Я посмотрел на Java - Factor Generator program nextfactor method, но это не awnser любого из моего inqueriesПроблема с генератором факторов

public class FactorGenerator 
{ 
    //user inputs int from scanner in FactorTester class 
    public FactorGenerator(int i) 
    { 
     num = i; 
    } 

    //Checks to see if num can be factored, but does not factor it. 
    //Goes through all possible factors of num and returns true if the remainder == 0 
    public boolean hasMoreFactors() 
    {  
     for(int i = 1; i < num; i++) 
     { 
      //check if the remainder is anything other then 0 
      if(num % i == 0) 
      { 
       return true; 
      } 
     } 

     return false; 
    } 

    //Actually factors num and prints out the factor at the end of every loop. 
    public void nextFactor() 
    { 
     for(int i = 1; i < num; i++) 
     { 
      //check if the remainder is anything other then 0 
      if(num % i == 0) 
      { 
       System.out.println(i); 
       num /= i; 
      }    


     } 

     System.out.println("Done."); 
    } 

    private int num; 
} 

ответ

1

попробовать эти факторы могут дублировать так что вам нужно в цикле, пока вы не добыли все экземпляры этого фактора

public void nextFactor() 
{ 
    for(int i = 2; i <= num; i++) 
    { 
     //check if the remainder is anything other then 0 
     while (num >= i && num % i == 0) 
     { 
      System.out.println(i); 
      num /= i; 
     }   

    } 

    System.out.println("Done."); 
} 

альтернативный способ является сделать приращение в теле цикла

public void nextFactor() 
{ 
    for(int i = 2; i <= num;) 
    { 
     //check if the remainder is anything other then 0 
     if (num % i == 0) 
     { 
      System.out.println(i); 
      num /= i; 
     } else { 
      i++; 
     } 

    } 

    System.out.println("Done."); 
} 
+0

Не будет ли причиной бесконечного цикла, когда i равно 1? – Taylor

+0

Да, хороший пятнистый денщик. – BevynQ

+0

Спасибо, Робин! – Taylor

0

Для начала, он всегда будет печатать 1, потому что любое целое число/1 всегда будет иметь остаток от нуля. Вы можете начать с I 2 вместо 1 в вашей, если вы хотите, чтобы пропустить 1.

Я хотел бы предложить что-то вроде этого: (заметьте это основано частично на ответ BevynQ в поле ниже):

for(int i = 2; i <= num; i++){ 
    while (num >= i && num % i == 0) { 
     System.out.println(i); 
     num /= i; 
    } 
}   
+0

Повесьте, я вижу проблему, lemme revise – Taylor

+0

Редакция завершена – Taylor