转载一个String数组Java

Reprint a String array Java

我有一个字符串数组

 "Ben", "Jim", "Ken"

如何将上面的数组打印 3 次,如下所示:

 "Ben", "Jim", "Ken"
 "Jim", "Ben", "Ken"
 "Ken", "Jim", "Ben"

我只希望初始数组中的每一项都显示为第一个元素。其他项目出现的顺序无关紧要。

更多示例

输入

"a","b","c","d"

输出

"a","b","c","d"
"b","a","c","d"
"c","b","a","d"
"d","a","c","d"

方法签名

 public void printArray(String[] s){
 }
public void printArray(String[] s){
    for (int i = 0; i < s.length; i++) {
        System.out.print("\"" + s[i] + "\",");
        for (int j = 0; j < s.length; j++) {
            if (j != i) {
                System.out.print("\"" + s[j] + "\",");
            }
        }
        System.out.println();
    }
}
    for(int i=0;i<s.length;i++){
        for(int j=i;j<s.length+i;j++) {
            System.out.print(s[j%(s.length)]);
        }
        System.out.println();
    }

使用mod适合这个问题。你的第一个例子的打印值的索引是这样的;

0 1 2

1 2 0

2 0 1

所以如果你像下面这样写它们并取 mod 数组的长度(在本例中为 3),你将得到解决方案。

0 1 2

1 2 3

2 3 4

这听起来像是一道家庭作业题,所以虽然我觉得我不应该回答它,但我会给出一个简单的提示。您正在寻找一种算法,该算法将给出元素 "for loop index" 的所有排列(组合)而不是元素本身。所以如果你有三个元素 a、b、c,它们的索引是 0、1、2,我们所需要的只是一种生成 0、1、2 排列的方法,所以这会导致一个常见的数学问题,数学公式非常简单.

看这里:https://cbpowell.wordpress.com/2009/11/14/permutations-vs-combinations-how-to-calculate-arrangements/

我不会直接给你代码,而是会尝试解释这个问题的 theory/mathematics。

我能想到的解决这个问题的两种最简单的方法是

  • 循环遍历所有元素
  • 选择一个元素并列出其余元素

第一种方法要求您遍历索引,然后遍历数组中的所有元素,并在必要时循环回到开头,在 return 到原始元素时终止。

第二种方法需要您遍历索引,打印原始元素,然后从头开始遍历数组,跳过原始元素。

如您所见,这两种方法都需要两次循环(因为您要遍历数组两次)

在伪代码中,第一种方法可以写成:

for (i = array_start; i < array_end; i++) {
    print array_element[i]
    for (j = i + 1; j != i; j++) {
        if (j is_larger_than array_end) {
            set j equal to array_start
        }
        print array_element[j]
    }
}

在伪代码中,第二种方法可以写成:

for (i = array_start; i < array_end; i++) {
    print array_element[i]
    for (j = array_start; j < array_end; j++) {
        if (j is_not_equal_to i) {
            print array_element[j]
        }
    }
}