将两个数组 排列组合到一个数组集合 求java 代码

输入 数组1{a,b,c} 数组2{x,y,z}输出List数组 {a,b,c} 去掉 C3/3 C0/3 排列组合 {a} {b} {c} {a,b} {a,c} {b,c}{x,y,z} 去掉 C3/3 C0/3 排列组合 {x} {y} {z} {x,y} {x,z} {y,z}现在要求当 数组1{a,b,c} 取a 的时候 从数组二中取{y,z} 组合成 {a,y,z} 现在要求当 数组1{a,b,c} 取b 的时候 从数组二中取{x,z} 组合成 {x,b,z} 现在要求当 数组1{a,b,c} 取c 的时候 从数组二中取{x,z} 组合成 {x,y,c} 依次类推现在要求当 数组1{a,b,c} 取{a,b} 的时候 从数组二中取{z} 组合成 {a,b,z}.....输出的List List数组就是组合的数组.( 从数组1从取数据填充到新的数组对应的位子,其他位置由对应的数组2中取.)

第1个回答  推荐于2017-09-24
import java.util.ArrayList;
import java.util.List;
import java.util.Scanner;

public class Test {

private String[] arr1;
private String[] arr2;

public Test(){
//数组长度可以随意改,但必须保证两个数组长度一样
arr1 = new String[3];
arr2 = new String[3];
initArray();
}

private void initArray(){
Scanner scanner = new Scanner(System.in);
for(int i=0;i<arr1.length;i++){
arr1[i] = scanner.next();
}
for(int i=0;i<arr2.length;i++){
arr2[i] = scanner.next();
}
}
/**
* 获取组合后的数组表单
* @return
*/
private List<String[]> getcombineList(){
List<String[]> list = new ArrayList<String[]>();
combineArray(list, arr1, arr2);
combineArray(list, arr2, arr1);
return list;
}
/**
* 遍历数组str1,并将其复制到新的数组,再将str2中索引值与str1中索引值
* 相同的元素放入新的数组,然后将新的数组放入list中
* @param list
* @param str1
* @param str2
*/
private void combineArray(List<String[]> list,String[] str1, String[] str2){
for(int i=0; i<str1.length; i++){
String[] str = new String[str1.length];
for(int j=0; j<str2.length; j++){
str[j] = str2[j];
if(i == j)
str[j] = str1[j];
}
System.out.println(getArrayMessage(str));
list.add(str);
}
}

/**
* 将数组每一个元素组合成字符串
* @param str 字符串数组
* @return 组合字符串
*/
private String getArrayMessage(String[] str){
StringBuffer buffer = new StringBuffer();
for(int i=0; i<str.length; i++){
if(i == str.length-1)
buffer.append(str[i]);
else
buffer.append(str[i]).append(",");
}
return buffer.toString();
}

public static void main(String[] argv){
Test test = new Test();
test.getcombineList();
}
}本回答被提问者和网友采纳
第2个回答  2013-06-27
先问一下,list应该录入值应该录入一个吧,最后取a的时候,用什么方法取,有什么条件,你这有点笼统了.取得时候是按照下标取,还是按照里面的元素判断,如果这个弄清楚这个就出来了,而且最后录入的时候list怎么可以接收两个又可以接收三个呢?除非用的是数字,把所有元素相加,录入list,这个分析出来就这样,不难,就是有点绕,如果你不会的话,把前面的条件和元素类型告诉我,我给你弄出来
第3个回答  2013-06-26
请问楼主,这两个数组固定的还是用户输入的数组?追问

由用户输入的

追答

还是不明白楼主的意思,输出list组合,
=======================================
在要求当 数组1{a,b,c} 取a 的时候 从数组二中取{y,z} 组合成 {a,y,z}
现在要求当 数组1{a,b,c} 取b 的时候 从数组二中取{x,z} 组合成 {x,b,z}
现在要求当 数组1{a,b,c} 取c 的时候 从数组二中取{x,z} 组合成 {x,y,c}

依次类推
现在要求当 数组1{a,b,c} 取{a,b} 的时候 从数组二中取{z} 组合成 {a,b,z}
.....
=====================================
是将所有的情况输出来:
{a,b,c,d} {1,2,3,4}
:{a,2,3}{1,b,3}{1,2,c}{a1,2,3,d}
{a,b,3}{a,2,c}{1,b,c}....
{a,b,c,1}....

等等所有的情况输出来,还是:根据用户的要求取两个,三个,加入另个数组啊,等下写写。。。。

将两个数组 排列组合到一个数组集合 求java 代码
import java.util.Scanner;public class Test { private String[] arr1;private String[] arr2;public Test(){ \/\/数组长度可以随意改,但必须保证两个数组长度一样 arr1 = new String[3];arr2 = new String[3];initArray();} private void initArray(){ Scanner scanner = new Scanner(Syste...

求java实现String list[] = { "1", "2", "3" }; 的排列组合代码
for(int b=0;b<=list.length-a;b++){ \/\/这一层循环是迭代输出括号里的开头数 for(int c=b+1;c<=list.length-a+1;c++){\/\/这一层循环是第二个数 StringBuilder sb=new StringBuilder("[");sb.append(list[b]);sb.append(","+list[c]);for(int d=1;d...

java算法问题 排列组合 给定一组字符串,产生所有可能的集合
import java.util.List;public class Combinations { \/ 设有n个元素,组合数量有2的n次方种。对 0 到 2的n次方-1 中的每个数,考察其二进制位形式,位数为1代表相应元素加入 到组合,0则不加入该元素至组合。取组合方法 参数: list --- 原始数组 返回: 包含所有组合数组的数组 \/ public st...

js两个数组排列组合
js两个数组排列组合 var a = ["A","B","C"]; var b = ["1", "2","3"]; window.onload = function () { var a1 = new objPL(a);\/\/计算数组a的排列组合 var b1 = new objPL(b);\/\/计算数组b的排列组合 var str = ""; var n = 0; ...

C#语言,有两个数组,数组1中元素有1,2,3.数组2中元素有A,B,C,D。求...
这个问题可以选择用插入法群举,按照你的要求 两个数组升序排列组合,可以这么写,帮你写到一个方法里面,如下,不明白的问我好了 private void pl(){ char[] c1 = new char[] { 'a', 'b', 'c', 'd' };char[] c2 = new char[] { '1', '2', '3' };char[] cc = new char...

求一个数组元素的所有排列组合
\/\/array为要组合的数组 size为长度 firstIndex为要放在所以组合最前面的元素 result保存所有组合 每一行为一个组合 public int func(int[] array int[][] result){ \/\/所有递归的结果都保存在result中 并且最低层的组合结果保存在最后列 \/\/返回本次递归组合的个数 int size = ls;if(size== )\/...

java打印出一组数字的所有排列。
下面是个排列组合生成的算法,我电脑上正好有,NetBeans测试通过,你要1到6的数字组合,运行时就输入6。有比较详细的注释,你可以参考一下。package permutationandcombination;import java.io.BufferedReader;import java.io.InputStreamReader;import java.util.*;public class PermutationAndCombination { \/...

java 排列组合的01转换法的原理是啥啊
即C(n-1,m)当第n位为1了,然后前面(n-1)位中包括m-1个1,把这m-1个数字从最左边移动到和第n位邻接。这个子问题是C(n-1,m-1)这2步之后的状态就是将m个1移动到长n的序列的右端的状态。即C(n, m) = C(n - 1, m) + C(n-1, m-1).这个就是组合数的地推公式 ...

java排列组合问题,设计一段程序将3,5,5,8,9这几个数所有可能的随机排列...
public static void main(String[] args) { TreeSet<String> ts = new TreeSet<String>();Pattern p = Pattern.compile("\\\\d*55\\\\d*");for(int j = 35589;j<=98553;j++) { String str = String.valueOf(j);char[] ch = str.toCharArray();Arrays.sort(ch);if(String.valueOf(ch...

一个排列组合的算法 求解
dfs算法。下面是伪代码 ans[0..list.count]这是存结果的数组 dfs(int index)\/\/index是当前set对象在list集合中的序号 { if ( index=list.count ) output;\/\/此时完成枚举,输出ans中的对象。foreach(object i in list[index]){ ans[index]=i;dfs(index+1);} } 主程序中调用dfs(0)即可。

相似回答