조건식 : true/false 구문
1차 if문 안에 2차 if문 3차 ....
key 값 : 경우의 수
key 값으로 모든 경우의 수를 처리할 필요 없이 필요없는 경우의 수는 default 에서 예외처리를 하면 됨.
break : 이 process 를 빠져 나온다.
=> 이를 이용해서 빠져나오지 않는 경우를 이용해서 응용할 수 있음.
3개 이상의 && (and) 와 || (or) 를 사용할 때, &&는 모두 true 일때 true, || 는 그 중 하나라도 true 일 때 true
구구단 (2단 ~ 9단)
for(int dan=2;dan<10;dan++) {
for(int j=1;j<10;j++) {
System.out.printf("%d x %d = %d\n",dan,j,dan*j);
}
System.out.println();
}
결과
2 x 1 = 2
2 x 2 = 4
2 x 3 = 6
2 x 4 = 8
2 x 5 = 10
2 x 6 = 12
2 x 7 = 14
2 x 8 = 16
2 x 9 = 18
3 x 1 = 3
3 x 2 = 6
3 x 3 = 9
3 x 4 = 12
3 x 5 = 15
3 x 6 = 18
3 x 7 = 21
3 x 8 = 24
3 x 9 = 27
4 x 1 = 4
4 x 2 = 8
4 x 3 = 12
4 x 4 = 16
4 x 5 = 20
4 x 6 = 24
4 x 7 = 28
4 x 8 = 32
4 x 9 = 36
5 x 1 = 5
5 x 2 = 10
5 x 3 = 15
5 x 4 = 20
5 x 5 = 25
5 x 6 = 30
5 x 7 = 35
5 x 8 = 40
5 x 9 = 45
6 x 1 = 6
6 x 2 = 12
6 x 3 = 18
6 x 4 = 24
6 x 5 = 30
6 x 6 = 36
6 x 7 = 42
6 x 8 = 48
6 x 9 = 54
7 x 1 = 7
7 x 2 = 14
7 x 3 = 21
7 x 4 = 28
7 x 5 = 35
7 x 6 = 42
7 x 7 = 49
7 x 8 = 56
7 x 9 = 63
8 x 1 = 8
8 x 2 = 16
8 x 3 = 24
8 x 4 = 32
8 x 5 = 40
8 x 6 = 48
8 x 7 = 56
8 x 8 = 64
8 x 9 = 72
9 x 1 = 9
9 x 2 = 18
9 x 3 = 27
9 x 4 = 36
9 x 5 = 45
9 x 6 = 54
9 x 7 = 63
9 x 8 = 72
9 x 9 = 81
구구단 횡으로 출력
내가 짠 코드
for(int i=1;i<10;i++) {
for(int j=2;j<10;j++) {
System.out.printf("%d x %d = %d ",j,i,i*j);
}
System.out.println("\n");
}
결과
2 x 1 = 2 3 x 1 = 3 4 x 1 = 4 5 x 1 = 5 6 x 1 = 6 7 x 1 = 7 8 x 1 = 8 9 x 1 = 9
2 x 2 = 4 3 x 2 = 6 4 x 2 = 8 5 x 2 = 10 6 x 2 = 12 7 x 2 = 14 8 x 2 = 16 9 x 2 = 18
2 x 3 = 6 3 x 3 = 9 4 x 3 = 12 5 x 3 = 15 6 x 3 = 18 7 x 3 = 21 8 x 3 = 24 9 x 3 = 27
2 x 4 = 8 3 x 4 = 12 4 x 4 = 16 5 x 4 = 20 6 x 4 = 24 7 x 4 = 28 8 x 4 = 32 9 x 4 = 36
2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 6 x 5 = 30 7 x 5 = 35 8 x 5 = 40 9 x 5 = 45
2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 6 x 6 = 36 7 x 6 = 42 8 x 6 = 48 9 x 6 = 54
2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 7 x 7 = 49 8 x 7 = 56 9 x 7 = 63
2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40 6 x 8 = 48 7 x 8 = 56 8 x 8 = 64 9 x 8 = 72
2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45 6 x 9 = 54 7 x 9 = 63 8 x 9 = 72 9 x 9 = 81
강사님의 코드
for(int i=1;i<10;i++) {
for(int dan=2;dan<=9;dan++) {
System.out.printf("%d x %d = %d \t",dan,i,i*dan);
}
System.out.println("");
}
결과
2 x 1 = 2 3 x 1 = 3 4 x 1 = 4 5 x 1 = 5 6 x 1 = 6 7 x 1 = 7 8 x 1 = 8 9 x 1 = 9
2 x 2 = 4 3 x 2 = 6 4 x 2 = 8 5 x 2 = 10 6 x 2 = 12 7 x 2 = 14 8 x 2 = 16 9 x 2 = 18
2 x 3 = 6 3 x 3 = 9 4 x 3 = 12 5 x 3 = 15 6 x 3 = 18 7 x 3 = 21 8 x 3 = 24 9 x 3 = 27
2 x 4 = 8 3 x 4 = 12 4 x 4 = 16 5 x 4 = 20 6 x 4 = 24 7 x 4 = 28 8 x 4 = 32 9 x 4 = 36
2 x 5 = 10 3 x 5 = 15 4 x 5 = 20 5 x 5 = 25 6 x 5 = 30 7 x 5 = 35 8 x 5 = 40 9 x 5 = 45
2 x 6 = 12 3 x 6 = 18 4 x 6 = 24 5 x 6 = 30 6 x 6 = 36 7 x 6 = 42 8 x 6 = 48 9 x 6 = 54
2 x 7 = 14 3 x 7 = 21 4 x 7 = 28 5 x 7 = 35 6 x 7 = 42 7 x 7 = 49 8 x 7 = 56 9 x 7 = 63
2 x 8 = 16 3 x 8 = 24 4 x 8 = 32 5 x 8 = 40 6 x 8 = 48 7 x 8 = 56 8 x 8 = 64 9 x 8 = 72
2 x 9 = 18 3 x 9 = 27 4 x 9 = 36 5 x 9 = 45 6 x 9 = 54 7 x 9 = 63 8 x 9 = 72 9 x 9 = 81
\t : 탭 길이만큼 공백을 줘라.
구구단 횡으로 한단씩 출력
for(int i=2;i<10;i++) {
for(int j=1;j<=9;j++) {
System.out.printf("%d x %d = %d \t",i,j,j*i);
}
System.out.println("");
}
결과
2 x 1 = 2 2 x 2 = 4 2 x 3 = 6 2 x 4 = 8 2 x 5 = 10 2 x 6 = 12 2 x 7 = 14 2 x 8 = 16 2 x 9 = 18
3 x 1 = 3 3 x 2 = 6 3 x 3 = 9 3 x 4 = 12 3 x 5 = 15 3 x 6 = 18 3 x 7 = 21 3 x 8 = 24 3 x 9 = 27
4 x 1 = 4 4 x 2 = 8 4 x 3 = 12 4 x 4 = 16 4 x 5 = 20 4 x 6 = 24 4 x 7 = 28 4 x 8 = 32 4 x 9 = 36
5 x 1 = 5 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25 5 x 6 = 30 5 x 7 = 35 5 x 8 = 40 5 x 9 = 45
6 x 1 = 6 6 x 2 = 12 6 x 3 = 18 6 x 4 = 24 6 x 5 = 30 6 x 6 = 36 6 x 7 = 42 6 x 8 = 48 6 x 9 = 54
7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49 7 x 8 = 56 7 x 9 = 63
8 x 1 = 8 8 x 2 = 16 8 x 3 = 24 8 x 4 = 32 8 x 5 = 40 8 x 6 = 48 8 x 7 = 56 8 x 8 = 64 8 x 9 = 72
9 x 1 = 9 9 x 2 = 18 9 x 3 = 27 9 x 4 = 36 9 x 5 = 45 9 x 6 = 54 9 x 7 = 63 9 x 8 = 72 9 x 9 = 81
강사님의 코드
for(int dan=2;dan<10;dan++) {
for(int j=1;j<=9;j++) {
System.out.printf("%d x %d = %d \t",dan,j,dan*j);
}
System.out.println();
}
결과
2 x 1 = 2 2 x 2 = 4 2 x 3 = 6 2 x 4 = 8 2 x 5 = 10 2 x 6 = 12 2 x 7 = 14 2 x 8 = 16 2 x 9 = 18
3 x 1 = 3 3 x 2 = 6 3 x 3 = 9 3 x 4 = 12 3 x 5 = 15 3 x 6 = 18 3 x 7 = 21 3 x 8 = 24 3 x 9 = 27
4 x 1 = 4 4 x 2 = 8 4 x 3 = 12 4 x 4 = 16 4 x 5 = 20 4 x 6 = 24 4 x 7 = 28 4 x 8 = 32 4 x 9 = 36
5 x 1 = 5 5 x 2 = 10 5 x 3 = 15 5 x 4 = 20 5 x 5 = 25 5 x 6 = 30 5 x 7 = 35 5 x 8 = 40 5 x 9 = 45
6 x 1 = 6 6 x 2 = 12 6 x 3 = 18 6 x 4 = 24 6 x 5 = 30 6 x 6 = 36 6 x 7 = 42 6 x 8 = 48 6 x 9 = 54
7 x 1 = 7 7 x 2 = 14 7 x 3 = 21 7 x 4 = 28 7 x 5 = 35 7 x 6 = 42 7 x 7 = 49 7 x 8 = 56 7 x 9 = 63
8 x 1 = 8 8 x 2 = 16 8 x 3 = 24 8 x 4 = 32 8 x 5 = 40 8 x 6 = 48 8 x 7 = 56 8 x 8 = 64 8 x 9 = 72
9 x 1 = 9 9 x 2 = 18 9 x 3 = 27 9 x 4 = 36 9 x 5 = 45 9 x 6 = 54 9 x 7 = 63 9 x 8 = 72 9 x 9 = 81
미션
0,1,2,3,4,5,6,7,8,9, 출력문에서
마지막 , 를 제거하세요for(int i=0;i<10;i++) { System.out.print(i+","); }
내가 짠 코드
for(int i=0;i<9;i++) {
System.out.print(i);
for(int j=0;j<1;j++) {
System.out.print(",");
}
}
System.out.println(9);
결과
0,1,2,3,4,5,6,7,8,9
강사님의 코드
for(int i=0;i<10;i++) {
if(i<=8) {
System.out.print(i+",");
}else {
System.out.print(i);
}
}
결과
0,1,2,3,4,5,6,7,8,9
강사님의 코드 2
for(int i=0;i<10;i++) {
if(i!=9) {
System.out.print(i+",");
}else {
System.out.print(i);
}
}
결과
0,1,2,3,4,5,6,7,8,9
not 연산자를 사용해서
'9가 아닐 경우 출력, else 처리'
이렇게도 할 수 있음.
너무 복잡하게 생각한 듯 함.
com.tech.gt003 package 생성
ExampleScan class 생성
scanner를 이용해서 콘솔에서 값을 입력받을 예정
// 콘솔에서 값 입력
Scanner s=new Scanner(System.in); // 콘솔에서 데이터 입력받기
System.out.println("콘솔에 숫자를 입력하세요");
int userNum=s.nextInt();
System.out.println(userNum);
keyboard 로 data 를 입력해서 프로그램상에 입력받기
결과
주사위 게임
// 주사위를 굴려서 (com, random 입력)
// 내가 숫자 입력 (scanner 입력)
// 비교 승패를 출력하세요.
Scanner s=new Scanner(System.in);
Random ran=new Random(); // Random 클래스 사용
System.out.println("주사위 놀이");
System.out.println("영구 주사위 굴려"); // 입력받기
int userNum=s.nextInt();
System.out.println("userNum:"+userNum);
System.out.println("컴퓨터 주사위 굴려"); // random 입력받기
int comNum=ran.nextInt(6)+1; // (0~5 까지 의 숫자)+1
System.out.println("comNum:"+comNum);
// 판정
if (userNum>comNum) {
System.out.println("user 승리");
} else if (userNum<comNum) {
System.out.println("com 승리");
} else {
System.out.println("무승부");
}
결과
user의 입력값을 1~6 까지로 제한하는 기능, 문자를 예외처리하는 기능 등을 더 넣어야 완성도가 높아지지만, 일단 여기서는 scanner를 이용해서 값을 입력받고, 내부 data와 비교해서 판정문을 출력하는 것 까지 해봤다는 것에 의의를 둠.
random 메소드 중 nextInt(int bound) 를 보면 0 (inclusive), bound 값 (exclusive) 라고 돼있는 것을 알 수 있다.
즉, 0<= a < bound 값
while 뒤의 조건식이 참이면 반복을 계속함
=> 잘못 지정하면 무한 루프에 빠짐.
int i=10;
while(i<11) {
System.out.println(i);
}
결과
10
10
10
.
.
.
.
i 값은 10, i < 11 이라는 조건에 항상 true 이기 때문에 무한정으로 10 이라는 값이 출력된다.
무한루프 등 출력중인 Console 을 중지시키려면 빨간 네모 (Terminate) 버튼을 누르면 된다.
int i=1;
while(i<11) {
i++;
System.out.println(i);
}
결과
2
3
4
5
6
7
8
9
10
11
while 문 안에서 i값의 증감을 주면 무한루프를 빠져나올 수 있다.
int i=0;
while(i<10) {
System.out.println("hello "+i);
i++; // i값 1씩 증가
}
결과
hello 0
hello 1
hello 2
hello 3
hello 4
hello 5
hello 6
hello 7
hello 8
hello 9
// 합계 구하기
int i=1;
int sum=0;
while(i<=10) {
sum+=i;
i++;
}
System.out.println("sum:"+sum);
결과
sum:55
// 1~10 까지 출력
// for문을 활용
for (int i = 0; i <= 10; i++) {
// break사용
if(i==5) {
break; // 반복문 빠져나오기
}
System.out.println("i:"+i);
}
결과
i:0
i:1
i:2
i:3
i:4
break : 어떤 조건을 충족할 때 반복문을 빠져나오는 역할
if문이 아닌 for문을 빠져나옴.
// 1~10 까지 출력
// while문을 활용
int i=0;
while (i<=10) {
if(i==5) {
break;
}
System.out.println("i:"+i);
i++;
}
// 1~10 까지 출력
// while문을 활용
int i=0;
while (i<=10) {
if(i==5) {
break;
}
System.out.println("i:"+i);
i++;
}
결과
i:0
i:1
i:2
i:3
i:4
while 문에서도 적용이 가능함
// for 중첩문에서 활용
for(int i=0;i<=3;i++) {
if(i==2) {
break;
}
System.out.println("i:"+i);
for(int j=0;j<10;j++) {
System.out.println(" 현재 j:"+j);
}
}
결과
i:0
현재 j:0
현재 j:1
현재 j:2
현재 j:3
현재 j:4
현재 j:5
현재 j:6
현재 j:7
현재 j:8
현재 j:9
i:1
현재 j:0
현재 j:1
현재 j:2
현재 j:3
현재 j:4
현재 j:5
현재 j:6
현재 j:7
현재 j:8
현재 j:9
바깥쪽 for문을 빠져나옴
for(int i=0;i<=3;i++) {
System.out.println("i:"+i);
for(int j=0;j<10;j++) {
if(j==5) {
break;
}
System.out.println(" 현재 j:"+j);
}
}
결과
i:0
현재 j:0
현재 j:1
현재 j:2
현재 j:3
현재 j:4
i:1
현재 j:0
현재 j:1
현재 j:2
현재 j:3
현재 j:4
i:2
현재 j:0
현재 j:1
현재 j:2
현재 j:3
현재 j:4
i:3
현재 j:0
현재 j:1
현재 j:2
현재 j:3
현재 j:4
해당 반복문만 빠져나옴
안쪽 for 문에서 빠져나와도 바깥쪽 for 문은 계속 실행.
gotoLabel:
for (int i=0;i<=3;i++) {
System.out.println("현재 iiiii:"+i);
for (int j=0;j<10;j++) {
if(j==5) {
break gotoLabel;
}
System.out.println("현재 j:"+j);
}
}
결과
현재 iiiii:0
현재 j:0
현재 j:1
현재 j:2
현재 j:3
현재 j:4
gotoLabel : c언어의 goto문
개발자들 사이에서는 goto문을 최소화해서 사용해야 한다고 함.
goto문이 편리하긴 하지만 여러개 사용하게 되면 어디서 나와서 어디로 들어가는 지 꼬이게 됨
=> spaghetti 코드 라고 함.
덩치가 커질수록, 코드가 많아지면 많아질 수록 사용하지 않아야 함.
for(int i=0;i<10;i++) {
if (i==5) {
continue;
}
System.out.println("현재 i : "+i);
}
결과
현재 i : 0
현재 i : 1
현재 i : 2
현재 i : 3
현재 i : 4
현재 i : 6
현재 i : 7
현재 i : 8
현재 i : 9
i 가 5 일때, continue를 만나서 출력을 생략하고 i값 증감으로 바로 넘어감.
=> 조건식에 맞는 값일 때의 결과를 생략
Scanner scan=new Scanner(System.in);
String str=scan.next();
System.out.println(str);
결과
미션
random 숫자 2개를 입력받기 (1~100)
변수 : ranNum1, ranNum2
입력받은 숫자 2개로 사칙연산하기
더하기 / 빼기 / 곱하기 / 나누기
내가 짠 코드
Random ran=new Random();
int ranNum1=ran.nextInt(100)+1;
int ranNum2=ran.nextInt(100)+1;
System.out.println("ranNum1 : "+ranNum1);
System.out.println("ranNum2 : "+ranNum2);
System.out.printf("ranNum1 + ranNum2 = %d\n",ranNum1+ranNum2);
System.out.printf("ranNum1 - ranNum2 = %d\n",ranNum1-ranNum2);
System.out.printf("ranNum1 x ranNum2 = %d\n",ranNum1*ranNum2);
System.out.printf("ranNum1 ÷ ranNum2 = %d\n",ranNum1/ranNum2);
결과
ranNum1 : 41
ranNum2 : 61
ranNum1 + ranNum2 = 102
ranNum1 - ranNum2 = -20
ranNum1 x ranNum2 = 2501
ranNum1 ÷ ranNum2 = 0
강사님의 코드
int ranNum1=(int)(Math.random()*100)+1;
int ranNum2=(int)(Math.random()*100)+1;
System.out.println("r1:"+ranNum1);
System.out.println("r2:"+ranNum2);
System.out.println(ranNum1+"+"+ranNum2+"="+(ranNum1+ranNum2));
System.out.println(ranNum1+"-"+ranNum2+"="+(ranNum1-ranNum2));
System.out.println(ranNum1+"*"+ranNum2+"="+(ranNum1*ranNum2));
System.out.println(ranNum1+"/"+ranNum2+"="+(ranNum1/ranNum2));
결과
r1:93
r2:48
93+48=141
93-48=45
93*48=4464
93/48=1
미션2
random 숫자 2개를 입력받기 (1~100)
변수 : ranNum1, ranNum2
연산자를 입력받아
연산자 변수 : operator
random 숫자 2개를 사칙연산하기
내가 짠 코드
Random ran=new Random();
int ranNum1=ran.nextInt(100)+1;
int ranNum2=ran.nextInt(100)+1;
System.out.println("ranNum1 : "+ranNum1);
System.out.println("ranNum2 : "+ranNum2);
System.out.println("연산자를 입력하세요.");
Scanner scan=new Scanner(System.in);
String operator=scan.next();
System.out.println("연산자 : "+operator);
if(operator=="+") {
System.out.printf("ranNum1 + ranNum2 = %d\n",ranNum1+ranNum2);
} else if (operator=="-") {
System.out.printf("ranNum1 - ranNum2 = %d\n",ranNum1-ranNum2);
} else if (operator=="*") {
System.out.printf("ranNum1 x ranNum2 = %d\n",ranNum1*ranNum2);
} else if (operator=="/") {
System.out.printf("ranNum1 ÷ ranNum2 = %d\n",ranNum1/ranNum2);
} else {
System.out.printf("연산자가 잘못되었습니다.");
}
결과
오류 발생
입력받은 연산자와 if 안의 연산자 비교를 어떻게 해야 할 지 모르겠음.
강사님의 코드
// 강사님의 코드
int ranNum1=(int)(Math.random()*100)+1;
int ranNum2=(int)(Math.random()*100)+1;
System.out.println("r1:"+ranNum1);
System.out.println("r2:"+ranNum2);
System.out.println("연산자 입력 : (+,-,*,/)");
Scanner scan=new Scanner(System.in);
String operator=scan.next();
System.out.println(operator);
if (operator.equals("+")) {
System.out.println(ranNum1+"+"+ranNum2+"="+(ranNum1+ranNum2));
} else if (operator.equals("-")) {
System.out.println(ranNum1+"-"+ranNum2+"="+(ranNum1-ranNum2));
} else if (operator.equals("*")) {
System.out.println(ranNum1+"*"+ranNum2+"="+(ranNum1*ranNum2));
} else if (operator.equals("/")) {
System.out.println(ranNum1+"/"+ranNum2+"="+(ranNum1/ranNum2));
}
결과
입력 받은 값을 비교할 때엔 == 대신에 equals를 써야 함.
scanner로 입력받을때엔 '+' 를 입력하고 enter 까지 입력하기 때문에 자체적으로 ('+'+enter) 와 '+' 가 다르다고 인식한다.
int i=0;
do {
System.out.println("hi "+i);
i++;
} while (i<10);
결과
hi 0
hi 1
hi 2
hi 3
hi 4
hi 5
hi 6
hi 7
hi 8
hi 9
일반적인 while문과 다르게 while(조건) 뒤에 ; 를 붙여야 함.
int i=0;
do {
System.out.println("hi "+i);
i++;
} while (i>10);
결과
hi 0
조건식에 부합하더라도 최초 1번은 실행됨.
// 메세지를 입력받아 입력값으로 종료할 것인지 반복할 것인지를 결정
// => 최소 1번은 입력을 받아야 함.
// 이런 경우에 do while 을 활용 가능
System.out.println("메세지 입력\n종료하려면 q를 입력하세요.");
Scanner scanner=new Scanner(System.in);
String inputString="";
do {
System.out.println("입력>");
inputString=scanner.next(); // 입력받기
System.out.println("inputString:"+inputString);
} while (!inputString.equals("q"));
결과
메세지 입력
종료하려면 q를 입력하세요.
입력>
hi
inputString:hi
입력>
hello
inputString:hello
입력>
q
inputString:q
day004 project 생성
com.tech.gt001 package 생성
배열 : 동일한 타입의 변수들의 모임
변수 개수가 늘어나게 되면 관리하기 힘드므로 배열로 만들어 관리하기 용이하게 함
배열 선언식
int[] s=new int[10];
10 : size
index 는 0부터 시작함