JAVA 풀스택 캠프 1주차(2부)

2023년 3월 15일 – 연산자(단항 연산자, 산술 연산자, 비교 연산자, 논리 연산자, 대입 연산자, 삼항 연산자, 연산자 우선 순위)

단항 연산자

package com.multi.ex01.single_operator;

//단항연산자
public class SingleOperator {

	public static void main(String() args) {
		// 1. not(!
) 연산자: 논리값을 토글(Toggle)하는 용도로 활용 boolean isTrue = true; System.out.println(isTrue); System.out.println(!
isTrue); System.out.println(!
!
isTrue); isTrue = !
isTrue; System.out.println(isTrue); System.out.println("--------------------------"); // 2. 증감 연산자 ++ --, 전위증감연산자, 후위증감연산자 int a = 10; // 후위 연산은 세미클론 기준으로 뒤에서 더해진다 System.out.println("a++"); System.out.println(a++); // 10 System.out.println(a); // 11 a = 10; System.out.println("++a"); System.out.println(++a); // 11 System.out.println(a); // 11 // ++가 없이 연산하는 전위 연산 // System.out.println("++a"); // a = a + 1; // System.out.println(a); // System.out.println(a); // ++가 없이 연산하는 후위 연산 // System.out.println("a++"); // a = a + 1; // System.out.println(a); // System.out.println(a); } }

산술 연산자

package com.multi.ex02.arithmetic_operator;

public class ArithmeticOperator {

	public static void main(String() args) {
		int a = 10;
		int b = 2;
		int c = 0;
		
		System.out.println("사칙연산");
		System.out.println(a + b);
		System.out.println(a - b);
		System.out.println(a * b); //곱셈
		System.out.println(a / b); //나눗셈
		System.out.println(a / 3); // int Type으로 소수점이 버려짐
		System.out.println(a / 3.0); // 소수점 표현법 1 - double로 3.0 사용
		System.out.println(a / (double)3); // 소수점 표현법 2 - 3을 명시적으로 3.0으로 바꾼 문법
		System.out.println((double)(a / 3)); // 안되는 표현법!
- 3 -> 3.0 됨 // /by zero // System.out.println(a / 0); //java.lang.ArithmeticException System.out.println("% 모듈러 연산"); c = 10 % 3 ; //나머지 연산 System.out.println(c); c = 10 % 2; // 짝수인지 활용할때 System.out.println(c); //0 = 짝수 c = 11 % 2; // 홀수인지 활용할때 System.out.println(c); //1 = 홀수 c = 9 % 3; // 3의 배수인가? System.out.println(c); //3의 배수면 0 //if문으로 짝수 필터링하는 방법 c = 4; if(c % 2 == 0) { // 짝수일떼 System.out.println(c + "는 짝수입니다.

"); } else { System.out.println(c + "는 홀수입니다.

"); } // 정수 + 실수 사용시 주의점 // - 사칙연산시 type의 크기가 큰쪽으로 자동으로 형변환됨 // - double > float > long > int > short > byte float pi = 3.14f; double x = 1.23456789; int i = 10; System.out.println(pi + i); // float System.out.println(pi + x); // double System.out.println(pi + (float)x); // float System.out.println((float)(pi + x)); // float } }

비교 연산자

package com.multi.ex03.compare_operator;

// 비교연산자
public class CompareOperator {
	public static void main(String() args) {
		int a = 100;
		int b = 200;
		
		System.out.println( a == b ); // a와 b가 같은가?
		System.out.println( a !
= b ); // a와 b가 같지 않은가? System.out.println("----------------------------------"); //문자열 비교 ... *주의 : 이해하기 매우 어려움!
!
!
String str1 = "안녕하세요?"; String str2 = "안녕하세요?"; String str3 = new String("안녕하세요?"); System.out.println(str1 == str2); // 예측 : true System.out.println(str1 == str3); // 예측 : true -> 틀림!
false 로 나옴 // String 비교시에는 항상 주의 필요, '=='를 사용하면 틀린결과가 나올 수 있다~ // 문자열 비교는 equals 메소드를 사용할 것!
★★★★★ System.out.println(str1.equals(str2)); // 예측 : true System.out.println(str1.equals(str3)); // 예측 : true -> 성공 // 문자열을 포함하는지 확인하는 함수 = contains String str4 = "안녕"; System.out.println(str1.contains(str2)); // 안녕하세요? - 안녕하세요? 가지고 있는지? System.out.println(str1.contains(str4)); // 안녕하세요? - 안녕 가지고 있는지? System.out.println("안녕하세요?".contains("하이")); // 안녕하세요? - 하이 가지고 있는지? } }

논리 연산자

package com.multi.ex04.logical_operator;

// 논리연산자 = boolean으로만 가능!
public class LogicalOperator { public static void main(String() args) { boolean x = true; boolean y = false; boolean z = true; System.out.println(x && y); // AND 연산: 둘다 참일때만 참 System.out.println(x || y); // OR 연산: 둘 중 하나라도 참이면 참 System.out.println(x && y && z); // 3항 AND 연산이 가능!
System.out.println(x || y || z); // 3항 OR 연산이 가능!
System.out.println(x || y && z); // 우선순위는 AND가 높음!
, 순서 y && z -> x || y, 참!
System.out.println((x || y) && z); // 연산자 우선순위가 명확하지 않으면 괄호사용!
System.out. println("---------------------------------------------------"); // * 괄호는 습관적으로 쳐도 문제 없음!
★★★★★ // 비교 연산자, number만 가능!
int a = 100; int b = 50; System.out.println(a > b); //a가 b보다 큰가? System.out.println(a < b); //a가 b보다 작은가? System.out.println(a >= 100); //a가 100보다 크거나 같은가? System.out.println(a <= 100); //a가 100보다 작거나 같은가? System.out. println("---------------------------------------------------"); // 비교 연산자 응용 int c = 70; // c는 a보다 작고, b보다는 큰가? // System.out.println(a > c > b); //안됨!
// System.out.println((a > c) > b); //안됨!
System.out.println(c < a && c > b); //관례적으로 외워야 하는 문법!
★★★★★ // a는 50보다 크고, 150보다 작은가? System.out.println(a > 50 && a < 150); // b는 20이상, 100 미만인가? System.out.println(b >= 20 && b < 100); } }

작업 관리자

package com.multi.ex05.assignment_operation;

//대입 연산자
public class AssignmentOperator {

	public static void main(String() args) {
	// 가장 기초적인 대입(Assign) 방법
	int a = 10;
	int b = 10;
	
	a = a + 10;
	System.out.println(a);
	
	b += 10; // 위에 표현과 논리적으로 동치하다.

System.out.println(b); // *주의: 앞뒤 바꿔서 사용하면 못잡는다!
// b =+ 10; // 잘못된 문법이 아니고, b에 +10을 대입한 연산 System.out.println(b); // 30? 아니고 10이 출력됨!
// 오칙연산 b += 10; b -= 10; b *= 10; b /= 10; b %= 10; // Selection mode -> alt + shift + a // Selection mode에서는 한글이 잘 안먹힌다.

주의할것!
// 잘못된 연산법 주의 필요!
!
b =+ 10; //b = (+10) b =- 10; //b = (-10) // b =* 10; //b = (*10) // 문법 오류 발생!
// b =/ 10; //b = (/10) // 문법 오류 발생!
// b =% 10; //b = (%10) // 문법 오류 발생!
} }

삼항 연산자

package com.multi.ex06.ternary_operator;

// 삼항연산자 + if
public class TernaryOperator {

	public static void main(String() args) {
		int a = 100;
		int b = 50;
		int c = 30;

		// 삼항연산자
		// 문법 : (조건절) ? (참일때 실행되는 문장) : (거짓일때 실행되는 문장)
		String result = a > b ? "a가 b보다 큽니다.

" : "a가 b보다 작습니다.

"; System.out.println(result); // 중첩 사용 -> 권장하지 않음.. 가독성이 좋지 않음 -> if문으로 변경 // a, b, c를 비교하는 방법 result = a > b ? (b > c ? "a가 b보다 크고 b는 c보다 큼" : "a가 b보다 크고 b는 c보다 작음") : (b > c ? "a가 b보다 작고 b는 c보다 큼" : "a가 b보다 작고 b는 c보다 작음"); System.out.println(result); // 삼항연산자는 if문으로 완벽히 호환된다!
// if문이란? 논리값을 비교해주는 문법 // if(조건식) {조건식이 참이면 실행되는 문장} // else {조건식이 거짓이면 실행되는 문장!
} if (a > b) { result = "a가 b보다 큽니다"; } else { result = "a가 b보다 작습니다"; } System.out.println(result); // 복잡한 삼항연산자 if문으로 바꾸기 // result = a > b ? (b > c ? "a가 b보다 크고 b는 c보다 큼" : "a가 b보다 크고 b는 c보다 작음") // : (b > c ? "a가 b보다 작고 b는 c보다 큼" : "a가 b보다 작고 b는 c보다 작음"); if (a > b) { if (b > c) { result = "a가 b보다 크고 b는 c보다 큼"; } else { result = "a가 b보다 크고 b는 c보다 작음"; } } else { if (b > c) { result = "a가 b보다 작고 b는 c보다 큼"; } else { result = "a가 b보다 작고 b는 c보다 작음"; } } System.out.println(result); } }

운영자 우선순위

package com.multi.ex07.operator_precedence;


// 연산자 우선순위
public class OperatorPrecedence {
	
	public static void main(String() args) {
		// 1. 사칙연산 우선순위
		System.out.println(1 + 2 * 3); // 곱셈이 높음!
!
//2. 단항 연산자 우선순위 int a = 10; System.out.println(++a * 10); //단항이 높다!
// 3. 산술 논리 복합될때 System.out.println(3 + 4 > 5); // 산술이 높음, 7 > 5 = true System.out.println((3 + 4) == 5); // 괄호를 통해 우선순위 명시적으로 사용 권장!
// 결론: 복잡하거나 헷갈리면 괄호() 써라!
} }

2023년 3월 16일 – 제어(If 문, Swtich 문, 루프 문, 분기 문)

if 문

package com.multi.ex01.conditional;

public class IfStatement1 {
		// if문 문법
		// if(조건식1) {
		// 		(조건식1이 참일때 실행되는 문장)
		// }
		// else if(조건식2){
		// 		(조건식2가 참일때 실행되는 문장)
		// }
		// .....
		// else {
		// 		(모든 조건이 해당되지 않을때 실행되는 문장)
		// }
		//
		// 조합1 : if
		// 조합2 : if - else
		// 조합3 : if - else if - else
		// 조합4 : if - else if
	
	public static void main(String() args) {
		int a = 6;
		
		// 가장 기본적인 if문 스타일
		if(a == 6) {
			System.out.println("6입니다.

"); } // if - else문 java 스타일 if(a % 2 == 0) { System.out.println("짝수입니다"); } else { System.out.println("홀수입니다"); } // if - else문의 c 스타일 (고전 스타일), 추천 X if(a % 2 == 0) { System.out.println("짝수입니다"); } else { System.out.println("홀수입니다"); } // 중괄호가 없어도 if문 활용 가능!
// 단, if문이나 else문의 바로 아래 한줄만 실행 // * 권장하지 않는다!
!
!
if(a % 2 == 0) System.out.println("짝수입니다"); else System.out.println("홀수입니다"); } } import java.util.Scanner; public class IfStatement2 { public static void main(String() args) { Scanner sc = new Scanner(System.in); System.out.println("숫자를 입력해주세요."); int value = sc.nextInt(); //양수, 0, 음수 판별하는 방법 if(value > 0) { System.out.println("양수입니다"); } else if (value ==0) { System.out.println("0입니다"); } else { System.out.println("음수입니다"); } // 100, 1000, 10000 보다 작거나 10000보다 큰수를 구별 if(value < 100) { System.out.println("100보다 작습니다"); } else if (value < 1000) { System.out.println("1000보다 작습니다"); } else if (value < 10000) { System.out.println("10000보다 작습니다"); } else { /*else if (value >= 10000)*/ System.out.println("10000이거나 10000보다 큰수입니다"); } if (value > 10000) { System.out.println("10000보다 큰수입니다"); } else if(value <= 10000 && value > 1000) { System.out.println("10000보다 작습니다"); }else if(value <= 1000 && value > 100) { System.out.println("1000보다 작습니다"); } else { System.out.println("100보다 작습니다"); } // 결론: 순서를 정리하면 깔끔하게 짤 수 있고, 순서가 잘못된 경우 조건절이 복잡해진다!
} } import java.util.Scanner; public class IfStatement3 { //강사의 if문 스타일 // 1. 예외를 먼저 if + return 문으로 필터링한다 // 2. 정상적인 상황을 아래에 타이핑하여 코드를 구성한다.

(0 level로) // 이 스타일의 장점: 코드의 복잡도가 줄어든다!
(간결해짐) public static void main(String() args) { //로그인 기능 //ID를 입력 받고 3글자 미만이면 "id가 짧습니다" -> 실패 //PW를 입력 받고 8글자 미만이면 실패, PW에 ID가 포함되어 있으면 실패 Scanner sc = new Scanner(System.in); System.out.println("ID를 입력해주세요."); String id = sc.nextLine(); // 스파게티 코드에 가깝다 -> 아래 스타일처럼 나오면 리팩토링이 필요하다 if(id.length() > 3) { System.out.println("pw를 입력해주세요"); String pw = sc.nextLine(); if(pw.length() < 8) { System.out.println("pw가 짧습니다"); } else { if(pw.contains(id) == true) { System.out.println("pw에 아이디가 포함되어 있습니다"); } else { System.out.println("로그인에 성공했습니다"); } } } else { System.out.println("id가 짧습니다.

"); } } } import java.util.Scanner; public class IfStatement4 { //강사의 if문 스타일 // 1. 예외를 먼저 if + return 문으로 필터링한다 // 2. 정상적인 상황을 아래에 타이핑하여 코드를 구성한다.

(0 level로) // 이 스타일의 장점: 코드의 복잡도가 줄어든다!
(간결해짐) public static void main(String() args) { //로그인 기능 //ID를 입력 받고 3글자 미만이면 "id가 짧습니다" -> 실패 //PW를 입력 받고 8글자 미만이면 실패, PW에 ID가 포함되어 있으면 실패 Scanner sc = new Scanner(System.in); System.out.println("ID를 입력해주세요."); String id = sc.nextLine(); if(id.length() < 3) { System.out.println("ID가 짧습니다.

"); return; //main(메소드)를 종료하는 키워드 } System.out.println("PW를 입력해주세요."); String pw = sc.nextLine(); // // if(pw.length() < 8) { // System.out.println("8글자 미만입니다.

"); // return; // } // // if(pw.contains(id) == true) { // System.out.println("PW에 ID가 포함되어 있습니다"); // return; // } if(pw.length() < 8 || pw.contains(id) == true) { System.out.println("PW가 짧거나 PW에 아이디가 포함되어 있습니다!
"); return; } //로그인 성공 상태 = 정상적인 상태 System.out.println("로그인에 성공하였습니다.

"); } }

switch 문

package com.multi.ex01.conditional;

public class SwitchStatement1 {
	
	public static void main(String() args) {
		// 점수가 1등급 ~ 4등급으로 변환하는 방법
		// 1등급: 100 ~ 80점, 2등급 80 ~ 60점 ...

		double score = 70.3;
		int grade = (int)(score / 20);
		
		// switch (이곳에 사용 가능한 Type : int, char, String, (열거형...) ) // double(실수)는 안됨!
switch (grade) { case 5: // 100점 case 4: // 100점 미만 ~ 80점 System.out.println("1등급 입니다"); break; case 3: // 80점 미만 ~ 60점 이상 System.out.println("2등급 입니다"); break; case 2: // 60점 미만, 40점 이상 System.out.println("3등급 입니다"); break; case 1: // 40점 미만, 20점 이상 case 0: // 20점 미만, 0점 이상 System.out.println("4등급 입니다"); break; default : // 예외값 처리 System.out.println(grade + "는 예외값입니다.

"); // 끝은 break문이 필요 없다!
} } } import java.util.Scanner; public class SwitchStatement2 { public static void main(String() args) { // 전공성적 입력받기 // ABCDF Scanner sc = new Scanner(System.in); System.out.println("전공성적을 입력해주세요!
"); char grade = sc.nextLine().charAt(0); // 앞에 한글자 가져오기!
switch(grade) { case 'A' : case 'a' : System.out.println("A학점입니다.

"); break; case 'B' : case 'b' : System.out.println("B학점입니다.

"); break; case 'C' : case 'c' : System.out.println("C학점입니다.

"); break; case 'D' : case 'd' : System.out.println("D학점입니다.

"); break; default : System.out.println("F학점입니다.

"); break; } } } import java.util.Scanner; public class SwitchStatement3 { // 상수를 모든 영역에서 공통적으로 활용할때 사용하는 글로벌 변수 public static final int MEN = 1; public static final int WOMEN = 2; public static final int OTHER = 3; public static void main(String() args) { // 성별을 입력받아서 남성, 여성, 그리고 제3의 성까지 구분하고 코드 System.out.println("성별을 입력해주세요!
"); Scanner sc = new Scanner(System.in); String gender = sc.nextLine(); int genderValue = 0; switch(gender) { case "남" : case "남자" : case "남성" : case "소년" : case "아저씨" : genderValue = MEN; break; case "여" : case "여자" : case "여성" : case "소녀" : genderValue = WOMEN; break; default : genderValue = OTHER; } if(genderValue == MEN) { System.out.println("남성입니다.

"); } else if(genderValue == WOMEN) { System.out.println("여성입니다.

"); } else { System.out.println("제3의 성입니다.

"); } } }

루프 문

package com.multi.ex02.loop;

public class LoopStatement1 {

	public static void myFirstWhileLoop() {
		int count = 0;
		while (true) { // true인 경우를 무한 반복문 혹은 무한 루프문이라고 한다.

System.out.println("무한 반복문" + count++); } } public static void testWhileLoop() { int i = 0; // 초기화문, i = index의 약자 System.out.println("while 루프 시작"); while (i < 10) { // 조건절, 동작하는 논리식, i는 0 ~ 9까지 돌고, 10은 도달하지 않는다!
System.out.println(i++); } System.out.println("while 루프 끝"); // while문이 활용되는 케이스 // 1. 무한루프문 // 2. 끝이 정해지지 않은 탐색이 필요할때!
아래와 같은 케이스 // 133의 3번째 배수는 몇인가? int count = 0; while (true) { i++; if (i % 133 == 0) { count++; if (count == 3) { System.out.println(i); break; } } } } // doWhile 잘 안씀 // doWhile은 논리값이 틀려도 최초 한번 실행시켜주는 문법 public static void testDoWhileLoop() { int i = 0; do { System.out.println(i++); } while (i < 10); System.out.println("do-While문 끝!
"); i = 100; do { System.out.println("최초로 한번만 실행되는 출력문!
"); } while (i < 10); } // for문★★★★★ 제일 많이 활용되는 반복문!
public static void testForLoop() { // 이 패턴을 그대로 손으로 외울때까지 쳐보는것을 권장 // 0부터 시작하고 10까지 도달하지 않는 for문 for (int i = 0; i < 10; i++) { System.out.println(i); } System.out.println("루프 끝1!
"); // 1 ~ 10까지 루프를 돌리고 싶을때 // 패턴 1 -> 추천하지 않는 문법!
why? 배열 index와 일치하지 않아서!
// int i = 0; // 라인을 줄이기 위해 for문 안으로 들어감!
for (int i = 1; i <= 10; i++) { // int i는 반복문에서 돌아가는 지역 변수!
System.out.println(i); } System.out.println("루프 끝2!
"); // 패턴 2 -> 항상 기본형을 타이핑하고 i를 조작하여 출력하는 것을 권장!
for (int i = 0; i < 10; i++) {// 0 ~ 9 -> 1 ~ 10? System.out.println(i + 1); // i++이 아님 } System.out.println("루프 끝3!
"); } public static void main(String() args) { // myFirstWhileLoop(); //메소드(함수) 호출(Call)하는 방법 // testWhileLoop(); // testDoWhileLoop(); testForLoop(); } } public class LoopStatement2 { // 0 ~ 9까지 홀짝 세기를 while, do-while, for문으로 구현하기 public static void testWhileLoop() { int i =0; while(i < 10) { if(i % 2 == 0) { System.out.println(i + "는 짝수입니다.

"); } else { System.out.println(i + "는 홀수입니다"); } i++; } } public static void testDoWhileLoop() { int i = 0; do { if (i % 2 == 0) { System.out.println(i + "는 짝수입니다.

"); } else { System.out.println(i + "는 홀수입니다"); } i++; } while (i < 10); } public static void testForLoop() { for(int i = 0; i < 10; i++) { //기계적으로 나와야하는 문장!
!
!
!
★★★★★★ if (i % 2 == 0) { System.out.println(i + "는 짝수입니다.

"); } else { System.out.println(i + "는 홀수입니다"); } } } public static void main(String() args) { testWhileLoop(); // testDoWhileLoop(); // testForLoop(); } } public class LoopStatement3_GuGuDan { public static void main(String() args) { // 구구단은 이차원 for문으로 구성되야 한다 (반복문이 중첩되야 한다!
!
) // Step1. 2단 for문을 기계적으로 완성한다.

단, 밖은 i로 안은 j로 변수 선언, 참고 i -> j -> k for(int i = 0; i < 10; i++) { for(int j = 0; j < 10; j++) { // System.out.println(i + "X" + j + " = " + (i*j)); } } // Step2. 출력을 해보고 i와 j의 시작점과 끝점을 조절하면서 구구단을 완성한다.

for(int i = 2; i < 10; i++) { for(int j = 1; j < 10; j++) { // System.out.println(i + "X" + j + " = " + (i*j)); } } // Step3. 안쪽 반복문 위 아래로 공간이 있다는 것을 활용하자!
!
-> 데코레이션 for(int i = 2; i < 10; i++) { System.out.println("--------" + i + "단 시작!
---------"); for(int j = 1; j < 10; j++) { System.out.println(i + "X" + j + " = " + (i*j)); } System.out.println("------------------------\n"); } } } public class LoopStatement4 { public static void main(String() args) { // for문 응용 -> 2씩 증가하는 반복문 for(int i = 0; i < 10; i += 2) { System.out.println(i); } // for문 조건문 지정 안하기 for(int i = 0;; i +=2) { System.out.println(i); if(i == 100) { break; } } // for문 무한루프문 -> 권장되지 않음 for(;;) { System.out.println("무한루프"); } } }

분기문

package com.multi.ex03.branch;

public class BranchStatement1 {

	// 분기문 2가지
	// continue : 반복문에서 흐름을 스킵하는고 위로 올라가는 문장 (단, 반복문은 끝나지 않고 다음 스탭으로 넘어감!
) // break : 반복문을 벗어나는 문장 (끝나는 문장) // 반복문 분기를 종료시키는 3가지 방법 // break : 반복문이 종료되는 문장 -> 반복문은 끝나지만 반복문 아래가 계속 실행 가능 // return : 반복문이 포함된 함수를 종료하는 문장 -> 함수 자체가 종료되는 문장 // System.exit(0) : 프로그램 종료!
, 권장하지 않음. public static void main(String() args) { // 짝수가 아닌 31의 배수를 찾아본다.

범위 : 1 ~ 1000 // 총 10개가 찾아지면 10번째 수를 출력하고 끝낸다.

int count = 0; for (int i = 0; i <= 1000; i++) { if (i % 2 == 0) { // 짝수이면 Skip 필요!
continue; // 해당 문장을 만나면 아래를 실행하지 않고 i++로 이동 } // 홀수만 들어온다!
if (i % 31 == 0) { // 31의 배수 찾는 방법 count++; if(count == 10) { System.out.println(i); // 10번째 31의 배수 출력!
break; // 반복문을 종료시키는 키워드 // return;// 메소드를 종료시키는 문장, main 메소드 밖으로 나간다!
-> 밑의 count가 출력되지 않음!
(게임 종료 버튼) // System.exit(0); // 프로그램 자체를 종료시키는 문장!
alt + F4 } } } System.out.println("count: " + count); } } import java.util.Random; import java.util.Scanner; public class BranchStatement2 { public static void main(String() args) { // 숫자 1 ~ 10까지 랜덤으로 숫자 하나를 뽑고, // 여러분들이 5번까지 맞춰서 이기고 지는 게임 Scanner sc = new Scanner(System.in); // int randomInt = new Random().nextInt(10); // 0 ~ 9까지 랜덤으로 가져올때 -> 문제에선 틀린 값!
// 0 1 2 3 4 5 6 7 8 9 // 0 = 가위 , 1 = 바위, 2 = 보 int randomInt = new Random().nextInt(10) + 1; // 1 ~ 10까지 랜덤한 숫자가 뽑힌다.

// System.out.println(randomInt); // 랜덤 숫자 출력하는 곳 char randomChar = (char)('A' + new Random().nextInt(5)); // 램덤 문자열 뽑을때!
// System.out.println(randomChar); //랜덤 문자열 출력하는곳 // 1 2 3 4 5 6 7 8 9 10 // int randomInt = new Random().nextInt(11); // ? -> 넥슨 사태가 일어난다!
!
확률조작... int i = 5; // 기회 5번!
boolean isWin = false; // flag = 깃발 while(i > 0) { // 5 4 3 2 1 ... System.out.println("1 ~ 10 숫자 하나를 선택해주세요!
"); // int pickNum = sc.nextInt(); int pickNum = Integer.parseInt(sc.nextLine()); if(pickNum < 1 || pickNum > 10) { System.out.println("잘못된 숫자가 입력되었습니다.

다시 선택해주세요. : " + pickNum); continue; // count를 감소시키지 않고 기회 더준다!
} if(pickNum == randomInt) { isWin = true; break; } else { System.out.println("틀렸습니다!
" + (i-1) + "번 남았습니다.

"); } i--; } if(isWin == true) { System.out.println("맞췄습니다.

당신이 승리하였습니다.

"); }else { System.out.println("당신은 루저입니다!
"); } System.out.println("선택 된 숫자 : " + randomInt); } }

2023년 3월 17일 – 배열(기본 배열, 복사 배열, 깊은 배열)

기본 배열

package com.multi.ex01.ArrayBasic;

import java.util.Arrays;

// 배열
public class ArrayBasic {

	public static void main(String() args) {
		System.out.println("1. 배열 기본 생성법");
		
		int() array = null; // null로 초기화가 가능하다? 참조형 변수
		array = new int(10); // 10개 공간을 heap에 생성하고, 0으로 초기화하는 문장
		// 만일 배열을 생성하지 않고 사용하는 경우 -> NullPointerException: Cannot load from int array because "array" is null
		
		System.out.println(array(0));
		System.out.println(array(1));
		
		// 사용자가 직접 배열에 접근하여 초기화하는 방법
		array(0) = 0;
		array(1) = 1;
		array(2) = 2;
		
		//반복문으로 초기화하는 방법
		for(int i = 0; i < 10; i++) { // 정상 문법, in(10)에서 10개 생성했으니 10을 사용하면 된다!
// for(int i = 0; i <= 9; i++) { // 권장하지 않는 문법!
사용하지 말것!
// for(int i = 0; i <= 10; i++) { // ArrayIndexOutOfBoundsException : 범위를 벗어난 에러 array(i) = i; System.out.print(array(i) + " "); } System.out.println(); System.out.println("2. 배열 직접 선언하는 방법"); int() array2 = new int(10); // 표준적인 배열 선언법 ★★★★★ int() array3 = {1,2,3,4,5,6,7,8,9,10, 11, 12}; // 직접 선언법 ★★★★★ int() array4 = new int() {1,2,3,4,5,6,7,8,9,10}; // int() array5 = new int(10) {1,2,3,4,5,6,7,8,9,10}; // 크기를 지정하면 에러 발생!
// Hard 코딩: 사람이 직접 상수나 특정 데이터 값을 기입하는 방법 // Hard 코딩은 약간 부정적인 표현법으로 문제가 발생할 수 있음. // 문제점: 동적인 상황에서 프로그램의 오류를 발생시킴!
//아래의 'i < 20' 이 부분이 하드 코딩되어 있다.

// for(int i = 0; i < 20; i++) { // 만일 크게 지정한 경우 문제 발생!
// System.out.println(array3(i)); // } // 배열을 순회할 경우 아래의 표현법을 외워야 한다!
!
★★★★★ // array3.length: 배열의 크기를 담은 변수 for(int i = 0; i < array3.length; i++) { System.out.print(array3(i) + " "); } System.out.println("3. 배열 표준적인 사용법"); int() array5 = new int(12); // 배열 선언 및 크기를 12로 초기화하는 문장 for(int i = 0; i < array5.length; i++) { array5(i) = i; } // 간단하게 출력하는 방법 System.out.println(Arrays.toString(array5)); // 문자열 배열 String() strArray1 = new String(5); String() strArray2 = {"사과", "바나나", "딸기", "멜론"}; System.out.println(Arrays.toString(strArray2)); } }

어레이 복사

package com.multi.ex02.ArrayCopy;

import java.util.Arrays;

public class ArrayCopy {
	// 얕은 복사 : 배열의 주소지만 복사하여 동일한 배열을 활용하는 기법 , 바로가기, link
	// 깊은 복사 : 배열의 주소지가 아니고, 실제 배열을 물리적으로 복사하는 기법, 복사하기, copy
	
	public static void main(String() args) {
		//얕은 복사 해보기
		int() array1 = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
		int() array2 = array1; //얕은 복사 실행!
Shallow copy System.out.println("변경 전"); System.out.println(Arrays.toString(array1)); System.out.println(Arrays.toString(array2)); array1(0) = 5; System.out.println("변경 후"); System.out.println(Arrays.toString(array1)); System.out.println(Arrays.toString(array2)); //깊은 복사 해보기, Deep copy ★★★★★ int() array3 = null; System.out.println("깊은 복사 시작!
"); // 1. 고전적인 방법 = 손으로 쓰는 방법 array3 = new int(array1.length); // 복사 대상과 길이를 똑같이 생성 for(int i = 0; i < array1.length; i++) { array3(i) = array1(i); // 복사!
} System.out.println(Arrays.toString(array3)); // 2. 복사할때 제일 많이 쓰는 문장 ★★★★★ 매우 유용 -> 길이를 조절할 수 있음 array3 = Arrays.copyOf(array1, array1.length); System.out.println(Arrays.toString(array3)); // 3. 그다음 방법 array3 = array1.clone(); // 변경 array1(0) = 10; array3(0) = 1000; System.out.println("변경 후 1, 3"); System.out.println(Arrays.toString(array1)); System.out.println(Arrays.toString(array3)); } }

행 심화

package com.multi.ex03.Arrays;

import java.util.Arrays;
import java.util.Random;

public class ArraysTest {

		public static void main(String() args) {
			int() array = new int(10);
//			Random r = new Random(System.currentTimeMillis());
			Random r = new Random();
			
			
			//난수로 초기화하는 방법
			for(int i = 0; i < array.length; i++) {
				array(i) = r.nextInt(array.length);
			}
			
			//출력하는 방법
			System.out.println(Arrays.toString(array));
			
			
			//값을 찾는 방법1 - 직접 구현
			int value = 5;
			int index = -1;
			for(int i = 0; i <array.length; i++) {
				if(array(i) == value) {
					index = i;
					System.out.println("탐색 완료!
"); break; } } if(index >= 0) { System.out.println("탐색 완료!
: " + index); } else { System.out.println("찾지 못했습니다"); } //값을 정렬하는 방법 Arrays.sort(array); System.out.println(Arrays.toString(array)); //값을 찾는 방법2 - binarySearch() // 중복 있으면 안됨!
int index2 = Arrays.binarySearch(array, value); // 값을 찾으면 index를 반환하고, 없으면 -1을 반환함 System.out.println(index2); if(index2 >= 0) { System.out.println("탐색 완료!
: " + index2); } else { System.out.println("찾지 못했습니다"); } } }