-
[JAVA] 제어 구조 if 와 whileJAVA 2021. 2. 25. 17:32
이 글은 유투브 뉴렉처님의 강의를 참고하여 만든 내용입니다.
내용 기술은 제 글을 참고하기보다는
뉴렉처www.youtube.com/channel/UC5-ixpj8DioZqmrasj6Ihpw 님의 강의를 참고해주세요!
IF문과 WHILE문의 차이란?
프로그래머는 흐름을 만드는 사람이고 흐름을 제어하는 사람이다.
제어구조를 잘 이해하고 만드는 것이 프로그래밍을 잘하는 사람입니다.
뉴렉처님의 말씀입니다.
오늘은 언제 if와 while을 언제쓰는지 차이점을 알아보겠습니다 ㅎㅎ
아래와 같은 코드가 있다고 합니다!
package ex07.control1; import java.util.Scanner; public class Program { public static void main(String[] args) { int kor1, kor2, kor3; int total; float avg; Scanner scan = new Scanner(System.in); kor1 = 0; kor2 = 0; kor3 = 0; System.out.println("┌───────────────────────────┐"); System.out.println("│ 성적 입력 │"); System.out.println("└───────────────────────────┘"); System.out.println("국어1:"); kor1 = scan.nextInt(); System.out.println("국어2:"); kor2 = scan.nextInt(); System.out.println("국어3:"); kor3 = scan.nextInt(); //-----성적 출력 부분------------------- total = kor1 + kor2 + kor3; avg = total / 3.0f; System.out.println("┌───────────────────────────┐"); System.out.println("│ 성적 출력 │ "); System.out.println("└───────────────────────────┘"); System.out.printf("\t국어1: %3d\n", kor1); System.out.printf("\t국어2: %3d\n", kor2); System.out.printf("\t국어3: %3d\n", kor3); System.out.printf("\t총점: %3d\n", total); System.out.printf("\t평균: %6.2f\n", avg); System.out.printf("------------------------\n"); } } }
이 코드의 문제점은
1. 시험 점수의 범위를 0 ~ 100 사이의 값이 아닌 다른 값들 또한 계산해버린다.
2. 한 번만 사용하면 끝이다! 예를 들어 반복해서 결과를 알고 싶다면 실행을 계속 눌러야하는 번거러움이 있다.
위 2가지 문제의 해결책으로 if와 while을 이용해서 문제점을 개선해 나아가보겠습니다.
2번의 문제점은 while을 이용해 비교적 쉽게 해결가능합니다.
while(true)
를 사용해 무한루프를 돌려주면 끝! 와아~ 해결!
1번의 문제점은 저의 머리속에는 if문을 이용해 제어하면 되겠네!! 라는 생각이 들었습니다.
그래서 아래와 같은 조건을 붙였습니다! 하지만 이것 또한 문제점이 있었으니...
if(!(0<=kor1&& kor1<=100)) if((0>kor1 || kor1 > 100))
그건 바로..
위와 같이 국어1 점수를 1000이라고 입력을 했음에도 불구하고, 한 번밖에 오류를 잡아주지 않는다는 것입니다ㅜㅜ
이것이 이번 포스트에서 알고가야 할 if와 while의 차이입니다!여러분!!
If문을 쓴다면 한번 밖에 걸러지지 않지만, while을 쓴다면 조건이 만족할때 까지 여러번, 평생! 스스로 돌게됩니다.
아닛! 그러면 if문을 이용해서는 while처럼 이용할 수 없는건가요?? 라는 질문이 들어올 수 도 있겠네요! 후훗
if문을 while처럼 사용하고 싶다면..! 방법이 있습니다!
if((0>kor1 || kor1 > 100)){ System.out.print("성적범위(1~100)을 벗어났습니다.");
위와 같은 코드를 무한번 써주시면 됩니다!! 하하하하하하핳하하흐후쿠쿠쿠쿠쿸쿠ㅜㅋ쿸쿠
이런 방법은 안쓰시겠죠?? 네네 하지마세요~ w.h.i.l.e 을 쓰시면 됩니다!
요로케 만들어진 최종적인 코드는??
package ex07.control1; import java.util.Scanner; public class Program { public static void main(String[] args) { int kor1, kor2, kor3; int total; float avg; Scanner scan = new Scanner(System.in); kor1 = 0; kor2 = 0; kor3 = 0; while(true) { //-----------------성적입력부분=----- System.out.println("┌───────────────────────────┐"); System.out.println("│ 성적 입력 │"); System.out.println("└───────────────────────────┘"); System.out.println("국어1:"); kor1 = scan.nextInt(); //if(!(0<=kor1&& kor1<=100)) //if((0>kor1 || kor1>100)) { while((kor1<0 || 100<kor1)){ System.out.println("성적범위(0~100)를 벗어났습니다."); System.out.println("국어1:"); kor1 = scan.nextInt(); } System.out.println("국어2:"); kor2 = scan.nextInt(); System.out.println("국어3:"); kor3 = scan.nextInt(); //-----성적 출력 부분------------------- total = kor1 + kor2 + kor3; avg = total / 3.0f; System.out.println("┌───────────────────────────┐"); System.out.println("│ 성적 출력 │"); System.out.println("└───────────────────────────┘"); System.out.printf("\t국어1: %3d\n", kor1); System.out.printf("\t국어2: %3d\n", kor2); System.out.printf("\t국어3: %3d\n", kor3); System.out.printf("\t총점: %3d\n", total); System.out.printf("\t평균: %6.2f\n", avg); System.out.printf("------------------------\n"); } } }
짠! 이렇게 됩니다
위의 코드를 보고 조금은 비효율적이라고 생각되는게 있으신가요??
위에 대한 답은 뉴렉처님 자바강의 28강에서 보시면 됩니다!
그럼 안녕!
'JAVA' 카테고리의 다른 글
[JAVA]구조적 프로그래밍(4) (0) 2021.03.03 [JAVA]구조적 프로그래밍(3) (0) 2021.03.03 [JAVA]구조적 프로그래밍(2) (0) 2021.03.02 [JAVA]구조적 프로그래밍(1) (0) 2021.03.02 [JAVA] 배열의 중요성 (0) 2021.02.26