Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/386.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
比较2个数组的每个元素列出Java_Java_Arraylist - Fatal编程技术网

比较2个数组的每个元素列出Java

比较2个数组的每个元素列出Java,java,arraylist,Java,Arraylist,我有一个比较两个ArrayList并返回相等元素的偏差的代码 public class test { public static void main(String[] args) { ArrayList<String> list = new ArrayList<String>(); list.add("Ala"); list.add("Asn"); list.add("Ser");

我有一个比较两个ArrayList并返回相等元素的偏差的代码

public class test {

    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<String>();
        list.add("Ala");
        list.add("Asn");
        list.add("Ser");
        list.add("Thr");
        list.add("Ser");
        list.add("Tyr");

        ArrayList<String> list2 = new ArrayList<String>();
        list2.add("Asn");
        list2.add("Ser");
        list2.add("Ala");
        list2.add("Thr");
        list2.add("Ala");
        list2.add("Trp");
        list2.add("Ser");
        list2.add("Tyr");

        int a = 0;
        int b = 0 ;
        int c = 0;
        int d = 0 ;


for(int i =0 ; i < list.size() ; i++) { 
            String codoni = list.get(i);

            int j = 0;

            while(j < list2.size()) {
                String codonj = list2.get(j);

                if(codoni == codonj) { 
                    a = Math.abs(i-j);   
                        System.out.println("[ "+list.indexOf(list.get(i))+ " ] = [ " + list2.indexOf(list2.get(j)) + " ]"  +  a);

            }
            j++;                
            }           

        }

    }
}
这意味着
list.get(0)=list2.get(2)
list.get(0)=list2.get(4)

现在我想得到最小值(2,4),它等于2。。。所以我添加了这个算法

    public static void main(String[] args) {

        ArrayList<String> list = new ArrayList<String>();
        list.add("Ala");
        list.add("Asn");
        list.add("Ser");
        list.add("Thr");
        list.add("Ser");
        list.add("Tyr");

        ArrayList<String> list2 = new ArrayList<String>();
        list2.add("Asn");
        list2.add("Ser");
        list2.add("Ala");
        list2.add("Thr");
        list2.add("Ala");
        list2.add("Trp");
        list2.add("Ser");
        list2.add("Tyr");

        int a = 0;
        int b = 0 ;
        int c = 0;
        int d = 0 ;

        for(int i =0 ; i < list.size() ; i++) { 
            String codoni = list.get(i);

            int j = 0;

            while(j < list2.size()) {
                String codonj = list2.get(j);

                if(codoni == codonj) { 
                    a = Math.abs(i-j);   

                    b = b + a; 

                    c = b - a;

                    if (b != c) {

                        System.out.println("[ "+list.indexOf(list.get(i))+ " ] = [ " + list2.indexOf(list2.get(j)) + " ]"  +  Math.min(c, a));

                    }else if(codoni == codonj && i == j) {
                        System.out.println("[ "+list.indexOf(list.get(i))+ " ] = [ " + list2.indexOf(list2.get(j)) + " ]"  + a);
                    }

                }
            c = 0;  
            j++;                
            }           
            b = 0;

        }






    }
}
而不是我所期待的

[ 0 ] = [ 2 ]0
[ 0 ] = [ 4 ]2
[ 1 ] = [ 0 ]1
[ 2 ] = [ 1 ]0
[ 2 ] = [ 1 ]1
[ 3 ] = [ 3 ]0
[ 4 ] = [ 1 ]0
[ 4 ] = [ 1 ]2
[ 5 ] = [ 7 ]2

因此,当没有重复时,我有一个0而不是
list.get(I)-list2.get(j)

所以我试图找到一个在没有重复时返回i-j的代码


有什么想法吗?

因为你的算法坏了。重复的效果也很差,因为每次的第一个结果都是0。 这是因为:

a = Math.abs(i-j); //get a value which is positive or 0
b = b + a; // sets value which is equals to 'a'
c = b - a; // get a value which is always 0 since a is positive or 0

if (b != c) {
    // finding minimum of 0 and 'a' where 0 will be the minimum every time
}
正确的算法:

int a = Integer.MAX_VALUE;
for (int i = 0; i < list.size(); i++) {
    String codoni = list.get(i);
    int j = 0;
    List<Integer> matchedIndicies = new ArrayList<>();

    while (j < list2.size()) {
        String codonj = list2.get(j);

        if (codoni.equals(codonj)) {
            a = Math.min(Math.abs(i - j), a);
            matchedIndicies.add(j);
        }
        j++;
    }

    for (int k = 0; k < matchedIndicies.size(); k++) {
        int deviation = k == matchedIndicies.size() - 1 ? minDeviation : 0;
        System.out.println("[ " + i + " ] = [ " + matchedIndicies.get(k) + " ]" + deviation);
    }
    a = Integer.MAX_VALUE;
}
inta=Integer.MAX\u值;
对于(int i=0;i
如果试着编写程序员级的优化程序,我首先想到的是:

for (int i = 0; i < list.size(); i++) {
    int lastIndex = -1;
    int min = Integer.MAX_VALUE;
    String codon = list.get(i);

    for (int j = 0; j < list2.size(); j++) {
        if (codon.equals(list2.get(j))) {
            if (lastIndex > -1) {
                System.out.println("[ " + i + " ]" + " = " + "[ " + lastIndex + " ]" + 0);
            }
            lastIndex = j;
            min = Math.min(Math.abs(i - j), min);
        }

        if (j == list2.size() - 1) {
            System.out.println("[ " + i + " ]" + " = " + "[ " + lastIndex + " ]" + min);
        }
    }
}
for(int i=0;i-1){
System.out.println(“[”+i+“]”“+”=“+”[“+lastIndex+”]”+0);
}
lastIndex=j;
min=Math.min(Math.abs(i-j),min);
}
如果(j==list2.size()-1){
System.out.println(“[“+i+”]“+”=“+”[“+lastIndex+”]“+min”);
}
}
}

当有重复时,我希望它给出0,但当没有重复时,我希望它给出I-j。所以我问有没有什么方法可以做到这一点。。。我看不出你在答案中提到的正确算法。好的,那么你的解决方案完全是轨迹,因为它在计算结果后立即写入结果。我的意思是你应该只把结果写在循环的末尾。我试图通过把所有的偏差加在一起并返回一个整数来找到所有偏差的总和。。所以这就是y,我想把所有的重复都放到0btw,你的代码给出的总数是9而不是8。检查
[4]=[1]3
我告诉过你,我是从你的代码中获得的一点信息实现的,现在检查一下,我想它已经更正了。或修改。
int a = Integer.MAX_VALUE;
for (int i = 0; i < list.size(); i++) {
    String codoni = list.get(i);
    int j = 0;
    List<Integer> matchedIndicies = new ArrayList<>();

    while (j < list2.size()) {
        String codonj = list2.get(j);

        if (codoni.equals(codonj)) {
            a = Math.min(Math.abs(i - j), a);
            matchedIndicies.add(j);
        }
        j++;
    }

    for (int k = 0; k < matchedIndicies.size(); k++) {
        int deviation = k == matchedIndicies.size() - 1 ? minDeviation : 0;
        System.out.println("[ " + i + " ] = [ " + matchedIndicies.get(k) + " ]" + deviation);
    }
    a = Integer.MAX_VALUE;
}
for (int i = 0; i < list.size(); i++) {
    int lastIndex = -1;
    int min = Integer.MAX_VALUE;
    String codon = list.get(i);

    for (int j = 0; j < list2.size(); j++) {
        if (codon.equals(list2.get(j))) {
            if (lastIndex > -1) {
                System.out.println("[ " + i + " ]" + " = " + "[ " + lastIndex + " ]" + 0);
            }
            lastIndex = j;
            min = Math.min(Math.abs(i - j), min);
        }

        if (j == list2.size() - 1) {
            System.out.println("[ " + i + " ]" + " = " + "[ " + lastIndex + " ]" + min);
        }
    }
}