数组的组合排列和循环比较问题
java代码,如何解决如下两个问题:
1、String[] a = {01,0102,010204} ,String[] b = {02,0203,020305},要求进行组合成数组c{01-02,01-0203,01-020305,0102-02,0102-0203,0102-020305,010204-02,010204-0203,010204-020305},不用两层for循环,有什么性能更好的办法?
2、int[] a = {1,3,5,7},不通过两层循环,如何得到出数组中所有的两个值间的大小关系? 数组循环、组合
[解决办法]
对于第一个,可以用一层循环实现:
public class TwoStringArraysGroups{
private String[] s1;
private String[] s2;
public TwoStringArraysGroups(String[] s1,String[] s2){
this.s1 = s1;
this.s2 = s2;
}
//本方法计算并返回两个数组的组合。
//
public String[] getGroups(){
String[] out = null;
if(s1 == null
[解决办法]
s1.length == 0){
out = s2;
}else if( s2 == null
[解决办法]
s2.length == 0){
out = s1;
}else{
int s2_length = s2.length; //数组2的长度.
int result_length = s1.length * s2.length; //结果数组的长度.
String[] result = new String[result_length]; //定义结果数组.
for(int i =0 ; i < result_length; i++){
result[i] = s1[ i/s2_length] + "-" +s2[ i % s2_length]; //关键就是这句。新数组第i 个元素与原来的两个数组的哪个元素有关。
}
out = result;
}
return out;
}
public static void main(String[] args){
String[] a = {"01","0102","010204"};
String[] b = {"02","0203","020305"};
TwoStringArraysGroups tsag = new TwoStringArraysGroups(a,b);
String[] c = tsag.getGroups();
for(String s:c){
System.out.println(s);
}
}
}
import java.util.Random;
public class OneIntArray{
private int[] int1;
private int[] result;
public OneIntArray(int[] int1){
this.int1 = int1;
result = getAllTwoElementsCompare();
}
public int[] getResult(){
return result;
}
//本方法对所有两个元素进行比较,相等为0 大于为1,小于为-1。值存入一个int[] 里面。
//
public int[] getAllTwoElementsCompare(){
int[] out = null;
if(int1 == null
[解决办法]
int1.length == 0){
out = int1;
}else{
int length = int1.length; //数组的长度.
int result_length = length * length; //结果数组的长度.
int[] result = new int[result_length]; //定义结果数组.
for(int i =0 ; i < result_length; i++){
int temp = int1[ i/length ]- int1[ i%length ]; //第i元素对应 数组的 1/length,与 i%length的比较。
result[i] = temp>0 ? 1 : (temp <0 ? -1: 0);
}
out = result;
}
return out;
}
//给定两个元素下标,得到比较结果。如果给定的值超出范围,返回-100。
//
public int getAnyTwoElementsCompare(int first,int second){
if( first<0
[解决办法]
first >= int1.length
------解决方案--------------------
second<0
[解决办法]
second >= int1.length){
return -100;
}
return result[first*int1.length+second];
}
public static void main(String[] args){
int[] a = {1,3,5,7};
OneIntArray oia = new OneIntArray(a);
int[] c = oia.getResult();
for(int i:c){
System.out.println(i);
}
//生成任意两个数字(在0,3)之间测试
Random rd = new Random();
int first = rd.nextInt(a.length);
int second = rd.nextInt(a.length);
System.out.println(" 元素 "+first+ " 和元素 "+second +" 的比较结果是:"+oia.getAnyTwoElementsCompare(first,second));
}
}