Sec0401.java
package chap04;
import java.util.Scanner;
/**
* packageName : chap04
* fileName : Sec0401
* author : GGG
* date : 2023-09-19
* description :
* 요약 :
* if문 - if(조건문1){실행문1} else if(조건문2){실행문2} else{실행문3}
* => 조건문1 true 실행문1 실행되고 조건문2 true 실행문2가 실행되고
* 모두 아니면 실행문3
* switch문 - switch(변수) { case 값1: 실행문1;break; case 값2: 실행문2;break;
* default: 실행문3;break;
* }
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2023-09-19 GGG 최초 생성
*/
public class Sec0401 {
/**
* 예제 1 : 초기값이 90 이상이면 점수가 90보다 큽니다.
* 등급은 A 입니다. 출력
* 90 이하이면 점수가 90보다 작습니다.
* 등급은 B 입니다. 출력
*/
public void exam01() {
int score = 93; // 초기값
if (score >= 90) {
System.out.println("점수가 90보다 큽니다.\n등급은 A 입니다.");
} else {
System.out.println("점수가 90보다 큽니다.\n등급은 B 입니다.");
}
}
/**
* 자바 랜덤 함수 소개 하는 예제
* 랜덤 함수 : Math.random() : 0 ~ 1 사이의 숫자(실수)를 내보내기(return)
* 1 ~ 10 까지의 정수를 뽑기
* 가공 :
* 1 <= x < 11 의 정수 뽑기로 변환
* 1) 0.0 <= Math.random() < 1.0
* 2) 0.0 * 10 <= Math.random() * 10 < 1.0 * 10
* 3) (int)0.0 * 10 <= (int)Math.random() * 10 < (int)1.0 * 10
* => 0 <= (int)Math.random() * 10 < 10
* 4) 0 + 1 <= (int)Math.random() * 10 + 1 < 10 + 1
*/
public void exam04() {
// 예제 : 주사위를 던져서 나오는 숫자를 화면에 출력하세요
// 단 , 1 ~ 6까지의 숫자가 랜덤하게 나오는 것이 주사위
int num = (int) (Math.random() * 6) + 1;
// 조건문
if (num == 1) {
System.out.println("1번");
} else if (num == 2) {
System.out.println("2번");
} else if (num == 3) {
System.out.println("3번");
} else if (num == 4) {
System.out.println("4번");
} else if (num == 5) {
System.out.println("5번");
} else if (num == 6) {
System.out.println("6번");
}
}
/**
* switch 문을 이용해서 코딩하기
* 예제 : 부장이면 "700만원" 출력하고 , 과장이면 "500만원" 출력하고,
* 그외에는 "300만원" 을 출력하세요
*/
public void exam08() {
String position = "과장"; // 초기값
switch (position) {
case "부장":
System.out.println("700만원");
break;
case "과장":
System.out.println("500만원");
break;
default:
System.out.println("300만원");
}
}
}
결과
점수가 90보다 큽니다.
등급은 A 입니다.
4번
500만원
Sec0402.java
package chap04;
/**
* packageName : chap04
* fileName : Sec0402
* author : GGG
* date : 2023-09-19
* description : 반복문
* 요약 :
* for 문 : for(초기화식; 조건식; 증감식) {반복문;}
* => 조건식이 true 일때만 반복문이 실행됨
* while 문 : 초기화식;
* while(조건식) {
* 반복문;
* 증감식;
* }
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2023-09-19 GGG 최초 생성
*/
public class Sec0402 {
/**
* 예제 1 : 1 ~ 10까지 숫자를 화면에 출력하세요
* 단, 반복문 이용
*/
public void exam01() {
String a = "";
for (int i = 1; i <= 10; i++) {
a += i;
}
System.out.println(a);
}
/**
* 예제 2 : 1 ~ 100까지 합을 출력 : 반복문 이용
*/
public void exam02() {
int sum = 0;
for (int i = 1; i <= 100; i++) {
sum += i;
}
System.out.println(sum);
}
/**
* 예제 : 주사위 2편 : 주사위를 던져서 나오는 숫자를 계속 화면에 출력하되
* 6이 나오면 반복문을 중단하고 빠져나오세요
* 단, 빠져 나올때 프로그램종료 라고 출력하세요
* 랜덤함수 : int num = (int)(Math.random()*6) + 1;
* 힌트 : 무한루프 코딩후에 6이 나오면 break 빠져나오기
*/
public void exam08() {
while (true) { // 무한 루프
int num = (int) (Math.random() * 6) + 1; // 주사위 돌리기
// 주사위 숫자 화면 출력
System.out.println(num);
// TODO: 아래 완성하세요 : 6 나오면 빠져나가기
if (num == 6) {
break; // 반복문 강제 중단
}
}
// 프로그램 종료 화면 출력 : sout
System.out.println("프로그램 종료");
}
/**
* 예제 9: 1 ~ 10 사이의 수 중에서 짝수만 출력하는 코드 : continue 문 사용하기
* 힌트 : continue : 아래 실행을 skip하고 반복문 계속 진행시키기
*/
public void exam09() {
for (int i = 1; i <= 10; i++) {
if (i % 2 == 1) {
continue;
}
System.out.println(i);
}
}
public void exam10() {
Outter:
for (char upper = 'A'; upper <= 'Z'; upper++) {
for (char lower = 'a'; lower <= 'z'; lower++) {
System.out.println(upper + "-" + lower); // 화면 출력
// g 가 나오면 (안쪽/바깥쪽 모두) 반복문 중단
if (lower == 'g') {
break Outter; // 2중 반복문이 모두 중단됨
}
}
}
System.out.println("프로그램 종료");
}
}
결과
12345678910
5050
5
1
6
프로그램 종료
2
4
6
8
10
A-a
A-b
A-c
A-d
A-e
A-f
A-g
Verify04.java
package chap04;
/**
* packageName : chap04
* fileName : Verify04
* author : GGG
* date : 2023-09-19
* description : 4장 연습문제 : 조건문/반복문
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2023-09-19 GGG 최초 생성
*/
public class Verify04 {
/**
* for문을 이용해서 1부터 100까지의 정수 중에서
* 3의 배수의 총합을 구하는 코드를 작성해 보세요
*/
public void exam02() {
int sum = 0;
for (int i = 1; i <= 100 ; i++) {
if(i % 3 == 0) { // 3의 배수
sum = sum + i; // 누적합
}
}
// sum 출력 : sout
System.out.println(sum);
}
/**
* while문과 Math.random() 함수를 이용해서 2개의 주사위를 던졌을 때
* 나오는 눈을(눈1, 눈2) 형태로 출력하고,
* 눈의 합이 5가 아니면 계속 주사위를 던지고,
* 눈의 합이 5이면 실행을 멈추는 코드를 작성해 보세요.
* 힌트 : int num1 = (int) (Math.random() * 6) + 1;
* int num2 = (int) (Math.random() * 6) + 1;
*/
public void exam03() {
// 무한 루프 코드
while (true) {
// 주사위 2개
int num1 = (int) (Math.random() * 6) + 1; // 주사위 #1
int num2 = (int) (Math.random() * 6) + 1; // 주사위 #2
// (눈1, 눈2) 출력 : sout
System.out.println("(" + num1 + ", " + num2 + ")");
// 중단조건 : num1 + num2 == 5 중단
if((num1 + num2) == 5) {
break;
}
}
System.out.println("프로그램 종료");
}
/**
* 중첩 for문을 이용하여 방정식 4x + 5y = 60의 모든 해를 구해서 (x, y) 형태로 출력해 보세요.
* 단, x와 y는 10 이하의 자연수입니다.
* for(int x=1; x<=10; x++) {
* for(int y=1; y<=10; y++) {
* 4x + 5y = 60의 모든 해 구해서 출력
* }
* }
*/
public void exam04() {
for (int x = 1; x <= 10; x++) {
for (int y = 1; y <= 10 ; y++) {
// (4*x) + (5*y) == 60의 모든 해 구해서 출력
if((4 * x) + (5 * y) == 60) {
System.out.println("(" + x + "," + y + ")");
}
}
}
}
/**
* for문을 이용해서 다음과 같이 *를 출력하는 코드를 작성해 보세요.
* 출력 : * (1행(i) : * 1개(j)) i == j : 줄바꿈, j 는 i의 숫자만큼 반복문을 실행
* ** (2행(i) : * 2개(j)) i == j : 줄바꿈, j 는 i의 숫자만큼 반복문을 실행
* *** (3행(i) : * 3개(j)) i == j : 줄바꿈, j 는 i의 숫자만큼 반복문을 실행
* **** (4행 : * 4개) i == j : 줄바꿈, j 는 i의 숫자만큼 반복문을 실행
*/
public void exam05() {
for (int i = 1; i < 5; i++) {
for (int j = 1; j <= i; j++) {
System.out.print("*"); // 별출력 + 줄바꿈 안함
if(i == j) {
System.out.println(); // 줄바꿈
}
}
}
}
}
결과
1683
(6, 3)
(6, 4)
(3, 2)
프로그램 종료
(5,8)
(10,4)
*
**
***
****
Sec0501.java
package chap05;
/**
* packageName : chap05
* fileName : Sec0501
* author : GGG
* date : 2023-09-19
* description : 참조 자료형과 참조 변수
* 요약 :
* 기본 자료형 : int(4), long(8), float(4), double, boolean 자료형
* => 스택 방 : 값이 그대로 저장됨
* 참조 자료형 : String(문자열), 배열, 객체
* => 스택 방 : 주소(방번호) 값만 저장되고
* => 힙 방 : 값이 저장됨
* JVM(Java Virtual 머신) : 자바가상머신 : jdk (자바가상머신)
* 역할 : linux/windows(운영체제) 모든 곳에서 실행할 수 있게 만드는 프로그램
* 비교연산자(==) : 기본자료형에서는 값을 비교하고
* 참조자료형에서는 주소(방번호)를 비교하게 됨
* (스택방의 저장된 값을 비교함)
* null 포인트 에러(예외) : 프로그램을 강제 비정상 중단함
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2023-09-19 GGG 최초 생성
*/
public class Sec0501 {
/**
* 비교연산자(==) 와 equals 함수 예제
*/
public void stringEqualsExam() {
// 참조 자료형
// 참조자료형 객체변수 = new 생성자함수();
// 메모리에 랜덤한 주소(방번호)값으로 생성됨
String strVar1 = new String("신민철");
String strVar2 = new String("신민철");
// 주소(방번호) 비교 : 개발자 입장에서는 의미 없음
if(strVar1 == strVar2) {
System.out.println("두개의 주소가 같음");
} else {
System.out.println("두개의 주소가 다름");
}
// equals() 함수 사용 : 값을 비교하는 함수
if(strVar1.equals(strVar2) == true) {
System.out.println("두개의 값이 같음");
}
// null 포인터 예외(에러)
// 배열에서 null 에러
int[] intArray = null; // 방이 없음(공간 없음)
intArray[0] = 10; // 0번지 방에 10번을 넣으니 null 에러가 발생
// 객체에서 null 에러
String str = null; // 권장 코딩 : String str="";
// 문자열의 길이를 가져오는 함수 : 문자열.length()
System.out.println("총 문자수: " + str.length()); // null 에러 발생
}
}
결과
두개의 주소가 다름
두개의 값이 같음
Sec0502.java
package chap05;
import java.util.Arrays;
/**
* packageName : chap05
* fileName : Sec0502
* author : GGG
* date : 2023-09-19
* description : 배열
* 요약 :
* 배열 : 같은 자료형의 데이터를 연속된 공간에 나열하고 인덱스를 부여해 놓은 자료구조
* 인덱스 : 배열 항목에 붙인 번호, 0 ~ n 까지의 범위
* 배열 선언(정의) : 자료형[] 변수;
* 배열 생성 : 1) 자료형[] 변수 = {값1, ... 값n};
* 2) 자료형[] 변수 = new 자료형[길이];
* 3) 자료형[] 변수 = new 자료형[길이]{값1, ... 값n};
* 배열 길이 : 배열의 값의 개수, 배열변수.length (읽기 전용)
* 다차원 배열 : 배열 안에 또다른 배열이 있음
* 1) 자료형[][] 변수 = new 자료형[크기][크기];
* 2) 자료형[][] 변수 = {{값1...}, {값1...}};
* => for문 코딩 (2개사용)
* => int[][] arr = {{1,2,3},{4,5,6}}
* => 팁 ! : for(int i=1;i<=2;i++){
* for(int j=1; j<=3;j++) {
* }
* }
* 향상된 for 문 : for(자료형 변수 : 배열) {} => 자동으로 인덱스 증가
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2023-09-19 GGG 최초 생성
*/
public class Sec0502 {
/**
* 예제 : 학생 10명의 성적을 저장하고 평균값 구하기
*/
public void getStudent(){
// 배열의 초기값
int[] score = {83,84,85,86,87,88,89,90,91,92};
int sum = 0; // 합계 변수
// for문 단축키 : fori
for (int i = 0; i < 10; i++) {
sum = sum + score[i]; // 배열의 값 모두 더하기(누적합)
}
int avg = sum / 10; // 평균
// sout
System.out.println("sum =" + sum + ", avg="+avg);
}
/**
* 예제 2: 배열에서 함수의 매개변수로 전달시 주의점
*/
public void arrayFunc() {
int[] scores = {84, 91, 88};
int sum2 = add(scores); // ok ,가능
// 이렇게 하면 안됨
// int sum3 = add({84, 91, 88}); // 에러 발생
// 참고)
int sum4 = add(new int[]{84, 91, 88}); // 가능
System.out.println(sum2);
System.out.println(sum4);
}
// 더하기 함수 생성해서 호출해서 쓰기
public int add(int[] scores) {
int sum = 0;
for (int i = 0; i < 3; i++) {
sum += scores[i];
}
return sum;
}
/**
* arrayTwo
* 배열의 2번째 정의 방법
*/
public void arrayTwo() {
int[] arr1 = new int[3]; // 배열의 정의(선언) : 빈방 만들기(메모리)
// 정수 : 기본값(0), 문자열: null, 실수 : 0.0 등
// 배열의 3가지 방에 값넣기 : 배열의 사용
arr1[0] = 10;
arr1[1] = 20;
arr1[2] = 30;
// 배열 출력
// for (int i = 0; i < 3; i++) {
// System.out.println(arr1[i]); // 배열 값 출력
// }
// TODO: 배열 안에 값을 간단히 확인하기
// 사용법 : Arrays.toString(배열변수)
System.out.println(Arrays.toString(arr1));
}
/**
* 얇은 복사(shallow copy) vs 깊은 복사(deep copy)
*/
public void copyArray() {
// TODO: 얇은 복사
int[] oldArray = {1,2,3};
int[] copyArray = oldArray; // 얇은 복사(주소(방번호)를 복사)
int[] newArray = new int[3]; // 깊은 복사용 변수(방만들기 : 램덤 주소(방번호))
// 스택방 | 힙방
// oldArray | 100 <--------> 100 : {10,2,3}
// copyArray | 100
// TODO: 얇은 복사 특징 : oldArray 값을 변경하면 copyArray 값도 같이 변경됨
// copyArray 값을 변경해도 원본인 oldArray 도 변경됨
// 위의 현상을 피하고자 깊은 복사를 함
// 스택방 | 힙방
// oldArray | 100 <--------> 100 : {1,2,3}
// newArray | 200 <--------> 200 : {1,2,3}
// fori : 반복문 이용
for (int i = 0; i < 3; i++) {
newArray[i] = oldArray[i]; // 깊은 복사(원본값 바꾸어도 복사본이 바뀌지 않음)
}
}
/**
* 향상된 for문 : for(자료형 변수 : 배열) {반복문;}
* 아래 점수 총합을 출력하세요, 평균도 출력하세요
*/
public void AdvancedExam() {
int[] scores = {95, 71, 84}; // 국영수 점수 배열
int sum = 0; // 합계 변수
// 단축키 : foreach
for (int s: scores) {
sum = sum + s; // 누적합
}
System.out.println("점수 총합 :" + sum);
double avg = (double) sum / scores.length;
System.out.println("점수 평균 : " + avg);
}
}
결과
sum =875, avg=87
263
263
[10, 20, 30]
Week.java
package chap05;
/**
* packageName : chap05
* fileName : Week
* author : GGG
* date : 2023-09-19
* description : 열거형 클래스
* 요약 :
* 열거 자료형 : 몇 가지로 제한된 상수를 가지는 자료형
* 사용법(정의) : enum 변수명 { 상수1, 상수2, ... 상수n }
* 클래스 내에서 사용
* 변수명.상수명 ex) Week.MONDAY
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2023-09-19 GGG 최초 생성
*/
public enum Week {
// 월,화,수,목,금,토,일 정의(상수)
MONDAY,
TUESDAY,
WEDNESDAY,
THURSDAY,
FRIDAY,
SATURDAY,
SUNDAY
}
Sec0503.java
package chap05;
import java.util.Calendar;
/**
* packageName : chap05
* fileName : Sec0503
* author : GGG
* date : 2023-09-19
* description :
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2023-09-19 GGG 최초 생성
*/
public class Sec0503 {
/**
* 열거형 사용 예제
*/
public void EnumWeek() {
// 열거형 변수 정의
Week today = null;
// 달력 객체 : Calendar
Calendar calendar = Calendar.getInstance(); // 달력 객체 가져오기
int week = calendar.get(Calendar.DAY_OF_WEEK); // 현재 요일(1 ~ 7 숫자)
// 조건식
switch (week) {
case 1:
today = Week.SUNDAY; break;
case 2:
today = Week.MONDAY; break;
case 3:
today = Week.TUESDAY; break;
case 4:
today = Week.WEDNESDAY; break;
case 5:
today = Week.THURSDAY; break;
case 6:
today = Week.FRIDAY; break;
case 7:
today = Week.SATURDAY; break;
}
System.out.println("오늘 요일 :" + today);
}
}
결과
오늘 요일 :TUESDAY
Verify05.java(연습문제)
package chap05;
/**
* packageName : chap05
* fileName : Verify05
* author : GGG
* date : 2023-09-19
* description :
* 요약 :
* <p>
* ===========================================================
* DATE AUTHOR NOTE
* —————————————————————————————
* 2023-09-19 GGG 최초 생성
*/
public class Verify05 {
/**
* 주어진 배열에서 최대값을 구해보세요.
*/
public void exam04() {
int[] array = {1, 5, 3, 8, 2};
int max = 0;
for (int i = 0; i < array.length; i++) {
if (max < array[i]) {
max = array[i];
}
}
System.out.println(max);
}
/**
* 2) 중첩 for문을 이용해서 주어진 배열의 전체 항목의 합과 평균을 구해보세요.
*/
public void exam05() {
int[][] array = {{95, 86}, {83, 92, 96}, {78, 83, 93, 87, 88}};
int sum = 0;
double average = 0;
int cnt = 0;
int a = 0;
int summ = 0;
for (int i = 0; i < array.length; i++) {
for (int j = 0; j < array[i].length; j++) {
sum += array[i][j];
cnt++;
a = j;
}
summ += sum; // 최종 합
average = ((double)sum / (a + 1)); // 배열 평균
System.out.println(i + 1 + "번째 평균 : " + average);
sum = 0;
}
System.out.println("합계 : " + summ);
System.out.println("평균 : " + ((double)summ / cnt));
}
}
결과
8
1번째 평균 : 90.5
2번째 평균 : 90.33333333333333
3번째 평균 : 85.8
합계 : 881
평균 : 88.1
'HTML > Java' 카테고리의 다른 글
[Java] 객체, 생성자 (0) | 2023.09.20 |
---|---|
[Java]자바 기초 (변수, 연산자, 자료형, 자료형 변환, 스캐너, 입력, 출력) (1) | 2023.09.18 |
[Java]인텔리제이 단축키 (0) | 2023.09.18 |
[Java]인텔리제이 설치 & 설정 (0) | 2023.09.15 |