본문 바로가기
개발 공부 Today I Learned

[국비 16일차 TIL] JAVA 배열 복사 / 이중for문 / String

by 개발자신입 2023. 12. 12.
반응형

 

실전 문제

 

컴퓨터가 1~100 숫자(정수 범위) 중 하나를 랜덤으로 정합니다. (이를 알려주지 않습니다.)

사용자는 이 숫자를 맞추어야 합니다.

입력한 숫자보다 정답이 크면 → "UP" 출력,

입력한 숫자보다 정답이 작으면 → "DOWN" 출력.

정답을 맞추면 → "정답"을 출력하고, 지금까지 숫자를 입력한 횟수를 알려줍니다.

 

public class Test01 {
	public static void main(String[] args) {
	
		Scanner sc = new Scanner(System.in);

		int count = 0;
		int random = (int)(Math.random()*100+1);
		
		System.out.println("컴퓨터가 정한 랜덤 숫자를 맞춰보세요.");
		
		while (true) {
			System.out.println("숫자 입력 : ");
			int input = sc.nextInt();
			
			if (input > random) {
				System.out.println("DOWN");
				count++;
			} else if (input < random) {
				System.out.println("UP");
				count++;
							
			} else {
				System.out.println("정답! " + count + "회 걸렸네요.");
				break;
			}
		}
		sc.close();

		
	}
}

 


 

- 배열복사

배열의 값을 다른 배열에 복사하기

 

  • System.arraycopy
  • clone();

 

 

* arraycopy

  • Object src, int srcPos, Object dest, int destPos, int lenght
  • src 원본
  • srcPos 어느 위치부터 복사?
  • dest 값을 담을 배열
  • destPos 어느 위치에 담을건지?
  • length 어느 길이만큼 복사?

 

 

public class ArrayCopy02 {
	public static void main(String[] args) {
		
		int arr1[] = new int[] {10,20,30,40,50,60};
		int arr2[] = new int[6];
		
		System.arraycopy(arr1, 0, arr2, 0, arr1.length);

		System.out.println(arr1);
		System.out.println(arr2);
		System.out.println(Arrays.toString(arr1));
		System.out.println(Arrays.toString(arr2));
		
		int[] arr3 = new int[arr2.length];
		arr3 = arr2.clone();
		System.out.println(arr2);
		System.out.println(arr3);
		System.out.println(Arrays.toString(arr2));
		System.out.println(Arrays.toString(arr3));
	}
}

 


 

사용자가 홀수 양의 정수를 입력하면(입력이 항상 유효하다고 가정해도 됩니다),

문자 N을 사용하여 만든 ASCII 예술 문자 N을 출력하는 프로그램을 작성합니다.

 


		//1. 입력받기 -> 스캐너
		Scanner sc = new Scanner(System.in);
		System.out.print("enter in an odd positive integer : ");
		int input = sc.nextInt();
		
		while (input % 2 == 0 || input < 0) {
			System.out.print("PLZ! odd positive integer :");
			input = sc.nextInt();
		}
		
		//2. 배열만들기 -> N 한글자
		char chArray[][] = new char[input][input];
		for (int i = 0; i < input; i++) {
			for (int j = 0; j < input; j++) {
				//3. 특정위치에 N넣기 -> index확인해주세요.
				if(j == 0 || j == input-1 || j == i) {
					chArray[i][j] = 'N';
				}else {
					chArray[i][j] = ' ';
				}
			}
		}
		//4. 출력하기
		for (int i = 0; i < chArray.length; i++) {
			for (int j = 0; j < chArray[i].length; j++) {
				System.out.printf("%c", chArray[i][j]);
			}
			System.out.printf("%n");
		}
		
		sc.close();
	}
}


--------------------- 더 간단한 방법 --------------------- 

public class Test03 {
   public static void main(String[] args) throws IOException {

		Scanner sc = new Scanner(System.in);
		System.out.println("라인 수 입력");
		int num = sc.nextInt();

		for (int i = 0; i < num; i++) {
			for (int j = 0; j < num; j++) {
				if (j == 0 || j == num-1 || j == i) {
					System.out.print("N");
				} else {
					System.out.print(" ");
				}

			}
			System.out.println("");

		}
		sc.close();
	}
}

 


 

 

 

- 이중 for

  • import 정리 : 안 쓰는 것은 삭제, 필요한 것을 추가해줌.
  • Ctrl + shift + 0
  • Ctrl + Shift + L = 모든 명령어

 

 

public class Study05 {
	public static void main(String[] args) {
	
		int arr1[][] = new int[10][5] ;
		// 배열 속에 배열
		
		// 배열 쓰는 이유 : 같은 타입의 여러 값을 한 변수에 저장
		
		System.out.println(arr1); // 주소 값이 나옴.
		System.out.println(arr1[0]);
		System.out.println(arr1[0][0]); // 0번에 0번째 열어줘. = 배열 속 값
		System.out.println(arr1[0].length); // 배열을 한 번 열고 그 속의 길이
		
		for (int i = 0; i < arr1.length; i++) {  // 밖 (10개)
			for (int j = 0; j < arr1[i].length; j++) {  // 내부 (5개)
				System.out.print(arr1[i][j]); // 총 50번 반복
				
			}
			System.out.println(""); // enter, 10번 반복
		}
	}
}

 

 


- String 사용방법

 

  • 독특함
  • #불변, #주소값, #문자열, #나누기, #GC
  • 문자열을 저장합니다. 값 저장할 때 "" 쌍따옴표 사용
  • ""값을 기준으로 인스턴스를 생성함
  • ★ 값이 같으면 같은 값을 가진 기존의 인스턴스를 참조 (바라봅니다.)

 

public class String01 {
	public static void main(String[] args) {
	
		String hi = new String("Hi"); // R타입 객체타입
		String hi2 = new String("Hi");
		
		hi = "안녕";
		hi = "Hello";
		
		
		System.out.println(hi == hi2);   // false
		// R타입에서 ==는? 같은 객체냐고 물어보는 것.
		// String의 비교는 equals 써야함
		
		System.out.println(hi.equals(hi2));	// true
		
		
		String name = "";
		for (int i = 0; i < 20; i++) {  // 지우고 다시 생성
			name += i;
		}
		
		// String 대신에 사용하는 것
		StringBuilder sb = new StringBuilder();
		
		for (int i = 0; i < 20; i++) { 		//
			sb.append(i);
		}
		
		
		sb.append("Hi"); // append = 값을 저장
		sb.append("hi");
		sb.append("Hello");
		sb.append("안녕");
		
		System.out.println(sb); // HihiHello안녕
		
		String temp = sb.toString(); // string 타입으로 변환해서
		
		temp = "안녕하세요.";
		// indexOf() : 특정 문자가 몇 번째 인덱스에 있는지 출력함.
		System.out.println(temp.indexOf('녕')); // 1
		System.out.println(temp.indexOf('강')); // 없을 때는 -1
		System.out.println(temp.indexOf('요')); // 4
	}
}

 

 

 

반응형

댓글