关于java中循环的问题

int[] a = {101,102,103,104,105};
int[] b ={11,12,13,14,15,16,17,18,19};

现在有2个数组我现在想 取得他们相减后的最小值 例如101-11=90 101-12=89 依次类推,最后我会得到5个对应关系101-->19;
102-->18;103-->17;104-->16;105-->15; 注意::不是2个数组中最小的相减

是数组a中的元素101,遍历数组b中的所有元素,算法是相减,101-11=90,101-12=89;一次类推,等到一个相减最小的一组数,这组数就是101-19;同理102也是同样的算法 得到的也是一组相减最小的,102-19; 但是同时要注意,b数组中的元素只能对应一个a数组中的元素,也就是101-19 =82;19已经与101对应了,所以102-19=83虽然是在102减去b数组中所有元素中是最小的,但是19不能与102对应,只能是18与之对应,,,一次类推,最后应该得出5个对应的数~~~
我应该怎么做呢?

7个回答

既然只能循环,我想那就需要这么做。
得用个对象[code="java"]
class MinValue implements Comparable{
int minuend;//被减数
int meiosis;//减数
int difference;//差值
compareTo(MinValue o) {
//以difference值比较大小
}
equals(Object o){
//以meiosis判断重复
}
hashCode(){
//以meiosis生成
}
}

//然后有个数据结构。
class HashTreeSet{
int size;
HashMap ;//去重用
TreeSet;//排序用
add(){
//先判断是否有重复
//有重复则比较这2个值。值小的留下,值大的从HashMap和TreeSet移走
//不重复则判断size是否大于5,大于5跟TreeSet中最小的值比较,留下小的,移走大的
//小于5则直接加入。
}
}
[/code]
这样不需数据排序。

1、将b数组排序结果为:b={19,18,17,16,15,14,13,12,11},
2、循环a数组,取出b数组中对应的值就可以了。如a[0]->b[0]就是101->19...

liu312312
liu312312 哦 不是这样的这个是我在算法中抽离出来的~~ 这个是不能排序的, 必须是循环,因为在算法中这个都不是数组。。
接近 7 年之前 回复

先把两个数组排序,然后[code="java"]int[] a = {101,102,103,104,105};
int[] b ={11,12,13,14,15,16,17,18,19};
int c = b.length;
for(int i = 0 ; i < a.length ; i++){
System.out.println(a[i]-b[c-i-1]);
}[/code]

qq415241704
qq415241704 如果你能分离出来这种数据,那也可以将这些数据放到数据里面
接近 7 年之前 回复
qq415241704
qq415241704 82 84 86 88 90不是这样的结果吗?
接近 7 年之前 回复
liu312312
liu312312 这两个数组是不能排序的,这个是在别的算法分离出来简写的, 所以只能是循环, 不能排序~
接近 7 年之前 回复
liu312312
liu312312 好像不对啊~~ 的出来的结果不对吧
接近 7 年之前 回复

public static void main(String[] args)
{
int[] a = {101,102,103,104,105};
int[] b ={11,12,13,14,15,16,17,18,19};
int tempResult =0;
int minResult =0;
int minColIndex =0;
for(int i=0;i {
minResult =a[i];
for(int j=0;j {
if(b[j]==-1)
{
continue;
}
tempResult = a[i]-b[j];
if(tempResult {
minResult = tempResult;
minColIndex = j;
}
}
System.out.println(a[i]+"->"+b[minColIndex]);
b[minColIndex]=-1;
}
}

class A{
private int[] a = {101,102,103,104,105};
private int[] b ={11,12,13,14,15,16,17,18,19};
public void deal()
{
int[] tem=b;
for(int i=0;i<a.length;i++)
{
int temp=max(tem);
System.out.println(a[i]+"-"+temp+" = "+(a[i]-temp));
tem=remove(temp,tem);

    }

} 
private  int max(int a[])
{
    int max=-1;
    for(int i=0;i<a.length;i++)
    {
        if(max<a[i])
            max=a[i];
    }
    return max;
}
private int [] remove(int max,int a[])
{ 
    int[] b =new int[a.length-1];
    int j=0;
    for(int i=0;i<a.length;i++)
    {
        if(max!=a[i])
        {
           b[j]=a[i];
            j++;

        }
    }
    System.arraycopy(a, 0, b, 0, a.length-1); 
    return b;
}

public static void main(String[] args){
new A().deal();
}

}

[code="java"]
Arrays.sort(b);
for(int i=0;i for(int j=a.length-1;j>=0;j--){
System.out.println(a[i]+"-->"+b[j]);
}
}
[/code]

liu312312
liu312312 不是数组是不能排序的~~~~ 我是要把A中的元素每个都要个跟b中的元素计算,, 然后每个a中的元素找到数值最小的一个~~~~
接近 7 年之前 回复

[code="java"]
Arrays.sort(b);
for (int i = 0; i < a.length; i++) {
System.out.println(a[i] + " --> " + b[b.length - i - 1] );
}
[/code]

将数组b按从小到大排序,然后依次遍历数组a,将a[i] 减去 b的倒数[b.length - i - 1]个元素即可

Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!