首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java相关 >

数组的组合排列和循环比较有关问题

2013-04-05 
数组的组合排列和循环比较问题java代码,如何解决如下两个问题:1、String[] a {01,0102,010204} ,String[]

数组的组合排列和循环比较问题
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));
    }
}


[解决办法]
第二个可以用循环家递归应该可以
void bijiao(int a[],int b){
  if(b==a.length-1)
   return;
   for(int i=b;i<a.length;i++)
{
   System.out.print(比较结果)
}
bijiao(a,b+1);
}

热点排行