작성 : 2024. 4. 3.
개발블로그 운영하기
노션에 메모한 내용으로 TIL작성하기, 깃허브 알아보고 시도해보기
// 반복문 제어
// break (반복문의 종료), continue
//break (반복문의 종료) 사용
for (int i = 0; i <= 10; i++) {
if (i >= 6) {
break; // 사용되는 순간 강제종료
}
System.out.println( i + ". hello");
}
결과 :
0. hello
1. hello
2. hello
3. hello
4. hello
5. hello
//continue 사용
for (int i = 0; i <=10; i++ ) {
if (i % 2 == 0) {
continue; // 홀수만 출력하고 싶을 때. 짝수가 나오면 다시 for문으로 올라가 돌려라.
}
System.out.println(i);
}
결과 :
1
3
5
7
9
//키보드로 부터 데이터를 입력받고 어떤 값인지에 따라 반복문을 실행할지,안할지 결정하는 문제를 만들어보자.
// 점심메뉴 후보 중 1, 2, 3번을 선택할 수 있고 4번을 선택하기 전까지 계속 새로 선택할 수 있다.
java.util.Scanner sc = new Scanner(System.in);
System.out.println("1.짜장면 2.김치찌개 3.돈까스 4.종료");
System.out.println("선택>>");
int sel = sc.nextInt();
// 무한반복이 필요한 경우 while문을 사용
// while문 조건이 참일때 계속 실행, 따라서 해당 코드는 제어문이 없으므로 무한반복
while (true) {
if (sel == 1) {
System.out.println("오늘의 메뉴는 짜장면");
} else if (sel == 2) {
System.out.println("오늘의 메뉴는 김치찌개");
} else if (sel == 3) {
System.out.println("오늘의 메뉴는 돈까스");
} else if (sel == 4) {
System.out.println("종료");
}
}
결과 :
1.짜장면 2.김치찌개 3.돈까스 4.종료
선택>> [키보드로 입력하는 칸]
// 지금까지의 코드는 키보드로 선택 칸에 어떤 번호를 입력하던 무한루프
// -> 내가 추가적으로 만들어보고 싶은 것은 랜덤으로 점심메뉴 정하기. 번호를 입력하면 그 번호에 해당하는 메뉴가 뭔지 보여준다. 위 문제를 해결하고 나면 간단하게 응용해서 바로 만들 수 있을 듯.
무한루프를 제어하기 위해 수정된 코드 :
java.util.Scanner sc = new Scanner(System.in);
// 무한반복이 필요한 경우 while문을 사용
while (true) {
System.out.println("1.짜장면 2.김치찌개 3.돈까스 4.종료");
System.out.print("선택>>");
int sel = sc.nextInt();
if (sel == 1) {
System.out.println("오늘의 메뉴는 짜장면");
} else if (sel == 2) {
System.out.println("오늘의 메뉴는 김치찌개");
} else if (sel == 3) {
System.out.println("오늘의 메뉴는 돈까스");
} else if (sel == 4) {
System.out.println("종료");
break; // while문을 종료
}
}
System.out.println("프로그램 종료");
// break가 어디를 제어하는지 알아보기 위해 작성한 코드
for (int i = 1; i <= 5; i++) {
if (i == 3) {
break;
}
System.out.println("out for ing");
for (int j = 1; j <= 5; j++) {
if (j == 2) {
break; // break를 감싸고 있는 가장 가까운 반복문 제어!
}
System.out.println("hello");
}
}
결과 :
out for ing
hello
out for ing
hello
// 4번 돌아가는 결과가 나옴 (i가 0부터 시작한다는 것 항상 기억)
// for문을 사용해서 로또번호 출력
1~45 까지의 숫자, 6개를 추출 = 임의의 숫자 6개 -> 난수라고 함.
난수
Math.random()
범위 : 0.0 <= r < 1
System.out.println(Math.random()); // 찍히는 난수를 볼 수 있음
System.out.println(Math.random() * 10); // 0.xx ~ 9.xx 로 범위가 바뀜
(int)(Math.random() * 10) // 0 ~ 9 로 바뀜
(int)(Math.random() * 10) + 1 // 1 ~ 10
(int)(Math.random() * 난수의 갯수) + 난수의 최소값
난수의 갯수 => 난수의 최대값 - 난수의 최소값 + 1 => 10 - 1 + 1
// 난수 구하는 공식
for (int i = 1; i <= 20; i++) {
System.out.println((int)(Math.random()* 10) + 1);
}
배운 것을 응용해 만들어보고 싶은 것 하나씩 만들어보기!
// -> 내가 추가적으로 만들어보고 싶은 것은 랜덤으로 점심메뉴 정하기. 번호를 입력하면 그 번호에 해당하는 메뉴가 뭔지 보여준다. 위 문제를 해결하고 나면 간단하게 응용해서 바로 만들 수 있을 듯.
1 ~ 45까지 난수 출력
예시) 1 ~ 12까지의 랜덤 숫자 10가지 출력
(int) (Math.random() * (12-1+1)) + 1
= (int) (Math.random() * 12) + 1
for (int i = 1; i <= 10; i++) {
System.out.println((int)(Math.random()* 45) + 1);
}
}
// 로또 번호 생성 -> 중복제거 아직 안함
int lotto;
for (int i = 1; i <= 6; i++) {
lotto = (int)((Math.random()* 45) + 1) + 1;
System.out.println(lotto);
}
- 가위바위보 게임 만들기
System.out.println("입력>>");
me = sc.nextInt();
// 컴퓨터가 보를 내고 사용자가 가위를 내면 컴퓨터가 이기는 조합이 빠져있다.
if (com == 1 && (me == 1 || me == 3)) {
System.out.println("다시하기");
} else if (com == 1 && me == 2) {
System.out.println("승!");
break;
} else if (com == 2 && (me == 1 || me == 2)) {
System.out.println("다시하기");
} else if (com == 2 && me == 3) {
System.out.println("승!");
break;
} else if (com == 3 && (me == 3 || me == 2)) {
System.out.println("다시하기");
} else if (com == 2 && me == 1) { // com == 2 가 아니라 3
System.out.println("승!");
break;
}
--------------------------------------------------------------------------------
수정된 코드 :
while (true) {
com = (int) (Math.random() * 3) + 1;
System.out.println("1.가위 2.바위 3.보");
System.out.println("입력>>");
me = sc.nextInt();
// 내가 이기는 경우에는 종료니까 내가 이기는 경우의 수만 계산하면 됨.
if ((com == 3 && me == 1) || (com == 1 && me == 2) || (com == 2 && me == 3)) {
System.out.println("컴퓨터 : " + com);
System.out.println("당신의 승!");
break;
// 컴퓨터와 비기는 경우와 나머지는 다시하기
} else if (com == me) {
System.out.println("컴퓨터 : " + com);
System.out.println("다시하기");
} else {
System.out.println("컴퓨터 : " + com);
System.out.println("다시하기");
}
결과 :
예시)
1.가위 2.바위 3.보
입력>>
1
컴퓨터 : 3
당신의 승!
--------------------------------------------------------------------------------
// 강사님의 풀이 -> (com - me)의 값에서 규칙성을 찾아서 품.
int com; // 컴퓨터의 값을 담을 변수
int me; // 나의 답을 담을 변수
Scanner sc = new Scanner(System.in);
while (true) {
com = (int) (Math.random() + 3) + 1;
System.out.println("1.가위 2.바위 3.보");
System.out.println("입력>>");
me = sc.nextInt();
int result = me - com;
if (result == -2 || result == 1) {
System.out.println("you win!");
break;
} else if (result == -1 || result == 2) {
System.out.println("you lose");
} else {
System.out.println("비겼습니다");
}
}
- boolean 을 이용한 제어문
- thread를 관리하는 것에 유용함.
// break 외의 boolean를 이용한 제어문
// boolean를 이용해 flag를 true라고 지정해서 제어문에 사용하기
boolean flag = true;
Scanner sc = new Scanner(System.in);
while (flag) {
System.out.println("입력>>");
int sel = sc.nextInt();
if (sel == 1) {
System.out.println("1번");
} else if (sel == 2) {
System.out.println("2번");
} else if (sel == 3) {
System.out.println("3번 프로그램 종료");
flag = false;
}
}
스레드같은 프로그램 사용할 때 이 방법을 자주 씀.
- 배열
- 동일한 타입의 데이터를 여러개 저장하는 변수
- 1차원 배열, 다차원 배열(2차원)
- 배열은 인덱스번호를 이용, 인덱스번호는 0번부터 시작
- 자동초기화가 된다.
- 순차적인 데이터 처리
int x, y, z, k, f; // 이렇게도 배열을 선언할 수 있지만 효율적이지 X
// 배열선언 방법
// 1번 방법)
int[] arr; // 연속된 형태의 배열 선언
arr = new int[5]; // 배열의 생성 -> 저장공간 5개를 만들 수 있다
// arr은 주소값을 가지고 있다, arr[인덱스번호] 이를 이용해 각 배열의 위치를 구분할 수 있다!
// 2번 방법)
int[] arr = new int[5]; //선언과 초기화 동시에.
-> 값 찍어보기
arr[0] = 10; // 배열의 초기화
arr[1] = 20;
arr[2] = 30;
arr[3] = 40;
// arr[4] = 50;
System.out.println(arr[0]);
System.out.println(arr[1]);
System.out.println(arr[2]);
System.out.println(arr[3]);
System.out.println(arr[4]);
결과 :
10
20
30
40
0 // 초기화를 하지 않아 값을 찾을 수 X
// 1번과 2번 방법을 한번에
int x, y, z, k, f;
int[] arr = {10, 20, 30, 40, 50};
// 배열에 들어있는 값 출력
int[] arr = new int[5];
for (int i = 0; i < 5; i++) {
arr[i] = (i + 1)* 10;
}
for (int i = 0; i < 5; i++) {
System.out.println(arr[i]);
}
// 같은 코드 =
// arr.length -> 배열의 길이(크기)를 나타냄.
int[] arr = new int[5];
for (int i = 0; i < arr.length; i++) {
arr[i] = (i + 1)* 10;
}
for (int i = 0; i < arr.length; i++) {
System.out.println(arr[i]);
}
// 문제 풀기!
// int 크기가 10인 배열을 만들어라
// 반복문을 사용해서 1~10 정수로 초기화
// 배열의 값의 총합을 구하는 프로그램을 작성
--------------------------------------------------------------------------------
// 내가 풀었을 때 코드가 실행되지 않음 -> 해결방법 추가 (완.)
int[] arr = new int[10];
int sum = 1; // sum변수의 초기값을 0으로 설정해야함. 1로 설정하는 것은 잘못된 설정. 잘못된 초기값으로 잘못된 결과가 나올 수 있음.
for (int i = 1; i < arr.length; i++) { // 여기도 0부터 시작할 것.
arr[i] = i + 1;
sum += i; // 이게 들어갈 게 아니라,, 배열의 요소값을 더해야 함으로 i대신 arr[i]로 바꾸기
System.out.println(i); // i를 출력할 것이 아니라 배열의 요소값을 더한 arr[i]를 출력
}
System.out.println(sum); // 배열 요소들의 합
결과 :
1
2
3
4
5
6
7
8
9
46 총합에서 9가 더해지지 않은 숫자가 나옴. -> 잘못된 코드
--------------------------------------------------------------------------------
수정된 코드 :
int[] arr = new int[10];
int sum = 0;
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
sum += arr[i];
System.out.println(arr[i]);
}
System.out.println("배열의 요소들의 합: " + sum);
결과 :
1
2
3
4
5
6
7
8
9
10
배열의 요소들의 합: 55
--------------------------------------------------------------------------------
// 강사님 풀이
int[] arr = new int[10];
int sum = 1;
for (int i = 0; i < arr.length; i++) {
arr[i] = i + 1;
}
int sum = 0;
for (int i = 0; i < arr.length; i++) {
sum += arr[i];
}
System.out.println(sum);
결과 :
55
--------------------------------------------------------------------------
import java.util.Scanner;
//스캐너를 사용해서 점수를 입력받을 예정.
public class ExamTest {
public static void main(String[] args) {
// TODO Auto-generated method stub
// 학생의 성적을 구하는 프로그램
String[] subject = { "국어", "영어", "수학", "과학", "사회" };
// 점수를 담는 배열
int[] score = new int[5];
// 총점
int sum = 0;
// 평균
double avg = 0.0;
// 다섯과목 점수입력, scanner를 쓸 때는 어떤 것을 입력하라는 것인지 메세지를 줘야 함.
Scanner sc = new Scanner(System.in);
for (int i = 0; i < score.length; i++) {
System.out.println("[" + subject[i] + "] 점수를 입력하세요");
score[i] = sc.nextInt();
}
// 총점
for (int num : score) {
sum += num;
}
// 평균
// 소수점을 구하기 위해 (double)로 형변환
avg = sum / (double) score.length;
// 향상된 for문으로 나타내기
// int i = 0;
// // i를 다시 선언
// for(String sub : subject) {
// System.out.println(sub + " 점수 : " + score[i++]); // i만 선언해서 알아서 증가하는 게 아니므로 i++ 증가를 해줘야 함.
// }
// 기존 for문으로 나타내기
for (int i = 0; i < subject.length; i++) {
System.out.println(subject[i] + " 점수 : " + score[i]);
}
// 총점과 평균 출력
System.out.println("총점 : " + sum);
System.out.println("평균 : " + avg);
// 과목 중에 가장 점수가 높은 과목의 이름과 점수를 출력 (문제!)
// 최고 점수는 구함(완.)
int max = score[0];
// 최고, 최저 점수의 과목 구하기(도움.)
String sub = null; // 초기화해서 들어오는 값이랑 비교
// 최저 점수
int min = score[0];
for (int i = 1; i < score.length; i++) { // 0번부터 비교하는 것은 무의미함.
if (score[i] > max) {
sub = subject[i];
max = score[i];
}
if (score[i] < min) {
sub = subject[i];
min = score[i];
}
}
System.out.println(sub + "과목의 점수가 가장 높습니다. " + max + "점");
System.out.println(sub + "과목의 점수가 가장 낮습니다. " + min + "점");
}
}
'2024_UIUX 국비 TIL' 카테고리의 다른 글
UIUX _국비과정 0405 (0) | 2024.05.29 |
---|---|
UIUX _국비과정 0404 (0) | 2024.05.29 |
UIUX _국비과정 0402 (0) | 2024.05.29 |
UIUX _국비과정 0401 (0) | 2024.05.28 |
UIUX _국비과정 0329 첫 날! (0) | 2024.05.28 |