有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java调用的方法输出不同于调用方

这个程序检查输入阵列的每个组合并打印它-

检查程序。java-

package testpj;

import java.util.ArrayList;

public class Checker {
public static void main(String[] args) {
    String[] subarrayA = {"A0","A1","A2"};

    String[] subarrayB = {"B0","B1"};
    String[] subarrayC = {"C0","C1","C2","C3"};
    String[][] inputArray = {subarrayA, subarrayB, subarrayC};
    ArrayList<String> output = new ArrayList<String>();
    String output1 = permute(inputArray, 0, output);
    System.out.println("the output1: "+output1);
}

public static String permute(String array[][], int index, ArrayList<String> output){

    if(index == array.length){
        System.out.println(output.toString());
    }
    else{
        for(int i=0 ; i<array[index].length ; i++){
            output.add(array[index][i]);
            permute(array,index+1,output);
            output.remove(output.size() - 1); 
        }
    }
    return output.toString();
}
}

输出:

[A0, B0, C0]
[A0, B0, C1]
[A0, B0, C2]
[A0, B0, C3]
[A0, B1, C0]
[A0, B1, C1]
[A0, B1, C2]
[A0, B1, C3]
[A1, B0, C0]
[A1, B0, C1]
[A1, B0, C2]
[A1, B0, C3]
[A1, B1, C0]
[A1, B1, C1]
[A1, B1, C2]
[A1, B1, C3]
[A2, B0, C0]
[A2, B0, C1]
[A2, B0, C2]
[A2, B0, C3]
[A2, B1, C0]
[A2, B1, C1]
[A2, B1, C2]
[A2, B1, C3]
the output1: []

为什么output1不包含任何元素


共 (2) 个答案

  1. # 1 楼答案

    在每一轮中,向output添加一些内容,调用递归步骤,然后删除最后一项

    这意味着,如果您在output中以零项开始,那么您将以零长度ArrayList结束

    递归调用本身的打印在删除项之前完成。但是最后的打印是这个空的ArrayList。这就是输出不同的原因

  2. # 2 楼答案

    正确的答案是,当我递归调用permute时,它会再次重新初始化输出的值,因此输出变量中没有值。我在permute方法中添加了一个变量,并将输出添加到该方法中,而不是将输出添加到输出本身中,结果成功了

    解决方案:

     public ArrayList<String> permute(String array[][], 
     int index, ArrayList<String> output, ArrayList<String> comb){
            if(index == array.length){
                comb.add(output.toString());            
            }
            else{
                for(int i=0 ; i<array[index].length ; i++){
                    output.add(array[index][i]);
                    permute(array,index+1,output, comb);
                    output.remove(output.size() - 1); 
                }
            }
    
            return comb;
        }