2015-11-02 2 views
0

Я изучаю Java. Следующая программа должна исследовать число и определить, сколько факторов (даже делителей) это число. Например,Почему мой код отличается от ожидаемого в Java?

1 имеет только сам фактор. 5 имеет 3 фактора: 1 и 5. 9 имеет 3 фактора: 1, 3 и 9.

Я поставляю программу с этими тремя числами в списке. Я ожидаю, что выход будет

{1, 2, 3} 

Однако то, что я получаю это оригинальный номер, напечатанный, что много раз:

{1, 5, 5, 9, 9, 9} 

Что я сделал не так?

int totalFactor(int[] n){ 
    int tally =0; 
     for (int i = 0; i < n.length; i++){ 
     for(int j = 1; j <= n[i]; j++){ 
      if((n[i] % j) == 0){ 
       tally++; 
      } 
     } 
    } 
    return tally; 
} 

int[] factorsOfEach(int[] num){ 
    int[] factor = new int[totalFactor(num)]; 
    int count = 0; 

    for(int i = 0; i < num.length; i++){ 
     for(int j = 1;j <= num[i]; j++){ 
      if(num[i] % j == 0){ 
       factor[count] = num[i]; 
       count++; 
      } 
     } 
    } 
    return factor; 
} 
+2

В коде содержится столько ошибок компиляции. В 'factorOfEach()', 'final' является [зарезервированное ключевое слово Java] (https://en.wikipedia.org/wiki/Final_ (Java)), поэтому вы не можете использовать его как имя переменной. вы передали параметр 'int [] num' в качестве параметра, но вы используете' list'. – Keale

+0

Если вы хотите, чтобы результат был 'int [] x = {1,5,9} factorOfEach (x) = {1,2,3}'. Вы можете использовать 'System.out.print (" int [] x = {1,5,9} \ n \ n факторыOfEach (x) = {1,2,3} ");' ... Я предполагаю вы хотите, чтобы он был более динамичным, поэтому вы, вероятно, захотите указать, что на самом деле должен делать код. – Knells

+0

Отредактировано, было переименование номера. –

ответ

1

Проблема находится в середине вашей внутренней петли. То, что вы на самом деле делаете, - каждый раз, когда вы находите фактор, вы добавляете исходный номер в конец списка.

Вместо этого вы должны просто сохранить этот счет. Когда вы найдете все факторы, просто добавьте счет один раз в конец списка.

for(int i = 0; i < num.length; i++){ // for each number in input list 
    count = 0   // haven't found any factors yet for this number 
    for(int j = 1; j <= num[i]; j++){ // for each potential factor 
     if(num[i] % j == 0){ 
      count++; // found one more factor 
     } 
    } // done with that potential factor 
    factor[i] = count; 
} // done with that number in the input list 
return factor; 
Смежные вопросы