2016-06-11 17 views
1

私は、1と正の整数nとの間の奇数の合計を計算する方法を書こうとしていますが、if文以外のものは使用しません。それは、肯定的になるまで再帰的に質問し、それを使ってnを得る方法を作成することに決めてしまうまで、うまくいっています。お互いを排除する再帰的な方法はありますか?

マイナスの数字を入力するまで、myプログラムは正しい結果を出力します。それは私が1つを入力して0を出力するまでpostiveを要求し、変数valを初期化した値を出力します。

ロジックエラーがどこにあるか分かりません。どうぞご覧ください。私はそれが何か明白だと確信していますが、私はちょうど私の知恵の終わりに達したと思います。ありがとう!

package oddsum; 
    import java.util.Scanner; 


public class Oddsum { 
     public static int oddSum(int n){ 
     int val=0; 
     if(n>1){ 

      if(n%2==0){ 
       val=n+oddSum(n-1); 

      }else{ 
       val=oddSum(n-1); 

      } 
     } 
     return val; 
     } 
     public static int request(int n){ 
      Scanner in= new Scanner(System.in); 
      System.out.println("Give me a positive integer: "); 
      n=in.nextInt(); 
       if (n<0){ 
        System.out.println("I said positive! "); 
        request(n); 
       } 
      return n; 
     } 


    public static void main(String[] args) { 

     int val=0; 
     int n=request(val); 
     System.out.println(oddSum(n)); 
    } 

} 

答えて

1

あなたはあなたの要求()メソッドからの入力パラメータを削除する必要があります。負の入力は再帰呼び出しによって実行されるためです。

public class Oddsum { 
    public static int oddSum(int n) { 
     int val = 0; 
     if (n > 1) { 

      if (n % 2 == 0) { 
       val = n + oddSum(n - 1); 

      } else { 
       val = oddSum(n - 1); 

      } 
     } 
     return val; 
    } 

    public static int request() { 
     Scanner in = new Scanner(System.in); 
     System.out.println("Give me a positive integer: "); 
     int n = in.nextInt(); 
     if (n < 0) { 
      System.out.println("I said positive! "); 
      return request(); 
     } 
     return n; 
    } 

    public static void main(String[] args) { 
     int n = request(); 
     System.out.println(oddSum(n)); 
    } 

} 

出力;私がやった

Odd sum

+1

、コードは現在、非常に良く見えますが、私の入力負の数ならば、私は正の1を入力プログラムする前に、結果はまだゼロです。私はそれが間違いだとは思わない。 –

+1

私はそれをテストし、正しい結果を得ました。あなたにコード全体を送りましょう。 – erolkaya84

+1

ハハ、そのバグを見つけました。私はif(n <0)の後に再帰的に呼び出すときにリクエスト()を返す必要がありましたが、私はしませんでした。したがって、n <0の場合には作業変数を決して得られませんでした。作業コードのためにありがとう! :) –

関連する問題