我希望用戶輸入 3 個名稱,程式將對其進行 6 種組合。之后,再次要求用戶通過輸入基于名稱組合的數字來選擇名稱。例如,用戶輸入:name1、name2 和 name3。組合為:name1 name2、name1 name 3、name2 name1、name2 name3、name3 name1、name3 name2。并且用戶將通過輸入與組合關聯的數字來從這些組合中進行選擇。我試過這樣做,但無法真正了解如何進行組合。
import java.util.Scanner;
public class Strings1 {
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Please enter 3 names: ");
String name1 = input.nextLine();
String name2 = input.nextLine();
String name3 = input.nextLine();
String names[] = {name1, name2, name3};
System.out.println("Possible combinations are: ");
for (int i = 1; i <= 6; i ) {
System.out.println(i " - " names[0] " " names[1]);
}
}
}
uj5u.com熱心網友回復:
public static void main(String[] args) {
Scanner input = new Scanner(System.in);
System.out.println("Please enter 3 names: ");
String name1 = input.nextLine();
String name2 = input.nextLine();
String name3 = input.nextLine();
String names[] = {name1, name2, name3};
permutationRecursive(names.length, names, ' ');
System.out.println("Possible combinations are: " combincations.toString());
}
private static ArrayList<String> combincations = new ArrayList<>();
public static void permutationRecursive(int n, String[] elements, char delimiter) {
if (n == 1) {
String combinationString = printArray(elements, delimiter);
combincations.add(combinationString);
} else {
for (int i = 0; i < n - 1; i ) {
permutationRecursive(n - 1, elements, delimiter);
if (n % 2 == 0) {
swap(elements, i, n - 1);
} else {
swap(elements, 0, n - 1);
}
}
permutationRecursive(n - 1, elements, delimiter);
}
}
private static void swap(String[] input, int a, int b) {
String tmp = input[a];
input[a] = input[b];
input[b] = tmp;
}
private static String printArray(String [] input, char delimiter) {
StringBuilder strBuilder = new StringBuilder();
for (int i = 0; i < input.length; i ) {
strBuilder.append(input[i]);
strBuilder.append(delimiter);
}
return strBuilder.toString().substring(0, strBuilder.length()-1);
}
uj5u.com熱心網友回復:
也許你需要一個嵌套回圈:
int idx = 1;
for (int i = 0; i < 3; i ) {
for (int j = 0; j < 3; j ) {
if (i == j) {
continue;
}
System.out.println((idx ) " - " names[i] " " names[j]);
}
}
或者,更一般的:
public static void main(String[] args) {
String[] names = new String[] {"a", "b", "c"};
List<String[]> combinations = combinations(names);
System.out.println("Possible combinations are: ");
for (int i = 0; i < combinations.size(); i ) {
System.out.println((i 1) "-" combinations.get(i)[0] " " combinations.get(i)[1]);
}
}
public static List<String[]> combinations(String[] names) {
List<String[]> result = new ArrayList<>();
for (int i = 0; i < names.length; i ) {
for (int j = 0; j < names.length; j ) {
if (i == j) {
continue;
}
result.add(new String[] {names[i], names[j]});
}
}
return result;
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/381632.html
下一篇:使用in連接陳述句的速度相加
