Предположительно все часто используют двухуровневый обход FOR, поэтому вы обнаружили следующие проблемы?
1. Обычный цикл
Во-первых, давайте посмотрим на следующий цикл
int k = 0;
for(int i = 0; i < 10; i++){
for(int j = 0; j < 6; j++){
System.out.println(k++);//循环60次
}
}
Сравните с этим
int k = 0;
for(int i = 0; i < 6; i++){
for(int j = 0; j < 10; j++){
System.out.println(k++);//循环60次
}
}
60 циклов. Затем мы делаем следующее с циклом
2. Цикл массива
Давайте снова посмотрим на цикл массива
int[] a = {0,1,2,3,4,5,6,7,8,9};
int[] b = {0,1,2,3,4,5};
for(int i = 0; i < a.length; i++){
for(int j = 0; j < b.length; j++){
System.out.println(k++);//循环60次
}
}
Сравните с этим
int[] a = {0,1,2,3,4,5,6,7,8,9};
int[] b = {0,1,2,3,4,5};
for(int i = 0; i < b.length; i++){
for(int j = 0; j < a.length; j++){
System.out.println(k++);//循环60次
}
}
3. Практическое применение
Увидев это, вы думаете, что я несу чушь?
Что ж, давайте перейдем к делу, надеюсь, у вас не так много времени.
В сценариях практического применения мы не только закончили с двухуровневым циклом: например, мы хотим выполнить сравнение данных
int k = 0;
int[] a = {0,1,2,3,4,5,6,7,8,9};
int[] b = {0,1,2,3,4,5};
for(int i = 0; i < a.length; i++){
for(int j = 0; j < b.length; j++){
if(a[i] == b[j]){
k++;
break;//结束本次循环
}
k++;
}
}
System.out.println("程序共循环" + k + "次");//
В этом цикле мы оцениваем, равны ли внешние данные внутренним данным, и добавляем break, чтобы завершить цикл (чтобы избежать бессмысленности).
Вывод программы:Всего программа повторяется 45 раз.
Затем я снова смотрю на эту программу:
int k = 0;
int[] b = {0,1,2,3,4,5,6,7,8,9};
int[] a = {0,1,2,3,4,5};
for(int i = 0; i < a.length; i++){
for(int j = 0; j < b.length; j++){
if(a[i] == b[j]){
k++;
break;//结束本次循环
}
k++;
}
}
System.out.println("程序共循环" + k + "次");
Обратите внимание, что значения массивов a и b меняются местами;
Взгляните еще раз на вывод:Всего программа повторяется 21 раз.
Тогда возникает проблема, если мы не отрегулируем положение a и b.Мы помещаем внутреннюю петлю на внешний слой, и эффект одинаково;
Повторить 21 раз.
Кто-то может сказать, что это ничего. Но заметили ли мы эту проблему при написании реального кода? Поскольку количество циклов связано с производительностью программы
Собственно, вот почему такая большая разница:
int[] a = {0,1,2,3,4,5,6,7,8,9};
int[] b = {0,1,2,3,4,5};
Здесь массив b помещается во внешний слой, и значение, соответствующее внешнему слою, можно найти быстрее при зацикливании во внутреннем слое, после разрыва возникает разница.
Давайте изменим порядок значений массива b или поместим b во внешний слой
int k = 0;
int[] a = {0,1,2,3,4,5,6,7,8,9};
int[] b = {5,1,2,3,4,0};
for(int i = 0; i < b.length; i++){
for(int j = 0; j < a.length; j++){
if(b[i] == a[j]){
k++;
break;//结束本次循环
}
k++;
}
}
System.out.println("程序共循环" + k + "次");
Вывод программы:Всего программа повторяется 21 раз.
смущение. Вроде бы порядок замены значения не имеет. я не согласен
int k = 0;
int[] a = {0,1,2,3,4,5,6,7,8,9};
int[] b = {5,2,4,3,1,0};
for(int i = 0; i < b.length; i++){
for(int j = 0; j < a.length; j++){
if(b[i] == a[j]){
k++;
break;//结束本次循环
}
k++;
}
}
System.out.println("程序共循环" + k + "次");
Вывод программы:Всего программа повторяется 21 раз.
это не верно. изменить снова
int k = 0;
int[] a = {0,1,2,3,4,5,6,7,8,9};
int[] b = {5,1,3,4,2,0};
for(int i = 0; i < b.length; i++){
for(int j = 0; j < a.length; j++){
if(b[i] == a[j]){
k++;
break;//结束本次循环
}
k++;
}
}
System.out.println("程序共循环" + k + "次");
Вывод программы:Всего программа повторяется 21 раз.
В конце концов было обнаружено, что цикл, изменяющий только один массив, не меняет количество циклов. Количество циклов можно изменить, только изменив порядок обоих массивов одновременно.
Сегодня в развитии бизнеса я столкнулся с этой проблемой, запишите ее здесь и предупредите о будущем развитии.