** for, 중첩(다중)for
* for()
* 다중 for문법
** 실습1 **
/* 1
문제)지난주 마지막 문제를 참고하여 아래와 같이 출력하는 프로그램 작성
입력예)4
출력예)[1,1]
[2,2]
[3,3]
[4,4]
단, 공백은 printf("%5c", ' '); //print(" ")
*/
int i, j, num;
num = scn.nextInt();
for(i = 1; i <= num; i++)
{
for(j = 1; j <= num; j++)
{
if(i == j)
{
System.out.printf("[%d,%d]", i, j);
//System.out.print("[" + i + "," + j + "]");
}
else
{
System.out.print(" ");
}
}
System.out.println();
}
** 실습2 **
/* 2
문제)구구단을 입력 받아 해당 단 일부를 출력하는 프로그램
단, 입력변수는 a, b를 사용하고 a는 작은단, b는 큰단으로 해서 a부터 b까지 출력.
출력결과시 (%d * %d = %2d \t)
입력예)5 2
출력예)2 * 1 = 2 2 * 2 = 4 2 * 3 = 6 2 * 4 = 8 2 * 5 = 10
...
5 * 1 = 5 5 * 2 = 10 5 * 3 = 15 5 * 4 = 20 5 * 5 = 25
*/
int a, b, i, j, tmp;
a = scn.nextInt();
b = scn.nextInt();
if(a > b) // a를 작은 값으로 바꾸는 과정
{
tmp = a;
a = b;
b = tmp;
}
for(i = a ; i <= b ; i++ ) //// i - 행 (에서 바뀌지 않는 값)
{
for(j = 1 ; j <= 5 ; j++) // j - 열 (에서 바뀌지 않는 값)
{
System.out.printf("%d * %d = %2d \t" ,i ,j, i * j ); // i는 열이고, j는 행이라고 생각하면 좋다.
}
System.out.println();
}
** 반복제어문(소괄호 안에 조건식이 참 일 동안 반복) **
- for / 중첩for / while / do~while / 중첩(다중)while / 무한루프
* while
- 문법
while(조건식)
{
반복 실행문
증감식;
}
- 사용법
int a =1; // while은 초기값을 먼저 세팅해야한다.
whlie(a <= 10)
{
System.out.println(a);
a++;
}
* do ~while (// 최소 한번은 실행한다.)
- 문법
do
{
반복 실행문;
증감식;
} while(조건식);
* 무한루프
- while(true) / while(1 == 1)
- for (;;) : 조건식이 존재하지않으면 무한루프
** 이동제어문 ** ( break)
- break / continue / return
* break continue
- break : 본인을 감싸고있는 가장 가까운 반복문()을 탈출함
- continue : continue이후에 작성된 코드 실행중단, 반복문 자체를 종료시키지 않는다. ( whlie 조건문으로 for문의 증감식으로 돌아감)
- Tip : { }안에있는것은 실행이되어야함으로 break와 continue는 { }안에서 맨 마지막에 써야 오류가 뜨지 않는다.
* 예제 *
//while(반복문)
int a = 0;
while(a <= 10)
{
System.out.println(a);
a++;
//a++없으면 무한으로 실행된다. | a++이 println 앞으로가면 11까지 출력된다.
}
// 위의 whlie문을 for문으로 바꿔보기.
for(a = 1 ; a <= 10 ; a++)
{
System.out.println(a);
}
** 실습3 **
/* 3
문제)알파벳 'A'부터 'Z'까지 출력하는 프로그램 작성
출력예)ABCDEFGHIJKLNMOPRSTUVWXYZ
단, 변수는 alpha = 'A' 초기 대입후 사용
*/
char alpha = 'A'; //char는 ''(작은따옴표)
while(alpha <= 'Z')
{
System.out.println(alpha);
alpha++;
}
** 실습4 **
/* 4
문제)1이상 100이하의 정수를 입력받아 whlie문을 이용하여 1부터 입력받은 정수까지의
합을 구하여 출력하는 프로그램 작성.
입력예)10
출력예)55
*/
int i, num, sum;
i = 1;
sum = 0;
num = scn.nextInt();
while(i <= num)
{
sum += i; //누적변수는 처음에 0으로 설정해야한다.
i++;
}
System.out.println(sum);
** 실습5 **
/* 5
문제)점수를 입력받아 80점 이상이면 합격메세지를 그렇지 않으면 불합격 메세지를 출력하는
작업을 반복하다가 0~100 이외의 점수가 입력되면 종료하는 프로그램 작성.
단, while문에 조건식에 비교와 논리연산자 사용. (break 사용안함)
입출력예)점수를 입력하세요.>50
죄송합니다. 불합격입니다.
점수를 입력하세요.>95
축하합니다. 합격입니다.
점수를 입력하세요.>101
*/
int score;
System.out.print("점수를 입력하세요.>");
score = scn.nextInt();
while(score >= 0 && score <= 100)
{
if(score >= 80)
{
System.out.println("축하합니다. 합격입니다.");
}
else
{
System.out.println("죄송합니다. 불합격입니다.");
}
System.out.print("점수를 입력하세요.>");
score = scn.nextInt();
}
** 실습6 **
/* 6
문제)위의 문제를 while 무한루프를 이용하여 작성
단, while(true) -> break; (continue) -> for(;;)
*/
int score;
while(true)
{
System.out.print("점수를 입력하세요.>");
score = scn.nextInt();
if (score < 0 || score > 100)
{
break; // break를 감싸고있는 첫번째 반복문(while)을 빠져나간다.
}
if(score >= 80)
{
System.out.println("축하합니다. 합격입니다.");
}
else
{
System.out.println("죄송합니다. 불합격입니다.");
}
}
** 실습7 **
/* 7
문제)1부터 10까지 반복하면서 홀수만 출력하는 프로그램
단, continue문 사용
출력예)1 3 5 7 9
*/
int num = 0;
while(num < 10)
{
num++;
if(num % 2 == 0)
{
continue;
}
System.out.print(num + " ");
}
// 위와 동일한 조건으로 for문 이용
int num;
for(num = 1 ; num <= 10 ; num++)
{
if(num % 2 == 0)
continue;
System.out.print(num + " ");
}
** 실습8 **
/* 8
문제)정수를 계속 입력받다가 0이 입력되면 0을 제외하고 이전에 입력된 자료의 수와 합계,
평균을 출력하는 프로그램
단, while 무한루프로 사용하고 평균은 소수 둘째자리까지 출력
입력예)15 88 97 0
출력예)입력된 자료의 개수는 = 3개
입력된 자료의 합계 = 200
입력된 자료의 평균 = 66.67
*/
int a;
int sum = 0, count = 0;
double avg = 0.0;
while(true)
{
a = scn.nextInt();
if(a == 0)
break;
sum += a;
count++;
}
avg = (double)sum / count;
System.out.printf("입력된 자료는 개수는 = %d개\n", count);
System.out.println("입력된 자료의 합계 = " + sum);
System.out.printf("입력된 자료의 평균 = %.2f \n", avg);
//-----------------------------------------------------------
while(true)
{
a = scn.nextInt();
if(a == 0)
avg = (double)sum / count;
System.out.printf("입력된 자료는 개수는 = %d개\n", count);
System.out.println("입력된 자료의 합계 = " + sum);
System.out.printf("입력된 자료의 평균 = %.2f \n", avg);
break;
count++;
sum += a;
}
** 실습9 **
/* 9
문제)정수를 계속 입력받다가 0 이 입력되면 0을 제외하고 입력된 수 중 홀수의
합계와 평균을 출력하는 프로그램
단, continue와, break문 사용
입력예)5 8 17 6 31 0
출력예)홀수의 합 : 53
홀수의 평균 : 17
*/
int num;
int sum = 0, avg = 0, cnt = 0;
while(true)
{
num = scn.nextInt();
if(num == 0)
break;
if(num % 2 == 0)
continue;
sum += num;
cnt++;
}
avg = sum / cnt;
System.out.println("홀수의 합 : " + sum);
System.out.println("홀수의 평균 : " + avg);
** do~while문 **
* 예제
//do~whlie 문
int a = 1;
do
{
System.out.println(a + "번째 출력");
a++;
}while(a <= 10);
//----------------------------------------------------------------------------
/*
문제)위 문제를 while문 무한루프를 사용하여 프로그램작성
*/
int a = 1;
while(true)
{
System.out.println(a + "번째 출력");
a++;
if(a > 10) break;
}
//----------------------------------------------------------------------------
// 위 문제를 while문에 조건식을 이용하여 프로그램작성
int a = 1;
while(a <= 10)
{
System.out.println(a + "번째 출력.");
a++;
}
** 실습10 **
/* 10
문제)정수를 계속 입력 받다가 0이 입력되면 입력받은 수 중 홀수의 합과 평균을
출력하는 프로그램 작성.
단, do~while문을 사용하고 break, continue는 사용안함.
입력예)5 8 17 6 31 0
출력예)홀수의 합 : 53
홀수의 평균 : 17
*/
int num, sum = 0, avg, cnt = 0;
num = scn.nextInt();
do {
num = scn.nextInt();
if(num % 2 == 1)
{
sum += num;
cnt++;
}
}while(num != 0);
avg = sum / cnt;
System.out.println("홀수의 합 : " + sum);
System.out.println("홀수의 평균 : " + avg);
** 실습11 **
/*
문제)아래와 같이 메세지를 출력하고 숫자를 입력받아 선택한 번호에 해당하는 메세지를
출력하는 작업을 반복하다가 4가 입력되면 메세지 출력 후 종료하는 프로그램
단, do~while문 사용하고 1~4 이외의 수가 입력되면 "잘못 입력하셨습니다." 라고 출력
입.출력예)1.입력하기
2.출력하기
3.삭제하기
4.끝내기
작업할 번호를 선택하세요.>2(4)
출력하기를 선택하셨습니다. (끝내기를 선택하셨습니다.)
입.출력예)1.입력하기
2.출력하기
3.삭제하기
4.끝내기
작업할 번호를 선택하세요.>4
잘못 입력되셨습니다. (다시 반복)
*/
int a;
do
{
System.out.println("1.입력하기");
System.out.println("2.출력하기");
System.out.println("3.삭제하기");
System.out.println("4.끝내기");
System.out.print("작업할 번호를 선택하세요.>");
a = scn.nextInt();
System.out.println();
if(a == 1)
{
System.out.println("입력하기를 선택하셨습니다.");
}
else if(a == 2)
{
System.out.println("출력하기를 선택하셨습니다.");
}
else if(a == 3)
{
System.out.println("삭제하기를 선택하셨습니다.");
}
else if (a == 4)
{
System.out.println("끝내기를 선택하셨습니다.");
break;
}
else
{
System.out.println("잘못 입력하셨습니다.");
}
}while(a != 4);
int a;
do
{
System.out.println("1.입력하기");
System.out.println("2.출력하기");
System.out.println("3.삭제하기");
System.out.println("4.끝내기");
System.out.print("작업할 번호를 선택하세요.>");
a = scn.nextInt();
System.out.println();
if(a == 1)
{
System.out.println("입력하기를 선택하셨습니다.");
}
else if(a == 2)
{
System.out.println("출력하기를 선택하셨습니다.");
}
else if(a == 3)
{
System.out.println("삭제하기를 선택하셨습니다.");
}
else if (a == 4)
{
System.out.println("끝내기를 선택하셨습니다.");
break;
}
else
{
System.out.println("잘못 입력하셨습니다.");
}
//if를 switch문으로 적용
switch(a) {
case 1:
System.out.println("입력하기를 선택하셨습니다.");
break;
case 2:
System.out.println("출력하기를 선택하셨습니다.");
break;
case 3:
System.out.println("삭제하기를 선택하셨습니다.");
break;
case 4:
System.out.println("끝내기를 선택하셨습니다.");
break;
default:
System.out.println("잘못 입력하셨습니다.");
}
}while(a != 4);
'수업끄적끄적_7MONTH > Java' 카테고리의 다른 글
11/08 수업(8일차) (0) | 2023.11.08 |
---|---|
11/07 수업 (7일차) (1) | 2023.11.07 |
11/02 수업 (4일차) (0) | 2023.11.05 |
11/01 수업 (3일차) (0) | 2023.11.05 |
10/31 수업 (2일차) (0) | 2023.11.05 |