2017-02-21 6 views
4

私はちょうどjavaを開始しており、入力番号の要因を返すための簡単なプログラムを書いています。テスターと下の2つのクラスがあります。javaメソッドから特定の整数を除外するreturn

残念ながら、私の出力は、私が入力150あれば言って、なぜこれが起こっている私が知っている2、3、0、5、5

です。ローカル変数q = iのときは明らかに2,3,5,5となりますが、最初のif文の条件が満たされない場合、qは0として読み込まれます。

整数、この場合は0、出力から?私は何時間も簡単な問題でなければならないものと闘ってきました。明らかに私は何かを見ていません。

私はこのプログラムを書くための簡単な方法があり実現し、全ての方法がそのまま残っている必要があります...

public class FactorGenerator { 

    private int y; 
    private int i; 


    public FactorGenerator(int numberToFactor) 
    { 
     y = numberToFactor; 
     i = 2; 
    } 

    public boolean hasMoreFactors() 
    { 
     if (i <= y) 
     { 
      return true; 
     } 
     else 
     { 
      return false; 
     } 
    } 

    public int nextFactor() 
    { 

     int q=0; 

     if(y % i != 0) 
      i++; 

     if(y % i == 0) 
      { 
       y = y/i; 
       q = i; 
      }   
     return q; 
    } 
} 
+3

どのようにこれらのメソッドを正確に使用していますか? –

+1

特定の整数を除外する必要はありません。あなたの実装をそれを必要としないものに調整するだけです。さらに、期待される出力は何ですか?すべての要因は150ですか? 1、3、5、10、15、30、50、150? – user3437460

答えて

1

クイックフィックス。

while(y % i != 0){ 
     i++; 
} 
+0

これはwhileループとforループの違いを理解する助けになりました。それはついにクリックされました。どうもありがとう。 – user339872

1

@MicDが正解

別の方法を提案している。このよう

if(y % i != 0) 
     i++; 

:あなたはここに(明確にYを分割していないすべての要因をスキップする)whileループを必要とします:

あなたはゼロに問題があるとして、これだけチェックqはゼロ

に等しいではありません
+0

これに伴う唯一の問題は、戻り値qの範囲が制限されている場合(この場合はif文内)にコンパイラがエラーを吐き出すことです。 – user339872

関連する問題