Backend
home

2024. 7. 10

조건문

실습 (if ~ else 문)
package condition; public class IfPractice { public static void main(String[] args) { int score = (int) (Math.random() * 30) + 71; // 70 ~ 100까지의 숫자 중 랜덤숫자 반환 System.out.println("점수 : " + score); String grade = "F"; // 중첩 if를 이용하여 문제를 풀 것. // 바깥 if : 90점 이상은 A, 80점 이상은 B, 70점 이상은 C 등급을 부여한다. // 중첩 if : 95점, 85점, 75점을 기준으로 등급에 +를 붙인다. if (score >= 90) { grade = "A"; if (score >= 95) { grade = "A+"; } } else if (score >= 80) { grade = "B"; if (score >= 85) { grade = "B+"; } } else if (score >= 70) { grade = "C"; if (score >= 75) { grade = "C+"; } } System.out.println("학점 : " + grade); } }
Java
복사
실습 (switch ~ case)
package condition; public class SwitchExample { public static void main(String[] args) { String id = "990101-1234567"; int genderNum = Integer.parseInt(id.substring(7, 8)); int genderNum2 = id.charAt(7) - '0'; System.out.println(genderNum); System.out.println(genderNum2); switch (genderNum % 2) { case 0: System.out.println("여성입니다."); break; case 1: System.out.println("남성입니다."); break; } } }
Java
복사
실습 - 개선된 switch문 (Java 12부터 가능)
package condition; import java.util.Scanner; public class SwitchExample3 { public static void main(String[] args) { // char grade = (char) ((Math.random() * 10) + 'A'); Scanner sc = new Scanner(System.in); System.out.print("등급을 입력하세요: "); char grade = sc.nextLine().charAt(0); System.out.println("등급: " + grade); switch (grade) { case 'A', 'a' -> { System.out.println("훌륭합니다!"); } case 'B', 'b' -> { System.out.println("좋습니다!"); } case 'C', 'c' -> { System.out.println("나쁘지 않습니다!"); } case 'D', 'd' -> { System.out.println("조금 아쉽습니다!"); } case 'E', 'e' -> { System.out.println("나쁩니다!"); } case 'F', 'f' -> { System.out.println("실패했습니다!"); } default -> System.out.println("잘못된 등급입니다!"); } } }
Java
복사
개선된 switch 문
스위치된 값을 변수에 바로 대입할 수 있다.
단일 값일 경우 화살표 오른쪽에 바로 값을 기술하면 되고, 중괄호를 사용할 경우에는 yield 키워드를 통해 값을 지정하면 된다.
yield 키워드를 사용할 경우 default가 반드시 존재해야 한다.
코드
package condition; import java.util.Scanner; public class SwitchExample3 { public static void main(String[] args) { // char grade = (char) ((Math.random() * 10) + 'A'); Scanner sc = new Scanner(System.in); System.out.print("등급을 입력하세요: "); char grade = sc.nextLine().charAt(0); System.out.println("등급: " + grade); int score = switch(grade) { case 'A', 'a' -> 100; case 'B', 'b' -> 90; case 'C', 'c' -> 80; case 'D', 'd' -> 70; case 'E', 'e' -> { yield 60; } default -> { yield 0; } }; System.out.println("score: " + score); } }
Java
복사

반복문

for문
package loop; public class ForExample { public static void main(String[] args) { // System.out.println("안녕하세요"); for (int i = 0; i < 10; i++) { System.out.println("안녕하세요"); } System.out.println("=======1======"); for (int i = 1; i <= 10; i++) { System.out.println("안녕하세요"); } System.out.println("=======2======"); for (int i = 1; i < 11; i++) { System.out.println("안녕하세요"); } System.out.println("=======3======"); for (int i = 10; i > 0; i--) { System.out.println("안녕하세요"); } System.out.println("=======4======"); for (int i = 10; i >= 1; i--) { System.out.println("안녕하세요"); } } }
Java
복사
삼각수
package loop; public class ForExample2 { public static void main(String[] args) { // 삼각수 개념, 변수 두 개 사용 가능 for (int num = 1, tNum = 1; num <= 5; tNum += ++num) { System.out.println("숫자 : " + num + ", 삼각수 : " + tNum); } } }
Java
복사
구구단
package loop; public class ForPractice { public static void main(String[] args) { for (int i = 2; i < 10; i++) { System.out.println(); System.out.println(i + "단"); for (int j = 1; j < 10; j++) { System.out.println(i + " x " + j + " = " + i * j); } } } }
Java
복사
while문
package loop; import java.util.Scanner; public class WhileExample3 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); int speed = 0; while (true) { System.out.println("---".repeat(8)); System.out.println("1. 증속 | 2. 감속 | 3. 중지"); System.out.println("---".repeat(8)); System.out.print("선택 : "); int num = sc.nextInt(); if (num == 1) { speed++; System.out.println("현재 속도 = " + speed); } else if (num == 2) { speed--; System.out.println("현재 속도 = " + speed); } else if (num == 3) { break; } else if (num < 0){ System.out.println("속도는 음수가 아닙니다."); } } System.out.println("프로그램 종료"); } }
Java
복사
do - while 문
package loop; import java.util.Scanner; public class DoWhileExample { public static void main(String[] args) { System.out.println("메시지를 입력하세요."); System.out.println("프로그램을 종료하려면 q를 입력하세요."); Scanner sc = new Scanner(System.in); String inputStr; do { System.out.print("입력: "); inputStr = sc.nextLine(); System.out.println(inputStr + " 을 입력하셨습니다."); } while (!inputStr.equals("q")); System.out.println("프로그램 종료"); } }
Java
복사
break문
package loop; public class BreakExample { public static void main(String[] args) { System.out.println("주사위가 6이 나오면 프로그램을 종료합니다."); while (true) { System.out.println("주사위를 굴립니다."); int num = (int) (Math.random() * 6) + 1; System.out.println(num); if (num == 6) { System.out.println("6이 나왔습니다."); break; } } System.out.println("프로그램 종료"); } }
Java
복사
break문 - 중첩 반복문에서 한 번에 빠져나오는 방법
package loop; // for 문 옆에 다음과 같이 작성 public class BreakExample3 { public static void main(String[] args) { Outter: for (char upper = 'A'; upper <= 'Z'; upper++) { for (char lower = 'a'; lower < 'z'; lower++) { System.out.println(upper + " - " + lower); if (lower == 'c') { break Outter; } } } } }
Java
복사

실습

실습 1 - 1부터 20까지의 2의 배수, 3의 배수가 아닌 수들의 합 출력
package com.statement.condition; public class Practice1 { public static void main(String[] args) { int sum = 0; for (int i = 1; i <= 20; i++) { if ((i % 2 != 0) && (i % 3 != 0)) { sum += i; } } System.out.println(sum); } }
Java
복사
실습 2 - for문과 동일한 while문 구현
package com.statement.condition; public class Practice2 { public static void main(String[] args) { // for(int i = 0; i <= 10; i++) { // for (int j = 0; j <= i; j++) { // System.out.print("*"); // } // System.out.println(); // } int i = 0; while (i <= 10) { int j = 0; while (j <= i) { System.out.print("*"); j++; } System.out.println(); i++; } } }
Java
복사
실습 3 - 두 수를 더해 6이 나오는 경우의 수 출력
package com.statement.condition; public class Practice3 { public static void main(String[] args) { int[] box1 = {1, 2, 3, 4, 5, 6}; int[] box2 = {1, 2, 3, 4, 5, 6}; int count = 0; for (int k : box1) { for (int i : box2) { if (k + i == 6) { count += 1; } } } System.out.println(count); } }
Java
복사
실습 4 - 세 개의 주사위를 던졌을때,눈의 곱이 3의 배수인 값을 출력하는 프로그램
package com.statement.condition; public class Practice4 { public static void main(String[] args) { for (int i = 1; i <= 6; i++) { for (int j = 1; j <= 6; j++) { for (int k = 1; k <= 6; k++) { if (i % 3 == 0 || j % 3 == 0 || k % 3 == 0) { System.out.println(i + "*" + j + "*" + k + " = " + i * j * k); break; } } } } } }
Java
복사
실습 5 - 1부터 100까지 더하는 프로그램 (Scanner로 1자리 정수형 데이터 입력 받은 수의 배수만 더하기)
package com.statement.condition; import java.util.Scanner; public class Practice5 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("한 자리 정수 입력 : "); int inputNum = sc.nextInt(); int sum = 0; for (int i = 1; i <= 100; i++) { if (i % inputNum == 0) { sum += i; } } System.out.println(sum); } }
Java
복사
실습 6 - 1부터 100까지 반복하면서 3의 배수는 three, 5의 배수는 five, 7의 배수는 seven 값을 출력
package com.statement.condition; public class Practice6 { public static void main(String[] args) { for (int i = 1; i <= 100; i++) { String result = i + "" ; if (i % 3 == 0) { result += " three"; } if (i % 5 == 0) { result += " five"; } if (i % 7 == 0) { result += " seven"; } System.out.println(result); } } }
Java
복사
실습 7
package com.statement.condition; import java.util.Scanner; public class Practice7 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("정수를 입력하세요 : "); int num = sc.nextInt(); while (num < 0 || num == 0) { System.out.println("다시 입력하세요 : "); num = sc.nextInt(); } int sum = 0; for (int i = 1; i <= num; i++) { sum += i; } System.out.println(sum); } }
Java
복사

참조 타입

Java의 데이터 타입은 크게 기본 타입(Primitive Type)과 참조 타입(Reference Type) 으로 분류된다.
참조 타입이란 객체의 메모리 주소를 참조하는 타입으로 배열, 열거, 클래스, 인터페이스 타입이 있다.
참조 타입으로 선언된 변수는 객체가 생성된 메모리 주소를 저장한다.
변수들은 모두 Stack 이라는 메모리 영역에 생성된다.
메소드 영역:
바이트코드 파일 내용이 저장되는 영역
정적 필드, 상수, 메소드 코드, 생성자 코드 등이 저장된다.
힙 영역:
객체가 생성되는 영역
객체의 메모리 주소는 메소드 영역과 스택 영역에서 참조된다.
스택 영역:
메소드 호출할 때마다 생성되는 프레임이 저장되는 영역
프레임 내부의 변수 스택에 변수가 생성되고 제거된다.
실습
package com.reference; public class ReferenceExample { public static void main(String[] args) { int[] arr1; int[] arr2; int[] arr3; int[] arr4 = {1, 2, 3}; arr1 = new int[] {1, 2, 3}; arr2 = new int[] {1, 2, 3}; arr3 = arr2; System.out.println(arr1); System.out.println(arr2); System.out.println(arr3); System.out.println(arr4); System.out.println(arr1 == arr2); System.out.println(arr2 == arr3); System.out.println(arr1 == arr3); System.out.println(arr3 == arr4); System.out.println(arr1 == arr4); System.out.println(arr2 == arr4); System.out.println("==============="); System.out.println(arr1.equals(arr2)); System.out.println(arr1.equals(arr3)); System.out.println(arr1.equals(arr4)); System.out.println(arr2.equals(arr3)); System.out.println(arr2.equals(arr4)); System.out.println(arr3.equals(arr4)); } }
Java
복사
package com.reference; public class ReferenceExample2 { public static void main(String[] args) { String name = "minsung"; String noName = null; // 참조 데이터 타입이여도 null과 비교할 때는 비교 연산자로 비교가 가능하다. System.out.println(name == noName); System.out.println(name != noName); // 참조 데이터 타입에서 가장 많이 발생하는 Exception은 NullPointerException이다. // null인 상태에서 접근할 때 발생한다. System.out.println(noName.charAt(0)); } }
Java
복사

String

실습
package com.reference.string; public class StringExample { public static void main(String[] args) { String subject = "자바 프로그래밍"; char var = subject.charAt(3); System.out.println(var); } } // ==================================================== public class StringExample { public static void main(String[] args) { String subject = "자바 프로그래밍"; char var = subject.charAt(3); int len = subject.length(); System.out.println(var); System.out.println(len); for (int i = 0; i < subject.length(); i++) { System.out.println(subject.charAt(i)); } } }
Java
복사
package com.reference.string; import java.util.Scanner; public class StringPractice { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.println("입력한 메시지를 한 글자씩 출력합니다."); System.out.print("메시지를 입력하세요 : "); String msg = sc.nextLine(); for (int i = 0; i < msg.length(); i++) { char var = msg.charAt(i); System.out.println(var); } } }
Java
복사
replace
public class StringExample2 { public static void main(String[] args) { String subject = "자바 프로그래밍 : 자바라는 언어를 배웁니다." ; String subject2 = subject.replace("자바", "Java"); // String subject2 = subject.replaceFirst("자바", "Java"); System.out.println(subject); System.out.println(subject2); } }
Java
복사
substring
public class StringExample2 { public static void main(String[] args) { String subject = "자바 프로그래밍 : 자바라는 언어를 배웁니다." ; String subject2 = subject.replace("자바", "Java"); // String subject2 = subject.replaceFirst("자바", "Java"); System.out.println(subject); System.out.println(subject2); } } // ======================================================================= package com.reference.string; public class StringExample3 { public static void main(String[] args) { String address = "hms@java.co.kr"; String userId = address.substring(0, 3); String companyName = address.substring(4, 8); String domainAddr = address.substring(4); System.out.println("userId: " + userId); System.out.println("companyName: " + companyName); System.out.println("domainAddr: " + domainAddr); } }
Java
복사
indexOf
public class StringExample4 { public static void main(String[] args) { String lyrics = "떳다 떳다 비행기 날아라 날아라"; int flyIndex = lyrics.indexOf("날아라"); System.out.println(flyIndex + "번째 글자: " + lyrics.charAt(flyIndex)); int highIndex = lyrics.indexOf("높이"); if (highIndex < 0) { System.out.println("없는 글자입니다."); } } }
Java
복사
contains
package com.reference.string; import java.util.Scanner; public class StringExample5 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("책 제목을 입력하세요: "); String title = sc.nextLine(); if (title.contains("자바") || title.contains("java") || title.contains("Java")) { System.out.println("Java와 관련된 책이군요."); } else { System.out.println("Java와 관련없는 책이군요."); } } }
Java
복사
split
public class StringExample6 { public static void main(String[] args) { String rainbow = "빨,주,노,초,파,남,보"; String[] rainbowArr = rainbow.split(","); // System.out.println(rainbowArr[0]); // System.out.println(rainbowArr[1]); // System.out.println(rainbowArr[2]); // System.out.println(rainbowArr[3]); // System.out.println(rainbowArr[4]); // System.out.println(rainbowArr[5]); // System.out.println(rainbowArr[6]); for (int i = 0; i < rainbowArr.length; i++) { System.out.println(rainbowArr[i]); } } }
Java
복사
문자열 개념 종합 실습
package com.reference.string; import java.util.Scanner; public class StringPractice2 { public static void main(String[] args) { // Scanner로 주민등록번호를 입력받아라 (991212-2001234) // 만약 자릿수가 맞지 않으면, 계속 입력받아라 // 자리수가 잘 맞다면, 태어난 월이 3~5월이면 "봄", 6~8월이면 "여름", 9~11월이면 "가을" 12~2월이면 "겨울" // 성별도 같이 출력하라 // 연도도 같이 출력하라 (00 ~ 24는 2000~2024, 나머지는 19XX) Scanner sc = new Scanner(System.in); while (true) { String id = sc.nextLine(); String season = ""; String gender = ""; String resultYear; int year = Integer.parseInt(id.substring(0, 2)); while (id.length() != 14) { System.out.println("다시 입력하세요: "); id = sc.nextLine(); } if (id.charAt(7) == '1') { gender = "남자"; } else if (id.charAt(7) == '2') { gender = "여자"; } switch (id.substring(2, 4)) { case "03", "04", "05" -> season = "봄"; case "06", "07", "08" -> season = "여름"; case "09", "10", "11" -> season = "가을"; case "12", "01", "02" -> season = "겨울"; } if (year >= 0 && year <= 24) { if (year == 0) { resultYear = "20" + "00"; } else { resultYear = "20" + year; } } else { resultYear = "19" + year; } System.out.println(resultYear + " - " + season + " - " + gender); break; } } }
Java
복사