Ответ 1
Вы можете сделать расширенный цикл for (для Java 5 и выше) для итерации элементов массива:
String[] elements = {"a", "a", "a", "a"};
for (String s: elements) {
//Do your stuff here
System.out.println(s);
}
У меня есть массив String с некоторыми компонентами, этот массив имеет 5 компонентов, и он меняется несколько раз. То, что я хотел бы сделать, это перебрать этот массив и получить первый компонент и компонент рядом с ним. Поэтому в первый раз, когда я получу компонент номер один и компонент номер 2, второй раз получится число 2 и 3, третий раз номер 3 и 4... И так далее, пока вы не дойдете до последнего компонента.
Это как далеко я пришел:
String[] elements = { "a", "a","a","a" };
for( int i = 0; i <= elements.length - 1; i++)
{
// get element number 0 and 1 and put it in a variable,
// and the next time get element 1 and 2 and put this in another variable.
}
Как я могу это сделать?
Вы можете сделать расширенный цикл for (для Java 5 и выше) для итерации элементов массива:
String[] elements = {"a", "a", "a", "a"};
for (String s: elements) {
//Do your stuff here
System.out.println(s);
}
String[] elements = { "a", "a", "a", "a" };
for( int i = 0; i < elements.length - 1; i++)
{
String element = elements[i];
String nextElement = elements[i+1];
}
Обратите внимание, что в этом случае elements.length
равно 4, поэтому вы хотите выполнить итерацию с [0,2]
, чтобы получить элементы 0,1
, 1,2
и 2,3
.
String current = elements[i];
if (i != elements.length - 1) {
String next = elements[i+1];
}
Это гарантирует, что вы не получите ArrayIndexOutOfBoundsException
для последнего элемента (там нет "рядом" ). Другой вариант - итерация до i < elements.length - 1
. Это зависит от ваших требований.
String[] elements = { "a", "a","a","a" };
for( int i=0; i<elements.length-1; i++)
{
String s1 = elements[i];
String s2 = elements[i+1];
}
Я бы сказал, вместо тестирования i
меньше elements.length - 1
тестирования i + 1
меньше elements.length
. Вы не меняете домен массива, на который вы смотрите (т.е. Игнорируете последний элемент), а скорее изменяете наибольший элемент, который вы просматриваете на каждой итерации.
String[] elements = { "a", "a","a","a" };
for(int i = 0; i + 1 < elements.length; i++) {
String first = elements[i];
String second = elements[i+1];
//do something with the two strings
}
Вы должны поддерживать последовательность, сколько раз вы обращаетесь к массиву. Используйте это
int lookUpTime=0;
for(int i=lookUpTime;i<lookUpTime+2 && i<elements.length();i++)
{
// do something with elements[i]
}
lookUpTime++;
Эти алгоритмы неверны из-за сравнения:
for (int я = 0; я < elements.length - 1; я ++)
или
for (int я = 0; я + 1 < elements.length; я ++) {
Верно, что элементы массива варьируются от 0
до length - 1
, но сравнение в этом случае должно быть less than or equal to
.
Это должно быть:
for (int я = 0; я < elements.length; я ++) {
или
for (int я = 0; я <= elements.length - 1; я ++) {
или
for (int я = 0; я + 1 <= elements.length; я ++) {
Массив ["a", "b"]
будет итерации как:
i = 0 представляет собой < 2: элементы [0] дают "a"
i = 1 представляет собой < 2: элементы [1] дают "b"
то выйдите из цикла, потому что 2 не является < 2.
Неправильные примеры выходят из цикла преждевременно и выполняются только с первым элементом в этом простом случае из двух элементов.
String[] nameArray= {"John", "Paul", "Ringo", "George"};
int numberOfItems = nameArray.length;
for (int i=0; i<numberOfItems; i++)
{
String name = nameArray[i];
System.out.println("Hello " + name);
}
Если вы ищете производительность и порядок итераций не имеет значения, вы можете выполнять итерацию, используя оптимизированный обратный цикл:
for(int i=elements.lenth; --i>=0;) {...}
Таким образом, вы извлекаете длину массива один раз, затем уменьшаете индекс и сравниваете с нулем в одной атомарной операции. Последнее, но не последнее сравнение с нулем - очень быстрая операция, часто используемая многими процессорами (быстрее, чем сравнение с длиной массива).