2016-10-17 3 views
0

EDIT: OK, извините за не столь ясный вопрос. Давайте попробуем другим способом: У нас есть ArayList имен: Peter, John, AdamКак НЕ найти что-то в JAVA?

Мы ищем имя String; Если ArrayList содержит строку, мы хотим написать String. Если ArrayList не содержит String, мы хотим добавить String в ArrayList.

Если я ищу «Адам», то эта программа не работает, потому что сначала она находит имя «Петр», затем «Джон», и только после этого находит «Адама». Так что в первые 2 раза он думает: «Адам» не входит в список и действует так.

String findName; 
for (i = 0; i < arrayList.size(); i++) { 
    if (arrayList.get(i).getValue().contains(findName)) { 
    System.out.println(findName); 
    break; 
    } 
    else 
    arrayList.add(findString); 
} 

Оригинальный вопрос:

У меня есть строки и Array (ArrayList). Я должен что-то сделать, если String находится в массиве и что-то еще, если оно не находится в массиве. Как мне это сделать? я не могу сделать это так:

String myString; 
for (i = 0; i < arrayList.size(); i++) { 
    if (arrayList.get(i).getValue().equals(myString)) { 
    DO SOMETHING; 
    break; 
    } 
    else 
    DO SOMETHING ELSE; 
} 

, потому что он найдет строку только один раз, и все остальное время он будет действовать, как и ArrayList не содержит строку.

Так я делаю это так:

String findString = "0"; 
String myString; 
for (i = 0; i < arrayList.size(); i++) { 
    if (arrayList.get(i).getValue().equals(myString)) { 
    DO SOMETHING; 
    findString = "2"; //when I find the String, I change this 
    break; 
    } 
    if findString == "0"; //if I have not found the String, this happens 
    DO SOMETHING ELSE; 
} 

и у меня есть чувство, оно должно быть не сделано, как это. ;)

Я знаю, что вместо этого можно использовать булевы, но это то же самое по-другому. Разве нет общего способа сделать это правильно?

+0

Удалите оператор разрыва –

+1

'Equals (String)' вместо '' == – Andrew

+0

Вы хотите сделать «сделать что-то» для каждого матча в массиве? Если это так, то вы НЕ МОЖЕТ 'ломаться', потому что break завершит цикл. И вы не можете выполнить «что-то еще», пока ПОСЛЕ цикла не закончится, потому что вы никогда не узнаете, появится ли строка позже в цикле или нет. например вы в основном делаете «я что-то преодолел в машине за последние 30 секунд?» «Нет, хорошо. Я, вероятно, больше не буду работать над чем-либо еще в ближайшие 10 часов». –

ответ

0

Вы можете установить значение boolean в true, если вы найдете свое значение, а затем сломаете. Если вы не найдете значение, логическое значение останется равным false. Тогда вы делаете if

0

Его немного смутно, поэтому я не уверен, что это то, что вы хотите, но если вы удалите перерыв в первом сегменте кода, я думаю, вы получите то, что хотите. вы хотите, чтобы он делал DOMOMHING для каждого появления строки или только первого. Кроме того, если вам нужно перерыв вы могли бы проверить значение I после того, как цикл завершается так

if(i==arrayList.size()) 
{ 
    //String found 
} 
else 
{ 
    //String not found 
} 
+0

вам также нужен разрыв в цикле, если вы хотите использовать i в качестве тестовой переменной –

1

Чистейший путь выглядит следующим образом: Объявить метод, который возвращает, является ли строка в массиве:

public boolean arrContainsStr(String str, String[] arr) { 
    for (int i = 0; i < arr.length; i++) { 
     if (arr[i].equals(str)) { 
      return true; 
     } 
    } 
    return false; 
} 

Затем используйте этот метод в коде следующим образом:

String myString;  
String[] myArray; 
if (arrContainsStr(myString, myArray)) { 
    DO SOMETHING; 
}else { 
    DO SOMETHING ELSE; 
} 

Это для примитивных струнных массивов. Обратите внимание: если вы используете ArrayList или аналогичный, вы можете просто использовать метод .contains(myString), чтобы проверить, содержит ли список вашу строку. Документация здесь: https://docs.oracle.com/javase/7/docs/api/java/util/ArrayList.html#contains(java.lang.Object)

1

Этот вопрос немного странный, но просто читает ваше первое предложение, если вы хотите посмотреть, есть ли List, например. ArrayList содержит объект (например, String), вы можете просто использовать метод contains(Object o), а не зацикливать. Мне не хватает вашей точки.В любом случае, пример:

String stringToFind = "Foo"; 
List<String> stringList = new ArrayList<>(); 
stringList.add("Foo"); 
if (stringList.contains(stringToFind)) { 
    System.out.println("String found"); 
} else { 
    System.out.println("String not found"); 
} 

Выход: найденная строка. (В этом примере).

1

Не могли бы вы использовать .contains, как показано ниже, чтобы проверить, есть ли строка в списке?

if(arrayList.contains(myString)){ 
    // DO SOMETHING 
} else { 
    // DO SOMETHING ELSE 
} 
Смежные вопросы