수색…


비고

달리 명시되지 않는 한 모든 제어 구조는 블록 명령문 을 사용 합니다 . 이것들은 중괄호 {} 로 표시됩니다.

이것은 중괄호를 필요로하지 않는 일반 명령문 과 다르지만 이전 명령문 바로 다음 행만 고려한다는 점에서주의해야합니다.

따라서, 중괄호없이 이러한 제어 구조를 작성하는 것은 처음부터 단 하나의 명령문 만 따르는 완벽하게 유효합니다. 그러나 버그가있는 구현이나 깨진 코드로 이어질 수 있으므로 강력하게 권장하지 않습니다 .

예:

// valid, but discouraged
Scanner scan = new Scanner(System.in);
int val = scan.nextInt();
if(val % 2 == 0)
    System.out.println("Val was even!");


// invalid; will not compile
// note the misleading indentation here
for(int i = 0; i < 10; i++)
    System.out.println(i);
    System.out.println("i is currently: " + i);

If / Else If / Else Control

if (i < 2) {
  System.out.println("i is less than 2");
} else if (i > 2) {
  System.out.println("i is more than 2");
} else {
  System.out.println("i is not less than 2, and not more than 2");
}

if 블록은 i 가 1 이하일 때만 실행됩니다.

else if 조건은 else if 이전의 모든 조건 (이전 else if 구문 및 parent if 구문)이 false 로 테스트 된 if 검사됩니다. 이 예제에서 else if 조건은 i 가 2보다 크거나 같은 경우에만 검사됩니다.

결과가 true 이면 해당 블록이 실행되고 건너 뛴 후에는 else ifelse 구문이 실행됩니다.

ifelse if 조건이 true 로 테스트되지 않은 if 끝에있는 else 블록이 실행됩니다.

For 루프

for (int i = 0; i < 100; i++) {
    System.out.println(i);
}

세 가지 구성 요소 for (에 의해 분리 루프 ; ) 변수 선언 / 초기화있다 (여기서 int i = 0 ), 상태 (여기 i < 100 ) 및 증분 문 (여기 i++ ). 변수 선언은 { 첫 번째 실행에서 { 바로 안쪽에 배치 된 것처럼 한 번 수행됩니다. 이 경우 다음 조건은, 체크 true 이있는 경우 루프의 몸이, 실행됩니다 false 루프가 중지됩니다. 루프가 계속되면 본문이 실행되고 마지막으로 } 에 도달하면 increment 문은 조건을 다시 검사하기 직전에 실행됩니다.

루프에 단 하나의 명령.이 있으면 중} 호는 선택적입니다 (세미콜론으로 한 행이 가능함). 그러나 오해와 버그를 피하기 위해 항상 중괄호를 사용하는 것이 좋습니다.

for 루프 구성 요소는 선택 사항입니다. 비즈니스 로직에 이러한 부분 중 하나가 포함되어 있으면 for 루프에서 해당 구성 요소를 생략 할 수 있습니다.

int i = obj.getLastestValue(); // i value is fetched from a method
    
for (; i < 100; i++) { // here initialization is not done
    System.out.println(i);
}

for (;;) { function-body } 구조체는 while (true) 루프와 같습니다.

Nested For Loops

내부에 또 다른 루프 문이있는 모든 루핑 문은 중첩 루프라고 불립니다. 더 많은 내부 루프를 갖는 루핑에 대한 동일한 방법을 'for nested for loop'라고합니다.

    for(;;){
        //Outer Loop Statements
        for(;;){
            //Inner Loop Statements
        }
        //Outer Loop Statements
    }

중첩 된 for 루프는 삼각형 모양의 숫자를 인쇄 할 수 있습니다.

for(int i=9;i>0;i--){//Outer Loop
    System.out.println();
    for(int k=i;k>0;k--){//Inner Loop -1
        System.out.print(" ");
    }
    for(int j=i;j<=9;j++){//Inner Loop -2
        System.out.print(" "+j);
    }
 }

While 루프

int i = 0;
while (i < 100) { // condition gets checked BEFORE the loop body executes
    System.out.println(i);
    i++;
}

while 루프는 괄호 안의 조건이 true 됩니다. 주 루프 몸체가 매번 수행되기 전에 조건문이 충족되어야하기 때문에이를 "사전 테스트 루프"구조라고도합니다.

루프에 단 하나의 명령문 만 있으면 중괄호는 선택 사항이지만 일부 코딩 스타일 규칙은 상관없이 중괄호를 갖는 것을 선호합니다.

do ... while 루프

do...while 루프는 적어도 한 번 이상 실행된다는 점에서 다른 루프와 다릅니다. 조건문은 주 루프 본문 뒤에 수행되므로 "테스트 후 루프"구조라고도합니다.

int i = 0;
do {
    i++;
    System.out.println(i);
} while (i < 100); // Condition gets checked AFTER the content of the loop executes.

이 예제에서 루프는 루프가 실행 된 후에 루프 조건이 평가되기 때문에 번호 100 이 인쇄 될 때까지 실행됩니다 (조건은 i < 100 이고 i <= 100 아님).

하나 이상의 실행이 보장되면 루프 외부의 변수를 선언하고 내부에서 초기화 할 수 있습니다.

String theWord;
Scanner scan = new Scanner(System.in);
do {
    theWord = scan.nextLine();
} while (!theWord.equals("Bird"));

System.out.println(theWord);

이 컨텍스트에서 theWord 는 루프 외부에서 정의되지만 자연 흐름을 기반으로하는 값을 보장하므로 theWord 가 초기화됩니다.

각각

Java SE 5

Java 5 이상에서는 for-each 루프 (향상된 for 루프라고도 함)를 사용할 수 있습니다.

List strings = new ArrayList();
        
strings.add("This");
strings.add("is");
strings.add("a for-each loop");
        
for (String string : strings) {
    System.out.println(string);
}

각 루프는 Iterable 인터페이스의 배열 및 구현을 반복하는 데 사용할 수 있으며 나중에 List 또는 Set 와 같은 Collections 클래스를 포함합니다.


루프 변수는 소스 유형에서 할당 할 수있는 모든 유형이 될 수 있습니다.

Iterable<T> 또는 T[] 에 대한 향상된 for 루프의 루프 변수는 S 유형 일 수 있습니다. if

  • T extends S
  • TS 는 모두 원시 타입이며 캐스트없이 할당 가능하다.
  • S 는 기본 유형이며 T 는 변환을 언 박싱 한 후 S 할당 할 수있는 유형으로 변환 할 수 있습니다.
  • T 는 기본 유형이며 autoboxing 변환을 통해 S 로 변환 될 수 있습니다.

예 :

T elements = ...
for (S s : elements) {
}
에스 컴파일
int []
긴[] int 아니
Iterable<Byte>
Iterable<String> CharSequence
Iterable<CharSequence> 아니
int [] 아니
int [] 정수

다른 경우라면

int i = 2;
if (i < 2) {
  System.out.println("i is less than 2");
} else {
  System.out.println("i is greater than 2");
}

if 문은 괄호 안의 조건 결과에 따라 조건부로 코드를 실행합니다. 괄호 안의 조건이 참일 때 {} 와 같이 중괄호로 정의 된 if 문 블록에 들어갑니다. 닫는 대괄호가 if 문의 범위가 될 때까지 여는 대괄호.

else 블록은 선택적이며 생략 될 수 있습니다. 경우는 실행 if 문이 false 과 경우 실행되지 않는 if 문이 때문에이 경우에 해당하는 if 문이 실행됩니다.

또한보십시오 : 삼원조 If

스위치 문

switch 문은 Java의 다중 방향 분기 문입니다. 이것은 long if - else if - else 체인을 대체하여 더 읽기 쉽게 만들어줍니다. 그러나 if 문과 달리 부등식을 사용할 수 없습니다. 각 값은 구체적으로 정의되어야합니다.

switch 문에는 세 가지 중요한 구성 요소가 있습니다.

  • case : switch 문에 대한 인수와 동등한 지 평가되는 값입니다.
  • default : case 문이 true 평가되지 않는 case 선택적인 catch-all 식 true .
  • case 진술의 갑작스러운 완성; 일반적으로 break : 추가 case 명세서의 바람직하지 않은 평가를 방지하기 위해 필요합니다.

continue 제외하고는 명령문의 갑작스런 완료를 초래하는 명령문을 사용할 수 있습니다. 여기에는 다음이 포함됩니다.

  • break
  • return
  • throw

아래 예에서 일반적인 switch 문은 default 포함하여 네 가지 경우로 작성됩니다.

Scanner scan = new Scanner(System.in);
int i = scan.nextInt();
switch (i) {
    case 0:
        System.out.println("i is zero");
        break;
    case 1:
        System.out.println("i is one");
        break;
    case 2:
        System.out.println("i is two");
        break;
    default:
        System.out.println("i is less than zero or greater than two");
}

갑작스러운 완료가 될 break 나 어떤 문장을 생략함으로써 우리는 여러 가지 값에 대해 평가하는 "fall-through"사례로 알려진 것을 활용할 수 있습니다. 이 값을 사용하여 값의 범위를 만들 수는 있지만 여전히 부등식만큼 유연하지는 않습니다.

Scanner scan = new Scanner(System.in);
int foo = scan.nextInt();
switch(foo) {
    case 1:
        System.out.println("I'm equal or greater than one");
    case 2:
    case 3:    
        System.out.println("I'm one, two, or three");
        break;
    default:
        System.out.println("I'm not either one, two, or three");
}

foo == 1 경우 출력은 다음과 같습니다.

I'm equal or greater than one
I'm one, two, or three

foo == 3 경우 출력은 다음과 같습니다.

I'm one, two, or three
Java SE 5

switch 문은 enum 과 함께 사용할 수도 있습니다.

enum Option {
    BLUE_PILL,
    RED_PILL
}

public void takeOne(Option option) {
    switch(option) {
        case BLUE_PILL:
            System.out.println("Story ends, wake up, believe whatever you want.");
            break;
        case RED_PILL:
            System.out.println("I show you how deep the rabbit hole goes.");
            break;
            
    }
}
Java SE 7

switch 문은 String 에서도 사용할 수 있습니다.

public void rhymingGame(String phrase) {
    switch (phrase) {
        case "apples and pears":
            System.out.println("Stairs");
            break;
        case "lorry":
            System.out.println("truck");
            break;
        default:
            System.out.println("Don't know any more");
    }
}

삼항 연산자

때로는 조건을 확인하고 변수의 값을 설정해야합니다.

예를 들어.

String name;

if (A > B) {
    name = "Billy";
} else {
    name = "Jimmy";
}

이것은 한 행에 다음과 같이 쉽게 작성할 수 있습니다.

String name = A > B ? "Billy" : "Jimmy";

변수의 값은 조건이 참이면 조건 ​​바로 다음 값으로 설정됩니다. 조건이 거짓이면 두 번째 값이 변수에 주어집니다.

단절

break 문은 (같은 루프를 종료 for , while ) 또는 평가 switch 문 .

고리:

while(true) {
   if(someCondition == 5) {
       break;
   }
}

예제의 루프는 영원히 계속 실행됩니다. 그러나 someCondition 이 일부 실행 지점에서 5 와 같으면 루프가 종료됩니다.

여러 개의 루프가 계단식 연결되면 가장 안쪽의 루프 만이 break 끝납니다.

시도하십시오 ... 잡으십시오 ... 마지막으로

try { ... } catch ( ... ) { ... } 제어 구조는 Exceptions 처리에 사용됩니다.

String age_input = "abc";
try {
    int age = Integer.parseInt(age_input);
    if (age >= 18) {
        System.out.println("You can vote!");
    } else {
        System.out.println("Sorry, you can't vote yet.");
    }
} catch (NumberFormatException ex) {
    System.err.println("Invalid input.  '" + age_input + "' is not a valid integer.");
}

그러면 다음과 같이 인쇄됩니다.

잘못된 입력. 'abc'는 유효한 정수가 아닙니다.

catch 다음에 finally 절을 추가 할 수 있습니다. finally 절은 예외가 발생했는지 여부에 관계없이 항상 실행됩니다.

try { ... } catch ( ... ) { ... } finally { ... }

String age_input = "abc";
try {
    int age = Integer.parseInt(age_input);
    if (age >= 18) {
        System.out.println("You can vote!");
    } else {
        System.out.println("Sorry, you can't vote yet.");
    }
} catch (NumberFormatException ex) {
    System.err.println("Invalid input.  '" + age_input + "' is not a valid integer.");
} finally {
    System.out.println("This code will always be run, even if an exception is thrown");
}

그러면 다음과 같이 인쇄됩니다.

잘못된 입력. 'abc'는 유효한 정수가 아닙니다.
이 코드는 예외가 발생하더라도 항상 실행됩니다.

중첩 된 중단 / 계속

label 문을 사용하여 외부 루프를 break 하거나 continue 수 있습니다.

outerloop:
for(...) {
    innerloop:
    for(...) {
        if(condition1)
            break outerloop;

        if(condition2)
            continue innerloop; // equivalent to: continue;
    }
}

Java의 레이블에는 다른 용도가 없습니다.

자바로 계속 선언문

continue 문은 현재 반복에서 나머지 단계를 건너 뛰고 다음 루프 반복으로 시작하는 데 사용됩니다. 컨트롤은 continue 문에서 단계 값 (증가 또는 감소)으로 이동합니다 (있는 경우).

String[] programmers = {"Adrian", "Paul", "John", "Harry"};

    //john is not printed out
    for (String name : programmers) {
        if (name.equals("John"))
            continue;
        System.out.println(name);
    }

continue 문은 명명 된 루프의 단계 값 (있는 경우)으로 프로그램을 제어 할 수 있습니다.

Outer: // The name of the outermost loop is kept here as 'Outer'
for(int i = 0; i < 5; )
{
    for(int j = 0; j < 5; j++)
    {
        continue Outer;
    }
}


Modified text is an extract of the original Stack Overflow Documentation
아래 라이선스 CC BY-SA 3.0
와 제휴하지 않음 Stack Overflow