2015-11-30 1 views
1

Я пытаюсь создать алгоритм, который будет проверять, является ли данная строка строкой для списка строк. Строка - это строка обложки для списка строк, если она содержит символы из каждой строки слева и справа в ней. Например, обложка для «дома» и «гостиницы» будет «ахогютцель», а примером не-обложки будет «ahogjsutel».for-loop не полностью итерируется

Проблема, с которой я столкнулся, заключается в том, что мой цикл for только завершает одну итерацию, прежде чем возвращает результат. Я пытаюсь пройти через каждую строку в списке один за другим, проверяя индекс каждого символа, чтобы сохранить порядок слева направо.

Любой совет, как изменить мой цикл for, чтобы алгоритм проходил через каждый символ в каждой строке, был бы очень полезен.

общественного класса StringProcessing {

//Array list to add list of strings for testing. 
public static ArrayList<String> stringList = new ArrayList<>(); 

public static String list1 = "abc"; 

public static String list2 = "def"; 


//Algorithm to iterate through each word in stringList and test if it appears in the cover string 
//by testing index values. 
public static boolean isCover(String coverString){ 
    boolean isCover = false; 
    stringList.add(list1); 
    stringList.add(list2); 
    int size = stringList.size(); 
    int coverSize = coverString.length(); 

for (int i = 0; i < (size -1) ; i ++){ 
     for (int j = 0; j<stringList.get(i).length(); j++){    

     if (coverString.indexOf(stringList.get(i).charAt(j)) < coverString.indexOf(stringList.get(i).charAt(j+1))){ 
      return true; 
     } 
     else 
      return isCover; 
     }  
} 
return isCover; 
} 


public static void main(String[] args) { 

//For loop only checks if a is before b, then returns true before checking the rest of the characters and strings. 
    System.out.println(StringProcessing.isCover("abfdec")); 

} 
} 
+0

Если цель вашей функции, чтобы проверить, является ли аргумент строка обложка, то почему вы Определив содержание 'stringList' внутри функции? Это будет иметь побочные эффекты, так как значение 'stringList' будет выходить за рамки каждого вызова функции. – scottb

+0

Вы смогли это решить? – Perdomoff

+0

@Perdomoff Мне удалось решить этот алгоритм и заставить его функционировать правильно, спасибо за все ваши данные. – Mickd94

ответ

3
  1. Внутри вашего, если условия, вы возвращает значение, и это заканчивается ваш цикл.

  2. EDIT Сравнение Arraylist строк со строкой.

    EDIT 11/30/15: Письменный заказ рассматривается для определения, является ли слово обложкой.

Изменения в ваши методы:

public class StringProcessing2 { 
public static ArrayList<String> stringList = new ArrayList<>(); 
//Negative Case 
public static String list1 = "house"; 
public static String list2 = "hotel"; 

//Positive Case 
//public static String list1 = "abc"; 
//public static String list2 = "def"; 


public static boolean isCover(String word){ 
    int matchedWords = 0; 
    stringList.add(list1); 
    stringList.add(list2); 

    for(int i = 0; i < stringList.size(); i++){ 
      if(word.contains(String.valueOf(stringList.get(i)))){ 
       matchedWords++;         
     } 
} 
    if(matchedWords == stringList.size()){ 
     return true; 
    } 
    else 
     return false;   
} 


public static void main(String[] args) { 
System.out.println(isCover("ahogjutsel")); 
} 
} 
+1

Благодарим вас за разъяснение, как бы я теперь начал модифицировать тело этого оператора if только для возвращения true, если выражение истинно для всех символов в каждой строке в stringList – Mickd94

+0

@ Mickd94. Строка, предоставленная в основном, нужна иметь все символы каждой строки в массиве строк? – Perdomoff

+1

Большое спасибо за ответ, это было невероятно полезно. Чтобы быть строкой обложки, строка, содержащаяся в главном, должна иметь все символы каждой строки в arraylist, сохраняя строки слева направо символов, я попытался показать пример в описании первого абзаца. – Mickd94

Смежные вопросы