-1

数値入力に基づく配列を実行しています。再帰を使用して、配列の最小数を見つけます。ユーザーが 0 を入力すると、プログラムは終了します。0 2 3 5 3 と入力すると、負の数を処理するまで問題なく動作します。戻り値は正しく返され、最小の数値は 0 になります。しかし、2 9 92 2 -1 0 と入力すると、プログラムは終了しません。 0 したがって、最小値として -1 は表示されません。提案やヘルプ。

 import java.io.*;
 import java.text.*;
 public class Assignment9
 {

public static void main (String args[]) throws IOException
{
        int i = 0;
    double[] NumArray;
        NumArray = new double[100];
        // input stream reader reads in keyboard inputs, while buffered reader
                        // reads in the line as a string15. 
        InputStreamReader inRead = new InputStreamReader(System.in);   
        BufferedReader buffRead = new BufferedReader(inRead);
        String line = buffRead.readLine();

        // if the string is equal to 0 and is false AND i is less than22.  
        // 100, parse string into double.23.   
        try
        {    
            while (line.equals("0") == false && i<100)      
            {       
                i++;        
                line = buffRead.readLine();     
            NumArray[i]=Double.parseDouble(line);       
            }      
            }    

        catch(IOException e) 
        {       
            System.out.println("Array index out of bound");   
            }   

double min =  findMin(NumArray, 0, NumArray.length - 1);
          System.out.print ("The minimum number is " + min + ('\n'));
         public static double findMin(double[] NumArray, int startIndex, int endIndex)
     {  
if (startIndex == endIndex) 
      { 
return NumArray[startIndex];    
       }
    else if(findMin(NumArray, startIndex, endIndex - 1) < NumArray[endIndex]) 
      { 
    return findMin(NumArray, startIndex, endIndex -1 ); 
      } 
else    
{       
    return NumArray[endIndex];
    }
            }
4

2 に答える 2

0

いくつかの問題があります。

まず、配列に入力した最初の数値を保存していません。でない限り保管して0ください。

while第 2に、ユーザーが を入力したときにループから抜け出したとしても、0既に0配列に入っています。0ユーザーが入力プロセスを終了するためだけのものである場合は、入力しないでください。

最後に、基本ケースではないときに2 回呼び出しfindMinています。配列には 100 個の要素があるため、何度でも呼び出すことができます。findMin findMin2^100

再帰呼び出しの結果を保存して、再帰ごとに 1 回だけ呼び出すようにします。変化する

if (startIndex == endIndex) 
      { 
return NumArray[startIndex];    
       }
else if(findMin(NumArray, startIndex, endIndex - 1) < NumArray[endIndex]) 
      { 
    return findMin(NumArray, startIndex, endIndex -1 ); 
      } 

double min;
if (startIndex == endIndex)
{
     return NumArray[startIndex];

else if((min = findMin(NumArray, startIndex, endIndex - 1)) < NumArray[endIndex])
{
    return min;
}
于 2013-11-07T19:44:54.307 に答える