簡體   English   中英

使用遞歸查找最小值

[英]Finding minimum using recursion

好的,所以我需要繼續獲取用戶輸入,直到它們輸入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;
           }


    }
}

任何建議將不勝感激!

那是因為你有一個額外的循環:

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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM