조건문
•
실습 (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
복사