작성 : 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

+ Recent posts