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

lwt675071503 2013-03-29 02:38:29
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},不通过两层循环,如何得到出数组中所有的两个值间的大小关系?
...全文
266 9 打赏 收藏 转发到动态 举报
写回复
用AI写文章
9 条回复
切换为时间正序
请发表友善的回复…
发表回复
lwt675071503 2013-04-01
  • 打赏
  • 举报
回复
引用 3 楼 nmyangym 的回复:
对于第一个,可以用一层循环实现: Java code ? 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 ……
额,的确可以,思维挺好的
zhou09039051698 2013-03-29
  • 打赏
  • 举报
回复
第二个可以用循环家递归应该可以 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); }
nmyangym 2013-03-29
  • 打赏
  • 举报
回复
引用 4 楼 yanxing2012 的回复:
引用 3 楼 nmyangym 的回复:对于第一个,可以用一层循环实现: Java code?123456789101112131415161718192021222324252627282930313233343536373839public class TwoStringArraysGroups{ private String[] s1; private……
可能是习惯.
nmyangym 2013-03-29
  • 打赏
  • 举报
回复
类似第一题, 写了第二题, 如与楼主意图不一致, 就跳过:

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));
    }
}
lwt675071503 2013-03-29
  • 打赏
  • 举报
回复
引用 2 楼 luanjiyang 的回复:
2、所有的两个值之间的大小关系。这是什么意思? 想要实现做个二维表来实现快速取相互关系?
就是输出数组中任何两个值之间的大小关系
yanxing2012 2013-03-29
  • 打赏
  • 举报
回复
引用 3 楼 nmyangym 的回复:
对于第一个,可以用一层循环实现: Java code?123456789101112131415161718192021222324252627282930313233343536373839public class TwoStringArraysGroups{ private String[] s1; private String[] s2; pu……
if(s1 == null || s1.length == 0){ out = s2; }else if( s2 == null || s2.length == 0){ out = s1; 只有main线程,有必要吗?
nmyangym 2013-03-29
  • 打赏
  • 举报
回复
对于第一个,可以用一层循环实现:


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);
        }
    }
}
MakeUrChois 2013-03-29
  • 打赏
  • 举报
回复
2、所有的两个值之间的大小关系。这是什么意思? 想要实现做个二维表来实现快速取相互关系?
STEEL-CHINA 2013-03-29
  • 打赏
  • 举报
回复
要遍历,还不许两个循环,坐等高手。

51,410

社区成员

发帖
与我相关
我的任务
社区描述
Java相关技术讨论
javaspring bootspring cloud 技术论坛(原bbs)
社区管理员
  • Java相关社区
  • 小虚竹
  • 谙忆
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧