# 배열
public class ArrayTest {
public static void main(String[] args) {
// int su, su2, su3;
// 형식) 자료형 배열명[] = new 자료형[개수]
// int -> 0, double -> 0.0, boolean -> false 로 자동 초기화
int su[] = new int[3]; // 0,1,2 -> 3개의 공간을 생성
System.out.println("su : " + su);
su[0] = 10;
su[1] = 20;
su[2] = 30;
System.out.println("su [0] : " + su[0]);
System.out.println("su [1] : " + su[1]);
int su4 = 23; // 지역변수는 반드시 초기값을 줘야 출력이 된다.
System.out.println(su4);
/*
* int c[] = new int[13];
* c[0] = 10; c[1] = 20; ,,, c[12] = 130;
* 배열명.length -> 배열의 길이를 자동으로 계산
*/
//형식2) 자료형 배열명[] = {값1,값2,값3....} 배열생성 및 초기화
int c[] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100, 110, 120, 130 };
// 배열의 첨자(index 번호)를 계산해서 원하는 데이터를 자세하게 출력하고 싶을때
// 주의 : 첨자를 잘못 계산하면 논리적인 에러(문법은 이상 없지만 실행하면 오류뜸)가 발생함
for (int i = 0; i < 13; i++) {
System.out.println("c[" + i + "] = " +c[i]);
}
// 확장 for문(향상된 for문) -> 단순히 배열, 객체의 저장된 값을 꺼내와서 출력(확인용)
// 형식) for(배열의 자료형 출력변수명 : 출력대상자(배열 or 컬렉션객체)
for (int num:c)
System.out.println("num : " + num + "\t");
}
}
// 1차원배열의 문제
public class ArrayTest2 {
public static void main(String[] args) {
int b[] = {58, 38, 12, 36, 41, 27, 26, 32, 59, 16, 18, 28, 21, 17};
int count = 0;
// 10대 ~ 50대 -> 20대(20 ~ 29) 몇명?
for(int i = 0; i < b.length; i++) {
if(b[i] >= 20 && b[i] < 30) {
count++;
System.out.println("b[" + i + "] : " + b[i]);
}
} System.out.println("20대 인원수(count) = " + count);
/*for (int i = 0; i < 14; i++) {
if((b[i] > 20) && (b[i] < 30) ) {
System.out.println(b[i]);
}
}*/
}
}
import java.util.Scanner; // Ctrl + Shift + O
// 사용자로부터 연속적으로 5과목의 점수를 입력 받아서 총점, 평균값 구하기
public class ArrayTest3 {
public static void main(String[] args) {
int jumsu[] = new int[5]; // 0 ~ 4
int sum = 0; // 합계
double avg = 0.0; // 평균
Scanner sc = new Scanner(System.in); // System.in(키보드)
System.out.println("5과목의 점수를 입력하세요");
// jumsu[0] = sc.nextInt(); // 숫자 -> nextInt(), 문자 -> next(), 소수점 -> nextDouble
// sum += jumsu[0]; // sum = sum(0) + jumsu(0)
for (int i = 0; i < jumsu.length; i++) {
jumsu[i] = sc.nextInt();
sum += jumsu[i];
}
// 최종합계, 평균
avg = (double)sum/jumsu.length;
System.out.println("총 점수는 : " + sum);
System.out.println("평균 점수는 : " + avg);
/*- 내가한거
for (int i = 0; i <= 4; i++) {
System.out.println("5과목 점수를 입력하세요 : ");
jumsu[i] = sc.nextInt();
sum += jumsu[i];
}
avg = sum/5;
System.out.println("총 점수는 : " + sum);
System.out.println("평균 점수는 : " + avg);
*/
}
}
# 2차원 배열
public class DoubleTest {
public static void main(String[] args) {
System.out.println("2차원배열을 생성 및 가변배열");
// 형식) 배열의 자료형 배열명[][] = new 자료형[행수][열수]
int c[][] = new int[3][3];
// 형식2) 배열의 자료형 배열명[][] = {{값1, 값2, 값3}, {}, {}, {}}
// 고정배열
// int b[][] = {{10, 20, 30,}, {40, 50, 60,}, {70, 80, 90}};
// ↓ ↓ ↓
// b[0][1] b[1][2] b[2][2]
// 가변배열 : 행은 정해져 있는데 열은 그때마다 바뀌는 경우
int b[][] = { { 10, 20, 30, }, { 40, 50 }, { 60, 70, 80, 90 } };
for (int i = 0; i < b.length; i++) { // 행의값(열의 데이터 주소값 출력)
//System.out.println("b[" + i + "] : " + b[i]);
for (int j = 0; j < b[i].length; j++) {
System.out.println("b[" + i + "][" + j + "] : " + b[i][j]);
}
}
/* for(2차원배열의 자료형 배열명[][]:3차원배열명) // 절대로 [][][] 표시(X)
* 형식) for(1차원배열의 자료형 배열명[]:2차원배열명) // 절대로 [][] 표시(X)
* for(1차원배열의 자료형 출력변수명:1차원배열명) // 절대로 [] 표시(X)
*
*/
int sum = 0;
for (int temp[]:b) { // 2차원배열(b)에서 1차원배열의 값을 하나씩 꺼내서 temp에 저장
for (int su:temp) {
System.out.println(su + "\t");
sum += su;
}
System.out.println(); // 행이 바뀔때마다 줄바꿈
}
System.out.println("sum : " + sum);
}
}
# 메소드 호출
public class IFTest {
public static void main(String[] args) {
// 입출력 -> 사용자로부터 값을 입력 -> Scanner 객체를 이용
// 짝수, 홀수 판별(수/2 == 0(2의 배수) /3 != 0(3의 배수)
int su = 31;
if (su % 2 == 0) { // 조건식(변수, 연산자(관계, 논리))
System.out.println(su + " 은 짝수 입니다.");
} else {
System.out.println(su + " 은 홀수 입니다.");
}
System.out.println("삼항연산자로 변경");
String su2 = (su % 2 == 0) ? "짝수 입니다." : "홀수 입니다.";
System.out.println("입력받은 값 (su2) = " + su2);
System.out.println("if 연습중"); // 순차문
// 단순, 보편적인 기능 -> 절대값, 최대값, 최소값 -> 정적메소드로 제공
// java.lang.Math
int abs = -500;
abs = (abs < 0)?-abs:abs; // 직접코딩 -> 일반메소드 호출
System.out.println("절대값 abs : " + abs);
abs = Math.abs(-2500); // 클래스명.정적메소드명(~)
System.out.println("절대값 abs : " + abs);
int max = Math.max(34, 98);
System.out.println("max : " + max);
int min = Math.min(34, 98);
System.out.println("min : " + min);
}
}
// 외부의 패키지에 불러올때 import ----> 최상위패키지명.하위패키지명...불러올클래스명;
import java.util.Scanner; // java.lang 패키지 외에 무조건 다 적음
// 성적처리 프로그램 -> 국, 영, 수 -> 합계 -> 평균 -> 등급 -> 모든 정보 한번에 출력
public class MethodEx {
// 요구분석에 따라서 필요로 하는 메소드를 생각
/*
* 메소드를 작성할때 매개변수를 주고, 안주는 경우(구분)
* 1. 멤버변수로 선언 -> 매개변수가 없는 메소드를 작성O
* 2. 멤버변수로 선언X -> 지역변수로 선언
* 매개변수가 있는 메소드를 작성O
* 3. 반환값O -> caller가 처리
* 반환값X -> 호출한 메소드가 처리
*/
int kor, eng, math, total;
double avg;
char grade;
// 1. 총점(합계) -> 정적메소드는 항상 메소드명 앞에 static 이 붙는다
int calcTotal() {
// int calcSum() {
int total = kor + eng + math;
return total;
}
// 2. 평균(총점 / 과목 수)
double calcAvg() {
return (double)(total / 3);
}
// 매소드 오버로딩 : 비슷한 기능을 가진 메소드명은 하나의 메소드로 통합
double calcAvg(int sum) { // sum은 멤버변수로 선언X
return (double)(total/sum);
}
// 3. 등급(학점 -> 평균 점수에 A ~ F 까지)
char calcGrade() {
if (avg <= 100 && avg >= 90) return 'A';
else if ( avg < 89 && avg >= 80) return 'B';
else if ( avg < 79 && avg >= 70) return 'C';
else if ( avg < 69 && avg >= 60) return 'D';
else return 'F';
}
// 4. 총점, 평균, 등급 한번에 출력 -> 단순, 반복 -> 매개변수X 반환값X
// 멤버변수가 없기 때문에 매개변수는 있어야됨
void display() {
System.out.println("합계는(total) : " + total);
System.out.println("평균은(avg) : " + avg);
System.out.println("등급은(grade) : " + grade);
}
public static void main(String[] args) {
// 맴버변수가 없기 때문에
// 객체생성
MethodEx me = new MethodEx();
// 지역변수 : 메소드 내부에서만 사용이 가능 -> 다른 매소드에서 불러서 사용X
// scanner : 사용자로부터 값을 입력받아 처리
// nextInt() 정수, next() 문자
// Ctrl + Shift + O : 자동 import 기능
Scanner sc = new Scanner(System.in); //키보드
System.out.println("1. 국어점수를 입력해주세요.");
me.kor = sc.nextInt(); // 소수점 : sc.nextDouble();
System.out.println("2. 영어점수를 입력해주세요.");
me.eng = sc.nextInt();
System.out.println("3. 수학점수를 입력해주세요.");
me.math = sc.nextInt();
// 1. 총점
me.total = me.calcTotal();
// System.out.println("총점수 : " + total);
// 2. 평균
me.avg = me.calcAvg();
// 3. 등급
me.grade = me.calcGrade();
// 4. 한번에 출력
me.display();
}
}
# 오버로딩
// 동적배열 + 오버로딩 = 매개변수의 자료형이 하나, 개수가 달라야한다.
public class VarArgTest {
/*
public void print(String a) {
System.out.println("a : " + a);
}
public void print(String a, String b) {
System.out.println("a : " + a + ", b : " + b);
}
public void print(String a, String b, String c) {
System.out.println("a : " + a + ", b : " + b + ", c : " + c);
}
*/
// public void print(String ... names, String str)(X)
// public void print(String str2, String ...names) {} // 동적배열은 맨 나중에
public void print(String ... names) { // 매개변수의 개수와 상관없이 메소드 하나로 통합
/*
* int params[] = {1,2,3,4,5}
* String names[] = {"홍길동"}
* String names[] = {"홍길동", "홍길동2"}
* String names[] = {"홍길동", "홍길동2", "홍길동3"}
*/
for (String str:names)
System.out.print(str + "\t");
System.out.println();
}
public void print2(String names[]) { // 배열의 주소값을 전달(객체전달)
for (int i = 0; i < names.length; i++) {
System.out.print (names[i] + "\t"); // 가로로 출력
}
System.out.println();
}
public static void main(String[] args) {
VarArgTest va = new VarArgTest();
String str[] = {"배열의 활용", "동적배열", "API문서 참조하는 방법"};
va.print2(str);
va.print("홍길동");
va.print("홍길동", "홍길동2");
va.print("홍길동", "홍길동2", "홍길동3");
va.print("홍길동", "홍길동2", "홍길동3", "홍길동4", "홍길동5");
// 매개변수 4개짜리가 없어서 오류
//va.print("홍길동", "홍길동2", "홍길동3", "홍길동4");
}
}
# 추상화
// 추상화 -> 직사각형의 면적(객체)를 공통속성, 공통기능 -> 새로운 자료형
// 캡슐화 -> 다형성(생성자 오버로딩)
class Rect {
// 1. 공통멤버변수
private int x;
private int y = 10; // 가로, 세로
//private int area; // 면적(사각형의 넓이) -> double area; // 삼각형 또는 원의 면적
//-----------------------------------추가된 영역---------------------------------------------------
//(), (x), (y), (x, y)
// 기본생성자 : 매개변수X, 내용X
Rect() {
// 생성자내부 에서는 자기클래스의 객체명을 사용X -> this 로 써준다.
//this.x = 20; // r.x = 20;
//this.y = 30; // r.y = 30;
this(20,50); // (2)
System.out.println("기본생성자의 목적 : 멤버변수의 초기화");
}
Rect(int x) {
if (x < 0) {
System.out.println("X값은 음수 입력 불가");
x = 20; // 값을 입력을 못받기 때문에 초기값 설정
return;
}
this.x = x;
System.out.println("난 매개변수 1개짜리 생성자 호출됨(this.x) " + this.x);
}
Rect(double y) { // int -> double (자동형변환)
this.y = (int)y; // int <- double (명시적인 형변환)
}
Rect(int x, int y) { // (3)
this.x = x; // r.x = 20
this.y = y; // r.y = 50
System.out.println("난 매개변수 2개짜리 생성자 호출됨(this.x, this.y)"); // (4)
}
//-----------------------------------추가된 영역---------------------------------------------------
public void setX(int x) { // int a = 매개변수
if (x < 0) {
System.out.println("X값은 음수 입력 불가");
this.x = 20; // 값을 입력을 못받기 때문에 초기값 설정
return;
}
this.x = x; // 멤버변수 = 매개변수
// else 안쓰면 return 해서 나가야됨
}
public void setY(int y) {
if (y < 0) {
System.out.println("Y의 값은 음수 입력 불가");
} else {
this.y = y;
}
}
// public 반환형 getXXX() { return 꺼내올 멤버변수명;}
public int getX() {
return this.x;
}
public int getY() {
return this.y;
}
// 2. 공통기능(메소드) 면적을 구하는 메소드
// 1) 매개변수X, 반환값X : 단순, 반복 -> 똑같은 문장 여러번 반복
void print() {
System.out.println("x의 값은 = " + this.x);
System.out.println("y의 값은 = " + this.y);
System.out.println("x * y = " + (this.x * this.y));
}
// 2) 매개변수O, 반환값X : 입력 -> 출력, 계산, 저장
void area(int a, int b) {
x = a;
y = b;
System.out.println("x * y = " + (x * y));
}
// 3) 매개변수O, 반환값O : 계산, 웹프로그래밍 방식
// 반환값 : 호출되는 메소드가 계산한 결과값 -> 메소드 자체에서 처리X
// 호출하는 caller에서 처리하는 계산값 : 보고O 반환값O
int area2(int a, int b) {
int result = a * b;
return result; // return 계산 결과값(변수) or 수식 or 객체
}
}
public class RectHandling_Answer {
public static void main(String[] args) {
Rect r = new Rect(); // (1)
System.out.println("r : " + r);
//r.x = 10; // 2. 객체명.멤버변수 -> 값(X)
//r.setX(-20); // x = 20
//r.setY(30); // y = 30;
// 3. 객체명.호출할 메소드명() or (~)
r.print();
Rect r2 = new Rect(30); // r2 객체를 생성하면서 인수 1개짜리 생성자 호출
r2.setY(40);
r2.print();
Rect r3 = new Rect(50, 60); // r3 객체를 생성하면서 인수 2개짜리 생성자 호출
r3.print();
// 4. 매개변수를 전달 -> 계산 -> 출력
r.area(20, 40); // area라는 메소를 호출 하면서 매개변수 20,40을 전달
// 5. 반환값이 있는 메소드 호출
// 형식) 반환받는 변수명 = 객체명.호출할 메소드명
int reply = r.area2(60, 40);
System.out.println("계산받은 결과값(reply) : " + reply);
System.out.println("==================================");
System.out.println("r.area2(30, 40) : " + r.area2(30, 40));
}
}
'국비학원 > 공부' 카테고리의 다른 글
20일차 java(8) (0) | 2023.07.02 |
---|---|
19일차 java(7) (0) | 2023.07.02 |
17일차 java(5) (1) | 2023.05.15 |
16일차 java(4) (1) | 2023.05.15 |
15일차 java(3) (1) | 2023.05.11 |