2013-07-04 9 views
0

Мне нужно сравнить значение из списка со значением из массива. я написал следующее:сравнить список и массив

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, тест, тест, с, с, 1 , но мне нужен результат: 0, с, 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); 

    } 
+0

Привет, я получаю сообщение об ошибке в строке для (указатель coco

+0

ожидается информация не доступна ';' ожидаемые несовместимые типов требуется: булево найдено: Int – coco

+0

что, если 'для (; указателя Elbek

1

Глядя на ваш ожидаемый результат, я думаю, REQ например:

для каждого элемента массива, проверьте, находится ли он в списке. Если он находится в списке, напечатайте индекс из списка для этого элемента, иначе распечатайте сам элемент. Таким образом, алгоритм должен делать:

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" 

Внешний цикл должен проходить через массив. Затем для каждого элемента массива перебирайте список, пока не найдете тот же самый элемент. Для первого черновика не собирайте вывод в строке, но печатайте его непосредственно. Вы можете создать строку, когда алгоритм работает так, как ожидалось.

+0

нормально, я попробую – coco

+0

Большое спасибо Андреас и все вы, ребята. Хорошая идея :). Глупый вопрос как новичок. спасибо – coco

0

У вас есть шесть итераций, каждая из которых вставляет что-то в выход.

Вы хотите три итерации, каждая из которых проверяет наличие членства в первом списке. Вы можете сделать это с помощью метода List.contains(). (Если список был длинным, возможно, вам стоит подумать о том, чтобы использовать Set вместо List, чтобы быстрее проверять членство в наборе.)

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; 
    } 
} 
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 + ","; 
     } 

Если есть то, что вы говорите правильно, я думаю, что это менее многословным