0

我需要将 List 中的值与数组中的值进行比较。我写了以下内容:

public class JavaApplication3 {

/**
 * @param args the command line arguments
 */
public static void main(String[] args) {
    // TODO code application logic hereut
    List<String> l = new ArrayList<String>();
    l.add("test");
    l.add("b");
    String v = "";
    String s = "";
    String[] arr = {"test", "c", "b"};

    for (int i = 0; i < l.size(); i++){
        v = "";
        s = "";
        //System.out.println(l.get(i));
        for (int j = 0; j < arr.length; j++){
            if (l.get(i).equals(arr[j])){
                s = i + "";
            }else{
                s = arr[i];
            }
            v = v + s + ",";                   
        }  
        System.out.println(v);          
    }

}

}

我获得以下 0,test,test, c,c,1 但我需要这样的结果:0, c, 1,

4

5 回答 5

1

查看您的预期结果,我猜想这样的要求:

对于数组中的每个元素,检查它是否在列表中。如果它在列表中,则打印该元素的列表中的索引,否则打印该元素本身。所以算法应该这样做:

array[0] = "test" -> found at index 0 -> print "0"
array[1] = "c"    -> not found        -> print "c"
array[2] = "b"    -> found at index 1 -> print "1"

外部循环应该遍历数组。然后,对于每个数组项,遍历列表,直到找到相同的元素。对于初稿,不要将输出收集在字符串中,而是立即打印出来。当算法按预期工作时,您可以创建字符串。

于 2013-07-04T18:51:13.627 回答
0

这个怎么样:

 public static void main(String[] args) {
        // TODO code application logic hereut
        List<String> l = new ArrayList<String>();
        l.add("test");
        l.add("b");
        String v = "";
        String s = "";
        String[] arr = {"test", "c", "b"};
        int pointer = 0;
        for (int i = 0; i < l.size(); i++){
                        //System.out.println(l.get(i));
            for (; pointer < arr.length;){
                if (l.get(i).equals(arr[pointer])){
                    s = i + "";
                    v = v + s + ",";
                    pointer++;
                    break;
                }else{
                    s = arr[i];
                }
                pointer++;
                v = v + s + ",";
            }

        }
        System.out.println(v);

    }
于 2013-07-04T18:50:42.370 回答
0

您有六次迭代,每次迭代都会在输出中插入一些内容。

您需要三个迭代,每个迭代都检查第一个列表中的成员资格。你可以用这个List.contains()方法做到这一点。(如果列表很长,您可能需要考虑使用 aSet而不是 a List,以便更快地检查集合成员资格。)

于 2013-07-04T18:52:11.703 回答
0

尝试将事情分解为高级步骤。

For each string in the array
    find its place in the list
    if the item is in the list
        print its position
    else
        print the missing string
    print a common and space

一旦你有了这个,你可以发现它find its place in the list可能是一个返回列表中位置的方法,如果它不在列表中,则返回 -1。这是我所做的(可能已经重命名了一些东西并使用了 StringBuilder 但你暂时可以忽略它)。

import java.util.ArrayList;
import java.util.List;

public class Example {
    public static void main(final String[] args) {
        final List<String> listToSeach = new ArrayList<String>();
        listToSeach.add("test");
        listToSeach.add("b");

        final String[] arrayElementsToFind = { "test", "c", "b" };

        final StringBuilder output = new StringBuilder();
        for (final String string : arrayElementsToFind) {
            final int firstIndex = findFirstIndex(listToSeach, string);
            if (firstIndex > -1) {
                output.append(firstIndex);
            } else {
                output.append(string);
            }
            output.append(", ");
        }
        System.out.println(output);
    }

    private static int findFirstIndex(final List<String> list,
            final String element) {
        for (int i = 0; i < list.size(); i++) {
            if (list.get(i).equals(element)) {
                return i;
            }
        }
        return -1;
    }
}
于 2013-07-05T00:18:28.467 回答
0

那么我建议这个:

     List<String> l = new ArrayList<String>();
     l.add("test");
     l.add("b");
     String[] arr = {"test", "c", "b"};

     for(int i=0;i<arr.length;++i){

       if(l.contains(arr[i]))
         s = ""+l.indexOf(arr[i]);
       else
         s = arr[i];

       v = v + s + ",";
      }

如果你说的对,我认为这不那么冗长

于 2013-07-05T01:31:09.620 回答