최고의 프로그래머는 게으른 프로그래머라고 하잖아요. 동일한 유형의 작업을 여러 번 수행하는 대신 그는 자신을 위해 작업을 수행할 알고리즘을 생각해 낼 것입니다. 그리고 다시 할 필요가 없도록 잘 해낼 것입니다. 동일한 코드를 반복해서 작성하는 것을 피하기 위해 루프가 발명되었습니다. 0부터 99까지의 숫자를 콘솔에 표시해야 한다고 가정해 보겠습니다. 루프가 없는 코드:
System.out.println(0);
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
System.out.println(5);
// And so on
이 코드는 100줄이 필요합니다! 너무 많아요. 루프를 사용하면 다음과 같습니다.
for(int i = 0; i < 100; i++) {
System.out.println(i);
}
단 3줄!
for 루프란 무엇입니까?
for 루프는 알고리즘 실행의 선형성을 깨뜨리고 지정된 코드를 여러 번 실행할 수 있게 해주는 프로그램 코드의 제어 구조입니다. 예를 들어 약 30방울을 복용해야 합니다. 알고리즘은 다음과 같습니다.- 유리잔을 준비하세요.
- 뚜껑을 엽니다.
- 1 방울을 얻으십시오.
- 2 방울을 얻으십시오. ...
- 30드롭을 받으세요.
- 약을 닫으세요.
- 받은 부분을 가져옵니다.
- 유리잔을 준비하세요.
- 드립캡을 엽니다.
- 30 방울을 얻으십시오.
- 약을 닫으세요.
- 받은 부분을 가져옵니다.
for 루프의 작동 방식
for 루프는 다음과 같이 사용됩니다.for(<начальная точка>; <condition выхода>; <операторы счетчика>) {
// Loop body
}
Пример перебора цифр от 0 до 5 и вывод каждой в консоль:
for(int i = 0; i < 5; i++) {
System.out.println(i);
}
결론:
0
1
2
3
4
이 항목을 인간의 언어로 번역하면 다음과 같은 결과가 나옵니다. " 초기 값이 0인 변수 i를 생성하고 5에 도달할 때까지 1을 추가하고 각 단계에서 i 값을 콘솔에 씁니다 ." Java의 for 루프는 다음 다이어그램으로 표현될 수 있는 세 단계를 기반으로 합니다. 루프를 종료하기 위한 조건은 부울 표현식입니다. 거짓이면 루프가 종료됩니다. 위의 예에서 변수는 i
1씩 증가합니다. 해당 값이 5보다 작으면 루프가 계속됩니다. 그러나 5보다 크거나 같게 되면 i
사이클이 중지됩니다. 카운터 연산자는 카운터 변수에 대한 변환을 수행하는 표현식입니다. 위의 예에서는 변수가 i
1만큼 증가했습니다. 즉, 루프는 정확히 5번 실행됩니다. 카운터 연산자가 변수에 2를 추가하면 i
결과가 달라집니다.
for(int i = 0; i < 5; i = i + 2) {
System.out.println(i);
}
결론:
0
2
4
또한 변수를 곱하고, 나누고, 거듭제곱하는 등 일반적으로 원하는 작업을 수행할 수 있습니다. 가장 중요한 것은 변환 결과가 숫자라는 것입니다. 루프의 본문은 실행될 수 있는 모든 코드입니다. 위의 예에서 루프 본문은 변수 i의 값을 콘솔에 출력했지만 이 본문의 내용은 작업과 상상에 따라 제한됩니다. 전체 구성표를 요약하면 이 for 루프의 원리는 다음과 같습니다. 루프 종료 조건에 도달하기 전에 카운터 연산자가 수행하는 변환 횟수만큼 루프 본문에 있는 코드가 실행됩니다. 루프 종료 조건을 다음과 같이 설정하면 true
:
for(int i = 0; true; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
unreachable statement
그러면 루프 뒤의 코드는 실행되지 않으므로 오류로 표시됩니다 . 독창성에 대한 도전: 아래 코드를 실행하면 " Loop ended
"가 콘솔에 출력됩니까, 아니면 루프가 끝없이 실행됩니까?
for(int i = 0; i > -1; i++) {
if(i % 1000000 == 0) System.out.println(i);
}
System.out.println("Loop ended");
답변: 있을 것입니다. 변수 i는 조만간 최대값에 도달하고, 더 증가하면 최대 음수값으로 바뀌어 종료 조건이 충족됩니다(i < = -1).
forEach 루프
루프로 작업할 때 배열이나 컬렉션을 반복해야 하는 경우가 있습니다. 일반적으로 for 루프를 사용하여 배열을 반복할 수 있습니다.public void printAllElements(String[] stringArray) {
for(int i = 0; i < stringArray.length; i++) {
System.out.println(stringArray[i]);
}
}
그리고 그것은 옳습니다. 그러나 배열의 모든 요소를 하나씩 반복하기 위해 forEach 구성을 생각해 냈습니다. 서명은 다음과 같습니다.
for(<Тип element> <Name переменной, куда будет записан очередной элемент> : <Название массива>) {
// Loop body
}
다음과 같은 방법으로 문자열 배열을 반복하고 각 문자열을 콘솔에 인쇄할 수 있습니다.
public void printAllElements(String[] stringArray) {
for(String s : stringArray) {
System.out.println(s);
}
}
또한 짧고 간결합니다. 가장 중요한 것은 카운터와 종료 조건에 대해 생각할 필요가 없다는 것입니다. 모든 것이 이미 완료되었습니다.
for 루프가 사용되는 방법
이제 다양한 문제를 해결하기 위해 Java에서 for 루프를 사용하는 몇 가지 예를 살펴보겠습니다.역순환(큰 것에서 작은 것으로)
for(int i = 5; i > 0; i--) {
System.out.println(i);
}
결론:
5
4
3
2
1
여러 변수 및 루프 본문에서 카운터 증가
for 루프에서 여러 변수를 사용할 수 있습니다. 예를 들어 counter 문에서 변환할 수 있습니다.int a = 0;
for(int i = 5; i > 0; i--, a++) {
System.out.print("Step: " + a + " Meaning: ");
System.out.println(i);
}
결론:
Шаг: 0 Значение: 5
Шаг: 1 Значение: 4
Шаг: 2 Значение: 3
Шаг: 3 Значение: 2
Шаг: 4 Значение: 1
또는 두 개의 변수를 선언하고 서로 동일해질 때까지 반복합니다.
for(int i = 5, j = 11; i != j; i++, j--) {
System.out.println("i: " + i + " j: " + j);
}
결론:
i: 5 j: 11
i: 6 j: 10
i: 7 j: 9
이 작업에는 가치가 있을 가능성이 거의 없지만 이러한 가능성에 대해 알아두면 유용합니다. for 루프 내에 내부 루프를 만들 수도 있습니다. 이 경우 루프 단계 수는 다음과 같이 곱해집니다.
for(int i = 0; i < 5; i++) {
System.out.print(i + " | ");
for(int j = 0; j < 5; j++) {
System.out.print(j + " ");
}
System.out.print('\n');
}
결론:
0 | 0 1 2 3 4
1 | 0 1 2 3 4
2 | 0 1 2 3 4
3 | 0 1 2 3 4
4 | 0 1 2 3 4
카운터 루프에서는 j
외부 루프의 카운터에 액세스할 수 있습니다. 따라서 중첩 루프는 2차원, 3차원 및 기타 배열을 탐색하는 이상적인 방법입니다.
int[][] array = { {0, 1, 2, 3, 4 },
{1, 2, 3, 4, 5},
{2, 3, 4, 5, 6},
{3, 4, 5, 6, 7}};
for(int i = 0; i < array.length; i++) {
for(int j = 0; j < array[i].length; j++) {
System.out.print(array[i][j] + " ");
}
System.out.print('\n');
}
결론:
0 1 2 3 4
1 2 3 4 5
2 3 4 5 6
3 4 5 6 7
주기의 조기 완료
루프를 처리하는 동안 루프를 중단해야 하는 경우break
현재 루프 본문을 중지하는 연산자를 사용하세요. 모든 후속 반복도 건너뜁니다.
public void getFirstPosition(String[] stringArray, String element) {
for (int i = 0; i < stringArray.length; i++) {
if(stringArray[i].equals(element)) {
System.out.println(i);
break;
}
}
}
이 메소드는 배열에서 처음으로 검색된 요소의 위치를 인쇄합니다.
String[] array = {"one", "two", "three", "Jeronimo"};
getFirstPosition(array, "two");
결론:
1
끝없는 순환
무한 for 루프를 만드는 또 다른 방법은 카운터 선언 영역, 종료 조건 및 카운터 문을 비워 두는 것입니다.for (;;) {
}
그러나 대부분의 경우 무한 루프는 논리적 오류의 증거라는 점을 명심하십시오. 이러한 루프에는 종료 조건이 있어야 합니다.
GO TO FULL VERSION