java - 使用递归函数 printArray() 显示数组的所有元素
问题描述
这是我面向对象的 Java 编程课的作业:
编写一个名为 printArray() 的递归函数,它显示整数数组中的所有元素,用空格分隔。数组的大小必须为 100 个元素,并使用 for 循环和随机数生成器填充。其伪代码如下:
//Pseudo-code for main
//Instantiate an integer array of size 100
//fill the array
For (int i=0; i<array.length; i++)
Array[i] = random number between 1 and 100 inclusive
printArray(integer array); //You are not restricted to a single parameter – use as many as you need
//Pseudo-code for printArray()
//Base Case
If the array is empty return
//Recursive Case
Else print the next value in the array and then call printArray() to print the next value
这是我遇到麻烦的地方
我可以打印所有整数,它们之间有一个空格,就像我应该做的那样,但我不知道如何调用 printArray 来打印它,这就是我应该显示数组的方式。
到目前为止,这是我的代码:
import java.util.*;
public class ArrayPrinter {
public static void main(String [] args){
int Array[] = new int [100];//initialize array
Random RandomNumber = new Random();
System.out.println("Random int array: ");
for(int i = 0; i<100; i++){//fill the array
Array[i] = RandomNumber.nextInt(100 - 1)+ 1;
System.out.print(Array[i] + " ");//this properly prints out 100 random
//numbers between 1 and 100
}
System.out.println();
System.out.println("All array elements: ");
printArray(Array);//but this does nothing. There are no error notifications,
//it's just nothing happens at all.
}
public static void printArray(int [] Array){
if (Array.length > 0) {
int m = Array.length - 100;
return;//according to the psuedocode I need a return
}
else{//and I need to have an if....else
System.out.print(Array + " ");
printArray(Array);
}
}
}
我的问题:
如何调用 printArray 方法打印出所有数组元素?
解决方案
让我们定义我们的递归函数:我将使用两个参数:arr
要打印的数组和要打印的数组中i
当前元素的索引:
public static void printArray(int[] arr, int i);
我们可以将此方法设为私有并为此方法定义一个公共重载,只接受要打印的数组并将索引参数定义为 0,因为我们要打印整个数组,因此从第一个索引开始:
private static void printArray(int[] arr, int i);
public static void printArray(int[] arr) {
printArray(arr, 0);
}
请参阅文档中的重载方法部分。
递归函数需要
- 停止条件 - 在这种情况下,如果当前元素等于数组长度。由于数组没有与其长度相等的索引,因此在这种情况下我们什么也不做:
private static void printArray(int[] arr, int i) {
if (i == arr.length) return;
}
- 调用自身 - 在这种情况下,打印下一个元素。我们可以通过传递下一个索引来做到这一点:
private static void printArray(int[] arr, int i) {
if (i == arr.length) return;
printArray(arr, i+1);
}
我们还需要对当前元素进行一些逻辑处理(即显示它):
private static void printArray(int[] arr, int i) {
if (i == arr.length) return;
System.out.println(arr[i]);
printArray(arr, i+1);
}
示例代码:
class Solutin {
private static void printArray(int[] arr, int i) {
if (i == arr.length) return;
System.out.println(arr[i]);
printArray(arr, i+1);
}
public static void printArray(int[] arr) {
printArray(arr, 0);
}
public static void main(String[] args) {
printArray(new int[]{}); // Empty array, outputs nothing
printArray(new int[]{1}); // Singleton array, outputs 1
printArray(new int[]{1, 2}); // Array with 2 elements, outputs 1, 2
printArray(new int[]{3, 1, 4, 1, 5}); // Array with 3+ elements, outputs 3, 1, 4, 1, 5
}
}
推荐阅读
- makefile - Swoole 制作失败 ubuntu16.04
- laravel - 如何从类对象中获取 db 字段
- google-maps - 如何在 xamarin 表单谷歌地图中创建自定义信息窗口
- javascript - javascript试图将选择框中的数据库生成文本复制到文本框
- python - 安装 Raspberry OpenCV 时出错
- c++ - 为什么在我使用 dynamic_cast 时会发生此错误?
- psql - 无法将单元格添加到表格内容:超过 837114417 的单元格总数
- android - Illegalstateexception Fragment 必须是公共静态类才能从实例状态正确重新创建
- python - python中i和j之间的字符串匹配?
- java - Spring MVC - 客户端发送的请求在语法上不正确