5일차 - 240102

김리오·2024년 1월 2일

학원공부 TIL

목록 보기
5/13

📌반복문(while)을 활용한 달력

	public static void main(String[] args) {
		System.out.println("============ 2023년 12월 ============");

		// 1~31까지 1씩 증가하고, 한 줄에 7개 출력
		int i = -5;
		while (++i <= 31) { // i를 먼저 1 증가한 후 i<=31을 비교함
			if (i <= 0) {
				System.out.printf("%5s", " "); // 일단 있는 것으로 두고 공백을 넣기
			} else {
				System.out.printf("%5d", i);
				if (i % 7 == 2)
					System.out.println();
			}
		}
	}
  • 음수를 부여하고 공백을 주는 논리

📌정수 5개 입력 / 배열 내 최댓값(max), 최솟값(min) 구하는 문제

  • 하나씩 비교하면서 max, min에는 항상 작은 값이 담기도록 하고, 전체 요소들이 한번씩 비교되게 한다
	public static void main(String[] args) {
		int[] su = new int[5];

		System.out.println("정수 5개를 입력하세요?");
		Scanner sc = new Scanner(System.in);
		su[0] = sc.nextInt();
		int max = su[0], min = su[0];

		for (int i = 1; i < su.length; i++) {
			su[i] = sc.nextInt();
			if (max < su[i])
				max = su[i];
			if (min > su[i])
				min = su[i];
		}

		System.out.println("max = " + max);
		System.out.println("min = " + min);

		sc.close();

	}

📌이름을 입력받고 배열의 몇 번째 인덱스에 있는지 출력하는 문제

  • 인덱스를 변수로 설정, for문의 변수와 하나씩 비교하면서 입력한 이름과 일치하면 인덱스 번호 출력
  • if문을 써서 인덱스 번호와 일치하는 경우에는 몇 번 인덱스인지 출력하고
    인덱스 번호를 벗어나는 수는 문제 조건대로 배열방에서 찾지 못했다는 메시지 출력
  • 입력한 이름과 같은 이름을 배열에서 찾았을 때, 반복문을 벗어나도록 break 명령을 입력하는 게 핵심!!
/*
String names[] = {"홍길동", "전우치", "홍길동", "세종대왕", "김길동"}; 
String inputname = sc.next();

실행1. 배열 요소의 값 입력한 경우
실행결과화면)
검색할 이름을 입력하세요?
이름:홍길동
홍길동는(은) 배열의 인덱스 0에서 찾았습니다. 

실행2. 배열 요소의 값이 아닌 데이터를 입력한 경우
실행결과화면)
검색할 이름을 입력하세요?
이름:HTA
HTA는(은) 배열방에서 찾지 못했습니다.
 */
 
 	public static void main(String[] args) {
		
		String[] names = new String[] {"홍길동", "전우치", "홍길동", "세종대왕", "김길동" };
		
		Scanner sc = new Scanner(System.in);
		int index = -1;
		// 몇 번 방에 들어있는지 확인하는 변수로 초기값 -1은
		// 인덱스와 겹치지 않는 수를 사용함.
		
		System.out.println("검색할 이름을 입력하세요?");
		System.out.print("이름:");
		String inputname = sc.next();
		
		for (int i = 0; i<names.length; i++) {
			if (inputname.equals(names[i])) {
				index = i;
				break;
			}
		}
		
		//입력한 이름과 배열에 저장된 이름을 찾았을 때
		if (index != -1) {
			System.out.println(inputname + "는(은) 배열의 인덱스 "+index+"에서 찾았습니다.");
		} else
			System.out.println(inputname + "는(은) 배열방에서 찾지 못했습니다.");
		
		sc.close();
	}

📌향상된(확장) for문을 활용한 2차원 배열 출력

  • for문을 중첩해서 2차원 배열 arr이 갖고 있는 elements(요소)를 출력할 수 있다
  • 이 로직을 이해하려면, 2차원 배열이 어떻게 형성되는지 알아야 한다
    • 먼저, 행의 수만큼 행에 대한 1차원 배열을 만들고,
      각 행에 다시 1차원 배열 형태로 열 개수 만큼 배열을 만든다.
	public static void main(String[] args) {
		int arr[][] = {
				{10, 20},
				{30, 40},
				{50}
		};
		
//		for (int i=0; i<arr.length; i++) {
//			for (int j=0; j<arr[i].length; j++) {
//				System.out.printf("%-3d",arr[i][j]);
//				if (j==1) {
//					System.out.println();
//				}
//			}
//		}
		
//		for (int i = 0; i<arr.length; i++) {
//			for (int j=0; j < arr[i].length; j++) {
//				System.out.print(arr[i][j]+" ");
//			}
//			System.out.println();
//			// 안쪽 for문 한바퀴 돌면, 다음 명령문으로 이동하니까
//			// 굳이 if문으로 표현 안 해줘도 됐었음!!
//			// 내가 작성한 명령문의 결과가 어떻게 나올까 항상 생각해!!
//		}
//		System.out.println("==========================");
		
		for (int[] a : arr) { //arr이 담고 있는 '행'을 먼저 출력
			for (int n : a) { //a 배열('행')이 갖고 있는 요소들('열')을 또 다시 배열하라는 for문
				System.out.print(n + " ");
			}
			System.out.println();
		}
		System.out.println("끝.");
	}
	public static void main(String[] args) {
		String arr[][] = { {"과일", "사과"},
				           {"아이스크림", "메로나"},
				           {"커피"}};
		
		// 향상된 for문
		for (String n : arr[0]) {
			System.out.println(n);
		}

		////////////////////////////////////////////////////////////
        
		System.out.println("==========배열된 순서대로 출력하기==========");
		
		for (String[] a : arr) {
			for (String b : a) {
				System.out.print(b + " ");
			}
			System.out.println();
		}
	}

📌cmd 명령프롬프트를 활용한 값 입력

  • java main메서드가담긴클래스이름 값1 값2 ...
  • public static void main(String[] args) 메인 메서드를 이렇게 정의하면
    args[0], args[1] ... 이런 형태로 직접 입력한 값에 접근할 수 있다
  • 커맨드 라인에 매개변수를 입력하지 않으면 크기가 0인 배열이 생성된다
    args.length = 0

📌사용자값 입력/출력

  • 직접 값을 입력하고자 하는 클래스에서 Run As -> Run Configurations -> Arguments 경로로 이동하면
    직접 값을 입력할 수 있다
  • 향상된 for문을 이용하면 직접 입력한 값(메인 메서드의 매개변수 args에 저장된 값)을 출력할 수 있다
for (String a : args) {
			System.out.println(a);
		}

📌오름차순으로 정리(배열)

  • 내림차순은 반대논리로 해주면 된다
	public static void main(String[] args) {
		int a[] = { 5, 4, 3, 2, 1 };

		// 웬만하면 length 이용해서 문장만들고 반복문 돌리기 
		
		for (int i = 0; i < a.length - 1; i++) {
			for (int j = i + 1; j < a.length; j++) { // 초기값, 변하는 값, 최종값 생각하면서 작성
				if (a[i] > a[j]) {
					int imsi = a[i];
					a[i] = a[j];
					a[j] = imsi;
				}
			}
		}

		System.out.println("정렬 후 데이터 : ");
		
		//향상된 for문을 활용하면 정렬값을 촤라락 출력할 수 있다
		for (int data : a) {
			System.out.print(data + "\t");
		}
	}
profile
생각하는 사람이 되고 싶다

0개의 댓글