【问题标题】:How can I get all the permutations from a scanner input to array?如何从扫描仪输入到数组中获取所有排列?
【发布时间】:2019-02-14 11:31:15
【问题描述】:

我正在尝试查找来自扫描仪的密码的所有排列。到目前为止,我已经得到了这一点,我猜它设置了一个带有自定义数字的数组。我怎样才能让这个代码向我展示所有可能的选项?请记住,我是 Java 新手,所以简单的解释是最好的。谢谢

import java.util.Arrays;
import java.util.Scanner;

public class Methods {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        int[] arr = new int[3];

        Scanner sc = new Scanner(System.in);
        System.out.println("Please enter first digit: ");
        arr[0] = sc.nextInt();
        System.out.println("Please enter second digit: ");
        arr[1] = sc.nextInt();
        System.out.println("Please enter third digit: ");
        arr[2] = sc.nextInt();
        System.out.println("Please enter fourth digit: ");
        arr[3] = sc.nextInt();

        System.out.println(Arrays.toString(arr));
        }
    }

【问题讨论】:

  • 让你的数组变大。您需要四个元素来存储四个数字。你有没有尝试过任何改变?到目前为止,我只看到了读取输入的代码。
  • 我没有,因为我不知道从哪里开始。我曾尝试阅读其他人的帖子,但这毫无意义。我现在已经改变了数组
  • 尝试双索引。生成所有可能排列为 (0,1,2,3) 的数组“perm”。然后使用索引 perm[0]、perm[1]、perm[2]、perm[3] 访问它,而不是打印/读取索引为 0、1、2、3 的输入数组。只要所有四个输入数字都是唯一的,您将获得所有排列而没有重复。如果某些输入数字相同,那么您将有重复。

标签: java arrays sorting java.util.scanner permutation


【解决方案1】:

您可以使用以下代码创建一个长度为 n 的数组并计算排列:

public static void main(String[] args) {

  Scanner sc = new Scanner(System.in);
  System.out.print("please enter the length of you array: "); // 4 if you want a 4 digit pincode
  int length = sc.nextInt();

  int[] arr = new int[length];

  for (int i = 0; i < length; i++) {
    System.out.printf("Please enter a value for digit #%s: ", i);
    arr[i] = sc.nextInt();
  }

  StringBuilder bldr = new StringBuilder();
  Arrays.stream(arr).forEach(bldr::append);
  permutation(bldr.toString());
}

public static void permutation(String str) {
    permutation("", str);
}

private static void permutation(String prefix, String str) {
  int n = str.length();
  if (n == 0)
    System.out.println(prefix);
  else {
    for (int i = 0; i < n; i++)
      permutation(prefix + str.charAt(i), str.substring(0, i) + str.substring(i + 1, n));
  }
}

还可以查看this question 了解有关排列的更多信息。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-12-06
    • 1970-01-01
    • 1970-01-01
    • 2015-03-25
    • 1970-01-01
    • 2015-05-02
    • 1970-01-01
    相关资源
    最近更新 更多