为什么不是错误?

时间:2014-02-09 15:34:12

标签: java arrays recursion

以下程序是一个递归程序,用于查找数组的最大值和最小值。(我想!请告诉我它是否不是一个有效的递归程序。虽然有更简单的方法可以找到数组的最大值和最小值,我只是作为练习的一部分以递归方式进行!)

此程序正常工作并按预期生成输出。

在我标记为“Doubt here!”的注释行中,我无法理解为什么在编译期间没有给出错误。返回类型显然是一个整数数组(在方法定义中指定),但我没有将返回的数据分配给任何整数数组,但程序仍然有效。如果我这样做的话,我在编译期间会遇到错误,但它确实有效。如果有人帮我解决这个问题,那会很有帮助! :)

import java.io.*;
class MaxMin_Recursive
{
    static int i=0,max=-999,min=999;
    public static void main(String[] args) throws IOException
    {
        BufferedReader B = new BufferedReader(new InputStreamReader(System.in));
        int[] inp = new int[6];
        System.out.println("Enter a maximum of 6 numbers..");
        for(int i=0;i<6;i++)
            inp[i] = Integer.parseInt(B.readLine());
        int[] numbers_displayed = new int[2];
        numbers_displayed = RecursiveMinMax(inp);
        System.out.println("The maximum of all numbers is "+numbers_displayed[0]);
        System.out.println("The minimum of all numbers is "+numbers_displayed[1]);
    }
    static int[] RecursiveMinMax(int[] inp_arr)     //remember to specify that the return type is an integer array 
    {   
        int[] retArray = new int[2];
        if(i<inp_arr.length)
            {
                if(max<inp_arr[i])
                    max = inp_arr[i];
                if(min>inp_arr[i])
                    min = inp_arr[i];
                i++;
                RecursiveMinMax(inp_arr);       //Doubt here!
            }
        retArray[0] = max;
        retArray[1] = min;
        return retArray;
    }
}

2 个答案:

答案 0 :(得分:3)

  

返回类型显然是一个整数数组(在方法定义中指定),但我没有将返回的数据分配给任何整数数组,但程序仍然有效。

是的,因为忽略方法的返回值并不是一个错误。不就编译器而言。它可能代表一个错误,但它完全有效使用该语言。

例如:

Console.ReadLine(); // User input ignored!
"text".Substring(10); // Result ignored!

有时我希望可以用作警告 - 事实上,当Resharper可以检测到“纯”方法(没有任何副作用的方法)而不使用返回值时会发出警告。特别是,在现实生活中引起问题的呼叫:

  • string上的方法,例如ReplaceSubstring,用户认为调用该方法会改变现有字符串
  • Stream.Read,用户认为所有他们所请求的数据已被读取,实际上他们应该使用返回值来查看实际< / em>已阅读

次,忽略方法的返回值是完全合适的,即使它通常不适用于该方法。例如:

TValue GetValueOrDefault<TKey, TValue>(Dictionary<TKey, TValue> dictionary, TKey key)
{
    TValue value;
    dictionary.TryGetValue(key, out value);
    return value;
}

通常当您致电TryGetValue时,您想知道是否找到了密钥 - 但在这种情况下,value甚至会设置为default(TValue)如果找不到钥匙,那么无论如何我们都会返回相同的东西。

答案 1 :(得分:1)

在Java中(如在C和C ++中),丢弃函数的返回值是完全合法的。编译器没有义务提供任何诊断。