-
드디어 한다. 대망의 별찍기.
java의 꽃은 반복문이라고 할 정도로 반복문에 대한 중요성을 익히 들어왔다.
그리고 정말 이전에 배운 것들보다 복잡해서 몇 번이고 다시 강의를 돌려봤다.
반복문: 프로그램 수행 흐름을 바꾸는 역할을 하는 제어문 중 하나로 특정 문장들을 반복해서 수행하도록 함
for(초기식; 조건식; 증감식) {수행될 문장;}
- while(조건식) {수행될 문장; [증감식 or 분기문];}
무한 루프의 경우, 조건 값을 항상 true로 놓을 것- do{수행될 문장; [증감식 or 분기문];} while(조건식);
do안의 내용 먼저 실행하고 조건식 확인 후 true면 문장 수행, false면 종료.
조건문이 true가 아니더라도 무조건 한 번 이상 수행- for(초기값1; 조건식1; 증감식1;) {
수행될 문장1;
for(초기값2; 조건식2; 증감식1) {
수행될 문장2; }
수행될 문장3; }
중첩 반복문
1) for문에 진입후 문장1 실행
2) 두번째 for문에 진입해 조건식2가 false가 될 때까지 문장2 실행
3) 조건식2가 false가 되면 문장3 수행 후 조건식1로 돌아오기
4) 조건식1이 true면 반복, false면 종료분기문
- break: 자신이 포함된 가장 가까운 반복문을 빠져나가는 구문
- continue: 반복문 내에서만 사용 가능. 아래 부분 실행하지 않고 반복문 재실행. for문은 증감식, while문은 조건식으로 이동
※문제. 이중 for문을 이용하여 4줄 짜리 피라미드 모양 별 찍기/ 입력 받은 홀수 줄만큼 마름모 모양 별 찍기
1234567891011public void method1() {for(int i = 0; i < 4; i++) {for(int j = 3; j > i; j--) {System.out.print(" ");}for(int j = 0; j < i*2+1; j++) {System.out.print("*");}System.out.println();}}cs 차근차근 들어가보겠다.
더보기일단 첫번째 for문으로 4줄을 출력하고 종료하는 코드를 작성한다.
int i = 0; i< 4; i++ ▶ i는 0부터 시작해서 1씩 증가하고, 4보다 작을 때까지만 실행. 즉, 0~3까지만 실행
이때, 별은 1, 3, 5, 7로 증가한다. 피라미드 모양으로 출력되려면 별이 1개 찍힐 때 띄어쓰기는 총 3회 진행되어야 한다. 즉, (공백)(공백)(공백)(별) 모양으로 진행되어야 한다는 것.
이를 쭉 정리하면 첫번째 턴은 (공백)(공백)(공백)(별)/ 두번째 턴은 (공백)(공백)(별)(별)(별)/ 세번째 턴은 (공백)(별)(별)(별)(별)(별)/ 마지막 턴은 (별)(별)(별)(별)(별)(별)(별)
int j = 3; j >i; j-- ▶ j는 3부터 시작해서 1씩 감소하고, i보다 작을 때까지만 " "실행.
int j = 0; j < i*2+1; j++ ▶반대로 "*"은 j가 0부터 시작해서 i*2+1보다 작을 때까지 1씩 증가(홀수로 출력되니까)
이때, 안의 for문들은 모두 출력을 print로 해서 띄어쓰기 없이 출력하고, 한 차례가 끝나면 println으로 바깥에서 한번 출력하여 줄바꿈을 해준다.
복잡해 보이지만 첫번째 for문으로 원하는 줄을 출력하고, 이에 맞춰 안의 for문들을 공백을 출력할 때와 별을 출력할 때로 나누어 식을 작성하면 된다.
1234567891011121314151617181920212223public void method2() {Scanner sc = new Scanner(System.in);System.out.println("홀수를 입력하시오: ");int num = sc.nextInt();for(int i=0; i <num/2; i++) {for(int j = num/2; j >i; j--) {System.out.print(" ");}for(int j = 0; j < i*2+1; j++) {System.out.print("*");}System.out.println();}for(int i = num/2; i >=0; i--) {for(int j = num/2; j >i; j--) {System.out.print(" ");}for(int j = 0; j < i*2+1; j++) {System.out.print("*");}System.out.println();}cs 두번째의 경우, 홀수를 Scanner로 입력 받고, 마름모꼴을 두 개로 나누어 삼각형과 역삼각형 모양으로 별을 찍어야 한다. 즉, 두 개의 큰 for문이 있고, 그 안에 중첩으로 각각 2개가 더 있도록 하는 것.
더보기Scanner로 int를 입력받아 num으로 선언.
홀수를 입력했을 때, i를 반으로 나누어 i=0인 조건문과 i= num/2인 조건문을 가진 for문을 각각 작성한다.
i=0일 때, i가 num/2보다 작을 때까지 1씩 증가하는 for문 안에 홀수로 별을 찍는다. 앞서 진행한 문제와 동일하게 진행.
응용 문제는 글이 길어지니 다음에.
'혼자 있는 방 > Java' 카테고리의 다른 글
Array(배열) (0) 2021.05.04 Repetitive(반복문) 2 (0) 2021.05.02 Conditional(조건문) (0) 2021.04.30 Operator(연산자) (0) 2021.04.28 변수(Variable) (0) 2021.04.24 댓글