Проблема с генератором факторов
У меня возникли проблемы с завершением этого генератора факторов из моего класса программирования. Предполагается взять число и распечатать все факторы, используя метод nextFactor. Когда я устанавливаю число в коэффициент, скажем, 150, он печатает "1 2 3 5", где он должен печатать "2 3 5 5". Итак, куда мне идти отсюда? Я посмотрел на следующий фактор метода программы Java - Factor Generator, но он не удивил ни одного из моих запросов
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;
}
2 ответа
Попробуйте, что эти факторы могут дублироваться, поэтому вам нужно выполнить цикл, пока вы не извлечете все экземпляры этого фактора.
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.");
}
Для начала, он всегда будет печатать 1, потому что любое целое число / 1 всегда будет иметь остаток от нуля. Вы можете начать с 2 вместо 1, если хотите пропустить 1.
Я бы предложил что-то вроде этого: (обратите внимание, что это частично основано на ответе BevynQ ниже):
for(int i = 2; i <= num; i++){
while (num >= i && num % i == 0) {
System.out.println(i);
num /= i;
}
}