if문

ryulhui·2024년 6월 18일

progremmers

목록 보기
2/5

if문
조건문
어떤 문장은 수행하고 싶고, 어떤 문장은 수행하고 싶지 않을 때 사용
자바는 제어와 관련된 문법으로 if, switch 문을 제공한다.

if 조건문
조건식의 연산 결과에 따라 블록 내부 문장의 실행 여부를 결정 할 수 있다.

if 문
조건식이 true 일 경우에만 실행문이 실행된다.
if(조건식) 다음의 { } 를 생략할 수 있다. 하지만, 생략할 경우 if문에 포함되는 실행문은 단 한 줄만 포함된다.
ex)
int x = 50;
int y =60;

if (x<y) {
system.out.println("x는 y보다 작습니다") ;
system.out.println("test") ; _둘다 출력됨
}
출력값 -> x는 y보다 작습니다 _true(조건이 만족했기때문 , 반대로 false 일경우 아무것도 출력되지 않음 )

   if(조건식){
        실행문;
        실행문;
    }

-{}가 없이 실행되는 if 문에는 하나만 출력됨
if (x<y) system.out.println("x는 y보다 작습니다") ;
system.out.println("test") ; 출력값 -> test

if - else 문
조건식이 true일 경우 if 블록의 실행문이 실행되고, flase 일 경우 else 블록의 실행문이 실행된다.
ex)
if (x == y) {
system.out.println("x는 y와 같습니다") ;
}else{
system.out.println("x는 y는 다릅니다") ;
}
출력값 -> x는 y는 다릅니다

    if(조건식){
        실행문;
        실행문;
    }else{
        실행문;
    }

if - else if - else문
처음 if문의 조건식의 조건문이 true일 경우 처음 if문의 블록이 실행되고, false일 경우 다음 조건식의 결과에 따라 실행 블록이 달라진다.
else if 문의 수는 제한이 없다. 그러나 너무 많은 else if 문은 실행 속도를 느리게 한다.
마지막 else 블록은 생략되도 상관없다.
ex)
if (x == y) {
system.out.println("x는 y와 같습니다") ;
}else if (x<y){
system.out.println("x는 y보다 작습니다") ;
}else{
system.out.println("x는 y와 다릅니다") ;
}
출력값 -> x는 y보다 작습니다

    if(조건식){
        실행문;
        실행문;
    }else if(조건식){
        실행문;
    }else{
        실행문;
    }

논리연산자


빨간 박스 a,b는 피연산자, 나머지는 논리연산자

논리연산자는 논리곱(&&,&) 논리합(||,|), 배타적 논리합 (^) 논리부정(!) 연산을 수행한다.
논리 연산자의 피연산자는 블린 타입만 사용할 수 있다. 결과는 불린값이다.
boolean b1 = true;
boolean b2 = false;
boolean b3 = true;

논리곱 (&&, &) - 피연산자가 모두 true일 경우에만 연산 결과가 true 이다. 하나라도 아니면 false
System.out.println(b1 && b2); -> b2가 false 이므로 결과는 false
System.out.println(b1 && b3); -> b1과 b2 모두 true 이므로 결과는 true

ex)
int score = 88;
if (score <=100 && score >=70) { _둘다 만족했을때
System.out.println("성공")
}elso{
System.out.println("실패")
} 출력값 -> 성공

논리합 (||,|) - 피연산자 중 하나만 true이면 연산 결과는 true 이다. _둘중 하나라도 true 면 true 출력, 두개다 false면 false출력
System.out.println(b1 || b2); -> b1 이 true이므로 결과는 true 이다.

배타적 논리합 (^) -> 피연산자가 서로 다른 값일 경우만 연산 결과가 true 이다. _서로가 달라야 true
System.out.println(b1 ^ b2); -> b1은 true, b2는 false로 서로 다르므로 결과는 true 이다.
System.out.println(b1 ^ b3); -> b1, b3 모두 true로 서로 같다. 결과는false 이다

논리 부정 (!) -> 피연산자의 논리값을 바꾼다. true는 false로 false는 true로 바꾼다._결과값을 반대로 바꿈, ! 앞에 붙음
System.out.println(!b1); -> b1 이 true 이므로 결과는 false 이다.
System.out.println(!b2); -> b1 이 false 이므로 결과는 true 이다.


삼항 연산자

조건식 ? 피연산자1 : 피연산자2
조건식의 연산결과가 true 이면, 결과는 피연산자 1이고,
조건식의 연산결과가 false 이면 결과는 피연산자2를 출력
피연산자1, 피연산자2 에는 주로 값이 오지만, 경우에 따라 연산식이 올 수 있다.

ex)
int b1 = (5>4) ? 50 : 40;
//조건식이 true이므로 b1은 50이 된다.
int b1 = (5<4) ? 50 : 40;
//조건식이 true이므로 b1은 40이 된다.
()안의 값이 참이라면 ? 뒤에 첫번쨰 값을 나타내고, 거짓이라면 두번째 값을 나타냄 (:뒤에값)

  • 삼항 연산자가 익숙하지 않다면, if문으로 바꾸어 이용해도 좋다.
    ex) if 활용
    int b2 = 0;
    if(5 > 4){
    b2 = 50;
    }else{
    b2 = 40;
    } 출력값 -> 40

예제 ) 변수 hour에는 현재 시각이 들었습니다.[1] hour가 12보다 작으면 "오전", 그렇지 않으면 "오후"라는 값을 ampm에 저장하도록 빈칸을 채워주세요.
public class Main {
public static void main(String[] args) {
int hour = 14; // 예시로 주어진 시간 (14시 = 오후)
String ampm;
ampm = hour < 12 ? "오전" : "오후"
// ampm = hour >= 12 ? "오후" : "오전";_이렇게도 가능함
System.out.println("지금시간은 " + hour + "시이고, " + ampm + "입니다.");
}
}
출력값 -> 지금시간은 12시이고, 오후입니다.


switch 문
switch문은 어떤 변수의 값에 따라서 문장을 실행할 수 있도록 하는 제어문이다.
switch문에서 사용하는 키워드는 switch, case, default, break 이다.

switch문

switch(변수){
    case 값1 : 
        실행문; 
        break;
    case 값2 : 
        실행문; 
        break;  
    default;    
}

ex)
int value = 1;.

switch(value){
case 1:
System.out.println("1");
case 2:
System.out.println("2");
case 3 :
System.out.println("3");
default :
System.out.println("그 외의 숫자");

    }

출력값 ->
1
2
3
그 외의 숫자

value가 1일 경우 1일 출력되고 switch문장을 빠져나가는 것이 아니라
1,2,3, 그외의숫자가 연속해서 실행된다 원하는숫자만 출력하기 위해서는 break가 필요하다

switch(value){
case 1:
System.out.println("1");
break;
case 2:
System.out.println("2");
break;
case 3 :
System.out.println("3");
break;
default :
System.out.println("그 외의 숫자");
출력값 -> 1

break를 사용하면 value의 값이 1일 경우 1을 출력하고, 2일 경우는 2를 출력하고, 3일 경우는 3을 출력하고, 그 외에는 그 외의 숫자가 출력된다.

break문장이 있을 경우와 없을 경우를 확실하게 구분할 수 있어야 합니다.

참고 하세요

JDK7이전에는 switch다음 괄호안에 정수타입의 변수만 올 수 있었습니다.
그런데 JDK7부터는 switch다음 괄호안에 문자열 타입의 변수도 올 수 있습니다.

String str = "A";

switch(str){
    case "A": 
        System.out.println("1");
    case "B":
        System.out.println("2");
    case "C" :
        System.out.println("3");
    default :
        System.out.println("그 외의 숫자");
}

출력값 ->
1
2
3
그 외의 숫자

문자열의 값에 따라서 case블록의 내용이 출력되는 것을 알 수 있습니다.


반복문
반복문은 실행문을 반복적으로 실행해야 할 때 사용 한다.

반복문의 종류는 while문, do while문, for문 이 있다.

while문
조건문의 실행 결과가 true일 동안 반복해서 실행한다.
while(조건문){
실행문;
}

ex )
10번 반복하면서 0부터 9까지 출력하는 반복문

int i = 0;  //while에서 사용할 변수를 선언

while(i < 10){
    System.out.println(i); _조건을 넣지 않으면 무한루프됨
    i++; //조건문을 원하는 만큼만 반복하고 빠져나가기 위한 부분 
}

출력값 -> 0,1,2,3,4,5,6,7,8,9 출력하고 정지_0부터 시작함

1부터 100까지의 합을 while문을 이용하여 구현해 보도록 하겠습니다.

public class WhileExam2 {
    public static void main(String[] args) {

        int total = 0; // i의 값을 누적할 변수를 선언합니다.
        int i = 1;
        while(i <= 100){
            total = total + i;
            i++;
        }
System.out.println(total ); 
    }
}

출력값 -> 5050

응용 예제
다음은 while문을 이용해 1부터 10까지 숫자를 출력하는 코드입니다.
여섯 번째 줄에 if문을 추가해서 i가 짝수일 때만[1] i를 출력하게 코드를 바꿔보세요.
while(조건문1){
if(조건문2){
실행문x;
}
}

정답 ) i가 짝수인지 검사하려면 i를 2로 나눈 나머지가 0인지 검사하면 됩니다.
여섯 번째 줄에 if(i % 2 == 0)을 입력하고 코드를 실행해보세요.

public class WhileExam{
public static void main(String[] args){
int i = 1;
while(i < 11){
// if 문을 추가해, i가 짝수일때만 i를 출력하는 코드를 짜보세요.
if(i % 2 == 0 ){
System.out.println(i);

        }
        i++; 
    }
}

}


do-while문
while문의 경우 조건이 만족하지 않는다면 한번도 실행되지 않지만
do while문의 경우는 무조건 한번은 실행되는 반복문이다.
do{
실행문;반복할 문장들, 무조건 한번은 반복
}while(조건문);
조건이 만족해야 반복함

ex)
import java.util.Scanner;
public class DoWhileExam {
public static void main(String[] args) {

        int value = 0;
 Scanner scan = new Scanner(System.in);
        do{
            value = scan.nextInt(); // Scanner클래스를 이용하여 키보드로 부터 숫자값을 입력받습니다.
            System.out.println("입력받은 수 : " + value);  

        }while(value != 10);  // 입력받은 값이 10이 아닐 경우에는 계속 반복합니다.

        System.out.println("반복문 종료");
    }
}
  • Scanner는 java.util 패키지에 있는 클래스로써 키보드로 부터 값을 입력받는다던지 할 때 유용하게 사용할 수 있는 클래스입니다.
    Scanner scan = new Scanner(System.in);
    위 처럼 작성하시면 키보드로부터 값을 입력받을 수 있는 Scanner객체가 생성됩니다. _콘솔창에 직접 입력가능
    value = scan.nextInt(); // Scanner클래스를 이용하여 키보드로 부터 숫자값을 입력받습니다.

출력값 -> 숫자 10 안에 있는 숫자를 입력하면 계속반복, 10부터는 반복종료됨
1입력 시
입력받은 수 : 1
2입력 시
입력받은 수 : 2
3입력 시
입력받은 수 : 3
10입력 시
입력받은 수 : 10
반복문 종료


for 문
for(int i = 1; i <= 100; i++)
for반복문은 for 구문 자체에 변수초기화, 조건식, 증감식이 한줄에 모두 있다.
1. 초기화식은 최초 한 번만 수행합니다. int i = 1
2. 조건식을 수행해서 수행결과가 false라면 for 반복문을 빠져 나갑니다. i <= 100
3. 수행 결과가 true라면 실행문을 수행한다. i <= 100
4. 증감식을 수행한다. i++
5. 2번부터 4번까지 반복적으로 수행한다. i <= 100; i++

for(초기화식; 조건식; 증감식){
실행문;
실행문;
}

ex) for문을 이용하여 1부터 100까지의 합을 구하는 프로그램

int total = 0; //1부터 100까지 합한 결과값을 담기위한 변수 선언 
for(int i = 1; i <= 100; i++){ //1부터 100까지 반복하기 위한 for 반복문 
    total = total + i; // 1부터 100까지 반복해서 total 변수에 값을 누적  
}
System.out.println(total);  //결과값 출력 -> 5050

ex) for문을 이용하여 1부터 100까지의 짝수의 합을 구하는 프로그램

  int total = 0;
        for(int i = 1; i <= 100; i++){
            if(i % 2 != 0){  // 2로 나눈 나머지가 0이 아니라는것은 홀수를 의미한다.  
                continue; // 홀수일 경우 total = total + i; 문장 (아래쪽 구문)이 실행되지 않고 다시 위에구문으로 올라감, 결과적으로 짝수만 더해준다. 
            }
            total = total + i;
        }
        System.out.println(total);

//결과값 출력 -> 2250

ex) for문을 이용하여 1부터 100까지의 짝수의 합을 구하는 프로그램 _ 50까지만 구할꺼라면 ?

  int total = 0;
        for(int i = 1; i <= 100; i++){
            total = total + i;
    if (i == 50){
	break; // break 하는순간 그 반복구문에서 빠져나옴 , total 밑에 if 가있으니까 50까지는 진행하고 break 됨
	}
        }
        System.out.println(total);

//결과값 출력 -> 1275


배열 만들기

1차원 배열
배열은 같은 데이터 타입을 가진 연속된 메모리 공간으로 이루어진 자료구조이다.
같은 데이터 타입을 가진 여러개의 변수가 필요할 때 사용한다.
변수가 많아서 하나하나 선언하기 힘들때 사용

배열 생성 방법 [] _대괄호를 만들고 변수명지정 ,
배열생성시 반드시 new 로 만들어야함, []안에 몇개의 배열을 담을지 지정후 선언,
처음 지정한 값은 변하지 않는다

정수를 100개 저장 할 수 있는 배열을 생성 하는 방법
int[] array1 = new int[100];

배열에 값을 저장하는 방법 _ 배열의 이름+[]안에 들어가는 숫자 몇번째에 정보를 넣을껀지 0부터 시작 =index 라고 함
array1[0] = 50;
array1[10] = 100;
array1[2] = 3;
array1[30] = 10;
자바에서 배열의 인덱스는 0번 부터 사용한다. 100개짜리 배열은 0부터 99까지의 인덱스를 가지게 된다.
배열인덱스 0번부터 3번까지 차례로 1~99 값을 저장한다.

선언과 동시에 초기화하는 방법
int[] array2 = new int[]{1,2,3,4,5};
[]안에 선언하지 않고 값을 담으면 int 값을 5개저장 할 수 있는 배열이며,
해당 배열에는 1,2,3,4,5가 순서대로 저장되게 된다.
int[] array2 = {1,2,3,4,5};
new라는 코드 없이 값을 넣어서도 사용가능

여기까지 1차원배열 이다

배열에 저장된 값을 꺼내서 사용하는 방법
System.out.println(array1[10]);
//array1 이 참조하는 배열의 10번 인덱스에 해당하는 값 100가 콘솔에 출력된다.

int value = array1[2]; 
System.out.println(value); 
//array1 이 참조하는 배열의 2번 인덱스에 해당하는 값 3을 꺼내서 int형 변수 value에 담는다. 

for 반복문을 이용해서 배열 사용하기

  • 배열에 0번째 인덱스 부터 시작해서 1부터 100까지 넣기
  1. 정수를100개 저장 할 수 있는 배열을 생성
    int [] iarray = new int[100];

  2. 배열에 1부터 100까지 값넣기
    //배열에 값을 반복적으로 넣어야 하므로, for 반복문을 이용한다.
    //배열의 인덱스는 0부터 시작하므로, 0부터 배열의 길이보다 하나 작을때까지 반복하면 배열의 크기만큼 반복할 수 있다.
    //배열의 인덱스는 0부터인데 넣고 싶은 값은 1부터 사용해야하므로, 인덱스에 1을 더해준 값을 넣어준다.

    for(int i = 0; i < iarray.length; i++){ 
            iarray[i] = i + 1;  _+1해서 1부터 100까지 
    }

    2-1. 배열의 길이를 알아내는 방법
    변수의이름.length
    //배열을 참조하는 레퍼런스 변수. length 하면 해당 배열의 길이를 리턴한다.
    조건에 i<100 라고 적지 않는 이유는 배열의 크기가 다를경우(바뀔경우) 조건을 계속 바꿔줘야하기 때문에 자동으로 배열의 크기를 알아서 출력할 수 있는 iarray.length 를 사용
    System.out.println(iarray.length); -> 100출력

  1. 배열에 저장된 값을 모두 더해주기_꺼내기
    //값을 누적하기위한 변수는 반복문 밖에서 선언한다.
    // 배열의 크기만큼 반복한다.
    //반복문 밖에서 선언한 변수에 반복적으로 값을 누적한다.
    //배열에 들어있는 모든 값 누적한 변수를 출력한다.
  • 변수는 선언하는 지점이 어디냐에 따라서 그변수를 사용할수 있는 범위가 달라진다 = 변수의 스코프(Scope) : 해당변수의 유효범위, 변수가 선언된 지점의 괄호안이 그변수의 스코프임
    변수는 선언될 때 생성되었다가 해당블럭이 끝날때 소멸 합니다 .
int sum = 0; 
for(int i = 0; i< iarray.length; i++){  
     sum = sum + iarray[i];
}
System.out.println(sum); -> 출력값 5050
  • for문에 선언된 i 가 똑같이 선언되어도 문제가 되지 않았던 이유는 위의 for 문이 시작되었을 때 선언 되었다가 for문이 마무리되면서 끝났기 때문에 밑에 for문을 한번 더 사용해도 문제가 되지 않음
    for 블럭 안에서 사용된 변수는 for 안에서만 사용할수 있음 , 사용해야하는 sum의 위치가 어디에 들어가야할지 잘 설정해야함

    for(int i = 0; i< iarray.length; i++){  
         sum = sum+1; 

    }

  • 이렇게 넣으면 반복 될때마다 새롭게 선언이 되기 때문에 값이 저장되지 않는다. 안에 선언하면 안됨
    for 블럭 밖에다 sum을 하나 선언 해주고 배열안에 들어 있는 값을 하나씩 꺼내서 계속 더해줘야하기 때문

    sum = iarray[i];
    }
    System.out.println(sum); -> 출력값 100

더하지 않고 값만 넣어주고 있어서 마지막 값인 100만 출력됨ㅋㅋ


2차원 배열 = 배열의 배열이다.

2차원 배열 생성 방법
정수를 4개씩 담을 수 있는 배열이 3개 생성된다.
= 3개의 정수를 담을수 있는 그릇이 3개 그안에 들어갈수 있는 칸은 4칸 표로하면 3*4
int[][] array4 = new int[3][4];

2차원 배열에 값을 저장하는 방법
만약 array4[1] = 10 ;
이렇게 사용하면 오류!!값을 넣을려면 두번째 값도 같이 넣어야함
array4[1] 은 또 다른 1차원 배열을 가리킬 수 있는 참조형 변수이기 때문에 값을 담을수는 없다.
=실제 int값을 담는게 아니라 int배열을 가리킬수 있는 참조형변수이기때문에 정수값을 담을수 없음
array4[0][1] = 10;
이렇게 적어야 0번째 변수 안에 1번째에 값이 들어감

가변크기의 2차원 배열을 생성하는 방법 _크기가 다른 배열을 생성할수도있음
int[][] array5 = new int[3][];
위와 같이 선언하면 array5는 3개짜리 배열을 참조한다. 3개짜리 배열은 아직 참조하는 배열이 없다는 것을 의미. = 3개의 해드 몸은 미정 표는 3 * ? , 따로 선언 해줘야함

array5[0] = new int[1]; 
array5[1] = new int[2]; 
array5[2] = new int[3]; 

//정수를 하나 담을 수 있는 배열을 생성해서 array5 의 0 번째 인덱스가 참조한다. 31
//정수를 두개 담을 수 있는 배열을 생성해서 array5 의 1 번째 인덱스가 참조한다. 3
2
//정수를 세개 담을 수 있는 배열을 생성해서 array5 의 2 번째 인덱스가 참조한다. 3*3
_ 이런식으로 계단식모양처럼 도 만들수 있음

선언과 동시에 초기화하는 방법
int[][] array6 = {{1}, {2,3}, {4,5,6}};
//위와 같이 선언할 경우 array6[0][0] 는 1이다. array6[1][0]은 2이다.
요런모양이 됨
0 1
1 2 3
2 4 5 6


for each
자바 1.5 버전부터 추가된 for each 구문이 추가 되었음
자바에서는 for라고 많이 쓰지만 다른 프로그램에서는 for each 를 쓰기 때문에 자바에서도 자주씀
콜론(:)을 구분으로 두가지의 정보만 넣어주면 됨
for ( 타입 값을 받아 줄 변수명 : 출력하고 싶은 자료구조)

int[] iarr = {10,20,30,40,50};

for(int i = 0; i < iarr.length; i++){
int value = iarr[i] _값을 꺼내서 담아줌
    System.out.println(value);  -> 출력값 : 10,20,30,40,50 다 나옴 
}

=> for each 구문으로 변경

for (int value : iarr ){ -> int로 받을거고, 변수명은 아무거나 넣어도 됨 , 값을 꺼내서 담아주는 역활을 알아서 함, 배열이나 자료 구조를 몰라도 가능
System.out.println(value); } -> 출력값 : 10,20,30,40,50 다 나옴


profile
개발자 준비생😂

0개의 댓글