以下程序是一个递归程序,用于查找数组的最大值和最小值。(我想!请告诉我它是否不是一个有效的递归程序。虽然有更简单的方法可以找到数组的最大值和最小值,我只是作为练习的一部分以递归方式进行!)
此程序正常工作并按预期生成输出。
在我标记为“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;
}
}
答案 0 :(得分:3)
返回类型显然是一个整数数组(在方法定义中指定),但我没有将返回的数据分配给任何整数数组,但程序仍然有效。
是的,因为忽略方法的返回值并不是一个错误。不就编译器而言。它可能代表一个错误,但它完全有效使用该语言。
例如:
Console.ReadLine(); // User input ignored!
"text".Substring(10); // Result ignored!
有时我希望可以用作警告 - 事实上,当Resharper可以检测到“纯”方法(没有任何副作用的方法)而不使用返回值时会发出警告。特别是,在现实生活中引起问题的呼叫:
string
上的方法,例如Replace
和Substring
,用户认为调用该方法会改变现有字符串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 ++中),丢弃函数的返回值是完全合法的。编译器没有义务提供任何诊断。