2016-09-07 18 views
-2

私はこのプログラムを動作させるためにIf文で再帰を使用する必要があるJavaプログラミングの問題があります。私は残念ながらこれをより困難にするループを使用することはできません。If文を使用したJava再帰

この機能を使用するには、RECURSIONを使用します。 *ユーザーに低い数値と高い数値の間の数値を問い合わせて読み取ります。 *ユーザーが範囲内の数値を入力するまで、読み取りを維持します。使用再帰ここ

public static int readWithinRange(Scanner in, PrintStream out, int low, int high) 
{ 
    // notice I'm passing the Scanner and the PrintStream; do NOT read from 
    // System.in or write to System.out 

    out.println("Please enter a number."); 
    int number1=in.nextInt();  
    if (number1 <= low) { 
     return low; 
    } else if (number1 >= high) { 
     return high; 
    } else if (number1 >= low && number1 <= high){ 
     return number1; 
    } 
    return number1; 
    /*return low;*/ 
} 

は、この方法を実行するためのコードです:

public void testReadWithinRange() 
{ 
    InputStream in = new ByteArrayInputStream(" 10 20".getBytes()); 
    PrintStream out=new PrintStream(new ByteArrayOutputStream()); 

    Scanner in_s=new Scanner(in); 
    int ans=Assignment4.readWithinRange(in_s,out,15,25); 
    Assert.assertEquals(20, ans); 

    in_s=new Scanner(new ByteArrayInputStream("10 20".getBytes())); 
    ans=Assignment4.readWithinRange(in_s,out,10,20); 
    Assert.assertEquals(10, ans); 
    in_s=new Scanner(new ByteArrayInputStream("10 20 21".getBytes())); 
    Assert.assertEquals(21, Assignment4.readWithinRange(in_s,out,21,30));   
} 

@Grade(points=25) 
@Test 

すべてのヘルプは大歓迎され、ポイントが報われる!事前に感謝します

+1

再帰を使用する必要がある場合は、それを使用しないでください。 – Eran

+0

あなたの問題は何ですか? –

+0

私はJavaに慣れていないので、この問題を解決するために何をすべきかはわかりません。 – rls1982

答えて

1

あなたの質問から私はどのような再帰があるのか​​よくわからないと思っています。要約のためにhereを読んでください。このようなものに変換するでしょうあなたのケースでは

func(value) 
    if value is base case 
     return result 
    else 
     combine result with func(simpler value) 

一般的には再帰的なメソッドの形式は次のようになります

int readWithinRange(int low, int high) { 
    int guess = in.nextInt(); 
    if (guess >= low && guess <= high) 
     return guess; 
    else 
     return readWithinRange(low, high); 
} 

私はあなたの混乱もあるかもしれないことに注意しましょうこれの結果はひどい再帰を教えるための問題です。それは当然反復的であり、再帰的解は問題の良い反映ではない。特に、あなたの問題では、再帰呼び出しを完全に無意味にする再帰呼び出しが完了すると、結果を結合する必要はありません。

+0

ありがとう、私は記事を感謝します! – rls1982

関連する問題