EDIT: Большое спасибо за все очень быструю обратную связь. Вау. Я просто вложил все это для вас, а не только для двух циклов. Благодарю.Проблема, повторяющаяся через двух архаистов
Это, возможно, было полностью отвечено раньше. Я прочитал SO за последние несколько лет, но это мой первый пост. Я использовал сайт и другие, чтобы помочь решить эту проблему, поэтому приносим извинения заранее, если на это был дан ответ!
Я повторяю через два arraylists. Один из них получен из пользовательского ввода; другой - файл словаря, преобразованный в arraylist. Я пытаюсь сравнить слово во входном слове со словарем. Список ввода и список словарей действительны, и если я просто перебираю их, они содержат то, что им нужно (так что это не проблема. Я предполагаю, что моя проблема где-то с тем, как я обрабатываю итерацию. начинающий Java программист так пожалуйста легко идти на меня.
Благодаря
public String isSub(String x) throws FileNotFoundException, IOException {
//todo handle X
String out = "**********\nFor input \n" + x + "If you're reading this no match was found.\n**********";
String dictionary;
boolean solve = true;
/// Get dictionary
dictMaker newDict = new dictMaker();
dictionary = newDict.arrayMaker();
List<String> myDict = new ArrayList<String>(Arrays.asList(dictionary.split(",")));
List<String> input = new ArrayList<String>(Arrays.asList(x.split(" ")));
List<String> results = new ArrayList<String>();
//results = input;
String currentWord;
String match = "";
String checker = "";
String fail="";
//Everything to break sub needs to happen here.
while (solve) {
for(int n = 0; n < input.size(); n++) { //outside FOR (INPUT)
if(!fail.equals("")) results.add(fail);
checker = input.get(n).trim();
for(int i = 0; i < myDict.size(); i++) { //inside FOR (dictionary)
currentWord = myDict.get(i).trim();
System.out.print(checker + " " + currentWord + "\n");
if(checker.equals(currentWord)) {
match = currentWord;
results.add(currentWord);
fail="";
} //end if
else {
fail = "No match for " + checker;
}
}//end inside FOR (dictionary)
} //END OUTSIDE FOR (input)
solve=false;
} //end while
out = results.toString();
return out;
}
Вывод результатов для ввода «тест тестер asdasdfasdlfk» [тест, не подходят для тестирования, тестер, не подходит для тестера]
Ваш код, кажется, ожидает список строк, и ваш пример, кажется, проходит в одной строке с пробелами для разделения. Если это то, что вы делаете, результаты верны, как ожидалось, и передача ввода «тест» или «тестер» будет соответствовать одному из двух. Кроме того, у вас есть код отладки - полный вывод программы поможет кучу, чтобы добраться до сути. – Cobusve
Глядя на то, как вы повторяетесь, я думаю, что вы пытаетесь сделать checker.startsWith (currentWord) вместо равных ... – Cobusve
Превосходное количество быстрых и точных и полезных ответов. Всем спасибо! –