首页 > 解决方案 > 使用递归函数 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 方法打印出所有数组元素?

标签: javaoop

解决方案


让我们定义我们的递归函数:我将使用两个参数: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);
}

请参阅文档中的重载方法部分。


递归函数需要

  1. 停止条件 - 在这种情况下,如果当前元素等于数组长度。由于数组没有与其长度相等的索引,因此在这种情况下我们什么也不做:
private static void printArray(int[] arr, int i) {
    if (i == arr.length) return;
}
  1. 调用自身 - 在这种情况下,打印下一个元素。我们可以通过传递下一个索引来做到这一点:
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
    }
}

推荐阅读