Как избежать возврата нуля
У меня есть код работает, это класс методов факторизации и тестер. Он печатает код нормально, но я вынужден вернуть нулевое значение, потому что метод является целочисленным методом.
public class FactorGenerator{
private int num;
public FactorGenerator(int numberToFactor){
num = numberToFactor;
}
public int nextFactor(){
for(int i = 2; i <= num;){
if (num%i==0){
num = num/i;
System.out.println(i);
}
else{
i++;
}
}
return 0;
}
public boolean hasMoreFactors(){
for(int i = 1; i < num; i++){
if(num % i == 0){
return true;
}
}
return false;
}
}
И это тестер, который я использую, который не может быть изменен и должен оставаться прежним:
import java.util.Scanner;
public class FactorPrinter{
public static void main(String [] args){
Scanner in = new Scanner(System.in);
System.out.print("Enter a number to Factor:");
int numberToFactor = in.nextInt();
System.out.println("You chose: "+numberToFactor+" to factor.");
FactorGenerator fg = new FactorGenerator(numberToFactor);
while (fg.hasMoreFactors())
System.out.println(fg.nextFactor());
}
}
Когда я ввожу 150, он печатает 2,3,5,5,0. Есть ли способ удалить 0?
3 ответа
Не печатайте факторы в nextFactor()
, Верните их.
public int nextFactor() {
for (int i = 2; ; i++) {
if (num % i == 0) {
num /= i;
//System.out.println(i);
return i;
}
}
}
Тест num % i == 0
гарантированно вернет true в конце концов, так что если вы удалите i <= num
тест из for
цикл компилятор не потребует от вас добавить return 0
в конце.
Все необходимые отпечатки сделаны в nextFactor
, Так что просто не печатайте код возврата. Изменить это:
System.out.println(fg.nextFactor());
этим:
fg.nextFactor();
Тем не менее, nextFactor
имя тогда плохо названо. Даже если это дает результат, имя предполагает, что это генератор, который должен возвращать каждый фактор при каждом вызове, эффект памяти обеспечивается num
член метод. Делать то, что я советую, работает, но это может быть не в духе проблемы. Ответ Джона будет лучше, если вам нужно изучить / сохранить факторы, а не только напечатать их.
Ваш hasMoreFactor()
метод должен был вернуть false к тому времени, когда он был вызван четыре раза (и nextFactor
возвращается 2, 3, 5, 5 соответственно) и вызывается в пятый раз.