我需要将List中的值与array中的值进行比较。 我写了以下内容:
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,测试,测试, C,C,1 但我需要这样的结果: 0,c,1,
答案 0 :(得分: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"
外部循环应遍历数组。然后,对于每个数组项,迭代列表,直到找到相同的元素。对于初稿,不要将字符串中的输出收集,而是立即打印。您可以在算法按预期工作时创建字符串。
答案 1 :(得分: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);
}
答案 2 :(得分:0)
你有六次迭代,每次迭代都会在输出中插入一些东西。
您需要三次迭代,每次迭代都会检查第一个列表中的成员身份。您可以使用List.contains()
方法执行此操作。 (如果列表很长,您可能需要考虑使用Set
而不是List
,以便更快地检查集合成员资格。)
答案 3 :(得分: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;
}
}
答案 4 :(得分: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 + ",";
}
如果得到你所说的正确,我认为这不那么冗长