2016-10-02 23 views
0

数字が正しくスキャンされていますが、方法が正しく機能していません。最初のものは何もせず、2番目のものは無限ループに入ります。メソッドが正しく動作しないのはなぜですか?

呼び出されたメソッドが正しく機能していません。私は何をすべきか分かりません。

import java.util.Scanner; 
public class testSequence { 

public static void main(String[] args) { 
    Scanner scan = new Scanner(System.in); 
    System.out.println("Enter a number: "); 
    int enterNumber = scan.nextInt(); 
    System.out.println("1 for Iteration, 2 for Recursion: "); 
    int type = scan.nextInt(); 

    if (type == 1){ 
     computeIteration(enterNumber); 
    } else if (type == 2){ 
     computeRecursion(enterNumber); 
    } 
} 


public static int computeIteration(int enterNumber) { 
    int answer; 
    int multiplier = 1; 
    int count = 0; 
    int addend = 0; 
    if (enterNumber == 0) { 
     count++; 
     return enterNumber; 
    } else if (enterNumber == 1) { 
     count++; 
     return enterNumber; 
    } else { 

     for (int i = 0; i <= enterNumber; i++) {//need to adjust "i" for counter correction 

      enterNumber = (multiplier * 2) + addend; 
      addend = multiplier; 
      multiplier = enterNumber; 
      count += 1; 
     }//end for loop 
     answer = enterNumber; 
    }//end else 
    return answer; 
}//end computeIteration 

public static int computeRecursion(int n) { 
    int count = 0; 
    if (n == 0) { 
     count++; 
     return 0; 
    } else if (n == 1) { 
     count++; 
     return 1; 
    } else { 
     count++; 
     return computeRecursion(2 * (n - 1)) + computeRecursion(n - 2); 
    } 

}//end computerRecursion() 

}//end Sequence() 
+0

私はあなたが 'computeIteration'を呼び出しているのを見ましたが、あなたは結果を何もしません。それは問題の一部になるかもしれませんか? – ajb

+0

あなたは両方の方法でいくつかの場所で "カウント"を増やしていますが、あなたはそれを使用しません。 – Murillio4

+0

Murillio4私はそれを知っています、ありがとう。私は、なぜこの方法が正しく機能していないのか、さらに懸念しています。 @ajbそれは返事を返すと思われますが、答えは全く表示されません。 – platypus87

答えて

0

答えは決して印刷されません。

if (type == 1){ 
     computeIteration(enterNumber); 
    } else if (type == 2){ 
     computeRecursion(enterNumber); 
    } 

関数をどのように呼び出すのかは分かりますが、結果は決して何もしません。

おそらく意味:

if (type == 1){ 
    System.out.println(computeIteration(enterNumber)); 
    } else if (type == 2){ 
    System.out.println(computeRecursion(enterNumber)); 
    } 

それとも、あなたは空想を取得したい場合:あなたが尋ねたので、

UnaryOperator<Integer> f = 
    type == 1 ? 
     computeIteration 
     : computeRecursion; 

System.out.println(f.apply(enterNumber)) ; 

ちょうど追加します。私は2つのものの中から選択する必要があるので、私は三項演算子を使用しています。このような場合は、完全なifの文よりも綺麗です。

UnaryOperatorは、機能インターフェイスです。基本的に、それらを使って、関数を変数の中に保存することができます。これは、このような場合に、シグネチャが同じ(関数の両方がintをとり、intを返す)2つの関数の中から選択し、その結果を使用する場合に便利です。

私は関数をfに保存してから、f.apply(9)applyは関数に引数を「適用」して呼び出します)と書いて呼び出します。

機能的なインターフェイスは、コードをあまり明確にすることができないので、キックのためだけに使用しないでください。しかし、正しく使用すると、コードがよりシンプルになります。特に匿名関数とペアになっている場合

+0

それは私が間違っていたことです。助けてくれてありがとう!! – platypus87

+0

実際に行っているボトムは何ですか?それは私がこれまで見たことがないよりずっと進んでいるようです(これはあまりありません)。それは私が第三次演算子として "C"から知っているものに似ています。 – platypus87

+0

@ platypus87 Ya、三元演算子は単なる三項演算子です。同じように動作します。私は、残りが何をしているのかを簡単に説明します。 – Carcigenicate

関連する問題