将两个数组 排列组合到一个数组集合 求java 代码
输入数组1{a,b,c}数组2{x,y,z}输出List数组{a,b,c}去掉C3/3C0/3排列组合{a}{b}{c}{a,b}{a,c}{b,c}{x,y,z}去掉C...
输入 数组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中取.)
展开
3个回答
展开全部
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();
}
}
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();
}
}
本回答被提问者和网友采纳
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
先问一下,list应该录入值应该录入一个吧,最后取a的时候,用什么方法取,有什么条件,你这有点笼统了.取得时候是按照下标取,还是按照里面的元素判断,如果这个弄清楚这个就出来了,而且最后录入的时候list怎么可以接收两个又可以接收三个呢?除非用的是数字,把所有元素相加,录入list,这个分析出来就这样,不难,就是有点绕,如果你不会的话,把前面的条件和元素类型告诉我,我给你弄出来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
请问楼主,这两个数组固定的还是用户输入的数组?
追问
由用户输入的
追答
还是不明白楼主的意思,输出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}....
等等所有的情况输出来,还是:根据用户的要求取两个,三个,加入另个数组啊,等下写写。。。。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询