使用递归查找最小值

时间:2012-03-29 22:57:56

标签: java

好的,所以我需要继续获取用户输入,直到他们输入0.我需要将它们存储在一个数组中并打印出最小值。但它继续给我最后输入的数字而不是排序并获得列表中的最小值。这是我到目前为止所做的。

import java.io.*;
import java.util.*;

public class FindingMin
{

    public static void main(String[] args) throws IOException
    {
        int[] Numbers = new int[100]; 
        int minimum = 0;
        int InputParser;
        String input= "1";


        try
        {
            InputStreamReader stream = new InputStreamReader (System.in);
            BufferedReader scan = new BufferedReader(stream);

            InputParser = Integer.parseInt(input);

            while(InputParser != 0)
            {
                input = scan.readLine();
                InputParser = Integer.parseInt(input);
                for(int i = 0;i<Numbers.length;i++)
                {
                    if(InputParser == 0)
                    {
                        InputParser = 0;
                    }
                    else
                    Numbers[i] = InputParser;

                }

            }

            minimum = findingMin(Numbers,Numbers[0],Numbers.length-1);
            System.out.println("The minimum number is "+minimum);


        }
        catch(NumberFormatException exception)
        {
            System.out.println("Please enter integers only");
        }

    }

    public static int findingMin(int[] list, int start, int end)
    {
           if (start == end) 
               return list[start];
           else
          {
             int Min = findingMin(list, start, end-1);
             if (Min < list[end])
                return list[end];
             else
                return Min;
           }


    }
}

任何建议都将不胜感激!

1 个答案:

答案 0 :(得分:2)

那是因为你有一个额外的循环:

while(InputParser != 0)
{
        input = scan.readLine();
        InputParser = Integer.parseInt(input);
        for(int i = 0;i<Numbers.length;i++)
        {
            if(InputParser == 0)
            {
                InputParser = 0;
            }
            else
                Numbers[i] = InputParser; // <-- you set all numbers
                                          //     to the last input here

        }

}

正确的版本是:

int i = 0;
while(InputParser != 0)
{
        input = scan.readLine();
        InputParser = Integer.parseInt(input);
        if(InputParser == 0)
        {
            InputParser = 0;
        }
        else
        {
            Numbers[i] = InputParser;
            i++;
        }
}

此外,调用方法应为:

minimum = findingMin(Numbers,0,Numbers.length-1);

不是

minimum = findingMin(Numbers,Numbers[0],Numbers.length-1);