package method;
public class method1 {
public static void main(String[] args) {
int sum1 = add(5, 10);
/*add 메서드를 정의 해줘야 쓸수있다!!
만약 내가 5번째 줄부터 쓰는 중이라 오류가 나지만 나중에 밑에 메서드에 정의를
해준다면 함수가 잘 작동하는 것을 볼 수 있을 것이다.*/
System.out.println("결과1 출력 : " +sum1);
/*
-출력 결과-
5 + 10 연산 수행
결과1 출력 : 15
15 + 30 연산 수행
결과2 출력 : 45*
출력 결과를 보면 알 수 있듯이 return에 없는 println부분 까지 나옴을 알 수 있다!
또, 정의 함수 add매서드에 모든 것이 끝나고 본문에
System.out.println("결과1 출력 : " +sum1); 코드가 진행한다!!
/
*/
int sum2 = add(15, 30);
// 15, 30 -> 이것들 처럼 메서드로 넘기는 값을 인수 혹은 인자라한다
// argument(아규먼트) 라 한다
System.out.println("결과2 출력 : " +sum2);
}
public static int add(int a, int b) { // 메서드 선언 부분
/*int - > 반환 타입 add - > 매서드 명 (int a, int b) - >
매개변수 부분(해당부분은 매개변수의 타입도 적어야한다!
호출(본문에서 사용)시에 매개변수 위치에 맞는 값들을 넣어야한다!
물론 매개변수들의 순서에 맞게 넣어야하는 건 필수!(수도)
public - > 다른 클래스에서 호출할 수 있는 매서드 (접근 제어)
static - > 객체를 생성하지않고 호출할 수 있는 정적 메서드라는 뜻이다.
메서드 정의 부분이다!
메서드 정의에서 사용했던 모든 변수는 메서드의 호출이 끝나면(return)되면 모두 사라진다!*/
System.out.println(a + " + " + b + " 연산 수행");
// 출력하는 값을 표현하는 식은 리턴을로 넣지 않아도 출력 된다.
int sum = a + b;
// 반환 할 값을 미리 만드는 것도 나쁘지 않은 거 같다.
return sum;
// return을 통해 본문에서 메서드를 쓴 부분의 결과를 주는 부분!
}
}
오늘의 학습 내용의 거의 전부이다!
메서드를 정의하고 또, 이전에 배운것을 가미하여 만든 예제 문제이다.
package method;
import java.util.Scanner;
public class method_ex4 {
public static void main(String[] args) {
// 잔액 확인
// String 으로 select이 아닌 숫자로 선택하게 끝
int balance = 0;
System.out.println("현재 통장의 잔고는 " + balance + "입니다.");
Scanner scanner = new Scanner(System.in);
while (true) {
System.out.println("----------------------------------");
System.out.println("원하시는 기능을 숫자로 입력해주세요.");
System.out.println("'출금': 1 // '입금' : 2 // '종료' : 3 // '잔액 확인' : 4 ");
int select = scanner.nextInt();
scanner.nextLine();
if (select == 1) {
System.out.print("출금할 금액을 입력해 주세요! :");
int sub_ = scanner.nextInt();
balance = su_ba(balance, sub_);
scanner.nextLine();
} else if (select == 2) {
System.out.print("입금할 금액을 입력해 주세요! :");
int add_ = scanner.nextInt();
balance = add_ba(balance, add_);
scanner.nextLine();
} else if (select == 3) {
System.out.println("프로그램을 종료합니다.");
System.out.println("----------------------------------");
break;
}else if(select == 4){
System.out.println("잔액을 확인 합니다. 현재 잔액은 "+ balance +"원 입니다.");
}
else {
System.out.println("잘못된 입력 값 입니다.");
}
}
}
// 메서드 부분
public static int add_ba(int a, int b) {
a += b;
System.out.println(b + "원을 입금하셨습니다. 현재 잔액은 " + a + "원입니다.");
return a;
}
public static int su_ba(int a, int b) {
if (a < b) {
System.out.println("잔고가 부족합니다!");
// return a;
} else if (b <= a) {
a -= b;
System.out.println(b + "원을 출금하셨습니다. 현재 잔액은 " + a + "원입니다.");
// return a;
}
return a;
}
}
요번에는 몰랐서 많이 고쳤던 부분은 없었다.
메서드를 정의하면 코드를 더 보기에 좋고, 유지보수에도 좋다는 걸 글만이 아니라 코드를 작성하
면서 알게 되었다.
ps) 어제 코드 문제 -- 고친점
package array;
import java.util.Scanner;
public class array_ex10 {
public static void main(String[] args) {
// 상품은 최대 10개 종료할 수 있어야한다.
// 상품정보 - 이름과 가격이 들어간다.
// 상품목록 - 모든 상품을 출력한다.
Scanner scanner = new Scanner(System.in);
System.out.print("등록할 상품의 수량을 정하세요. :");
int productCount = scanner.nextInt();
if (productCount <= 10) {
String[] productNames = new String[productCount];
int[] productPrice = new int[productCount];
for (int i = 0; i < (productCount) ; i++) {
System.out.print("상품의 이름을 정해주세요. :");
scanner.nextLine();
String Names = scanner.nextLine();
if (Names.equals("q!") ) {
// 문자열은 변수.equal("문자열")
System.out.println("프로그램을 종료합니다.");
return;
// 어떤것이 오던 .. public static void main 을 종료 시키는 함수! 기억해두자!!
// 반복문이던 머 던 상관없다!
}
System.out.print("상품의 가격을 정해주세요. :");
int Price = scanner.nextInt();
productNames[i] = Names;
productPrice[i] = Price;
}
System.out.println("모든 상품과 상품의 가격을 출력합니다. ");
for (int i = 0; i < (productCount) ; i++) {
System.out.print((i+1)+"번째 상품입니다. 상품명 : "+productNames[i]+" 해당 상품의 가격 : "+productPrice[i]+" 입니다. ");
System.out.println();
}
}else {
System.out.println("프로그램을 종료합니다.");
}
}
}
전체 코드에서
if (Names.equals("q!") ) { // 문자열은 변수.equal("문자열") System.out.println("프로그램을 종료합니다."); return;
위 코드에서 문제가 있었다.
첫번째는 Names는 타입이 String 임을 생각하지 못했다는 것
두번째로 코드의 설계할 때, 위 코드 실행시 메인 에서 나오는 법을 몰랐다는 것이다.
본인은 반복문 안에서 나오는 break; 만 알았기에 해당 문제를 푸는 데 곤욕이 였다.
그래서 처음 해본것은 그냥 그 기능을 빼보는 것이었다. 무슨 소리인가 하실 테지만,
java 에 기능과 개념을 알지 못하는 저에게 가장 쉬운 방법이였다.
내가 만들고자 하는 기능을 없애도 프로그램을 이용하는데 문제가 없다면, 문제가 되지 않겠다고 생각해서 인거같다.
해당 예제에서는 종료 시키는 것은 들어가 있지 않아서 문제가 되지 않는 것을 알았다...
두번째로 한 것은 나보다 더 java를 잘하는 사람에게 조언을 구하는 것이 였다.
나의 능력이 낮다는 걸 위 해결방법을 통해 알려주는 것 같지만, 개의치 않는다.
나도 분명 그러한 사람이 될 것임을 알기 때문에
두 수의 차
두 수의 곱
몫 구하기
나이 출력
숫자 비교하기
두 수의 합
두 수의 나눗셈
각도기
짝수의 합
배열의 평균값
짝수와 홀수
평균 구하기
문제를 풀었다.
문제중에 내가 부족했던 파트를 알게 해준건 두수의 나눗셈 파트였다.
문제의 설명이다.
정수 num1과 num2가 매개변수로 주어질 때, num1을 num2로 나눈 값에 1,000을 곱한 후 정수 부분을 return 하도록 soltuion 함수를 완성해주세요.
우선 나의 부족했던 점은 매개변수 정수를 나누어 double로 맞추고 다시 1000을 곱하여 int로 만드는 것이였다. 이러한 부족한 점이 나올 수 밖에 없었던 건, 한번에 두세번씩 형변환을 하는 것을 연습도 안했을 뿐더러, 생각도 하지 못했었다.
문제 해결은 간단했다. 단순히 나오는 값에 소괄호 그리고 각 연산마다의 원하는 결과의 형변환! 소괄호를 해준다! - > (int)(((double)a/b)*1000) ;
그리고 풀고있는 문제인 '자릿수 더하기'에는 필요한 함수를 배우지 않아, 알고 있는 것으로 코드를 만들어보았다. 아마 문제를 낸 사람은 화가 났을지도 모르겠다. 코드가 너무 길어 마지막에 보여주겠다.
우선 말했다 시피 필요한 함수를 만약에 내가 알고 있다면, int 를 String 으로 바꾸고 String 값을 뜯고, 그 값을 다시 수로 변환! - > 마지막으로 다시 값들을 한번에 더하면 된다!
고민은 필요한 함수를 검색해서 문제를 푸는 것이 맞는건지? 배울때까지 기달리는 것이다.
검색해서 푸는 건, 문제를 푼다기 보단 베끼는 느낌이라...
또 그렇다기엔 물어보기는 하고... 흠.. 고민이 많아지네요...
어쩌다보니 회고를 여기다 쓰는 거 같군요....
째든 회고겸 우선 오늘은 마무리 해야겠습니다.
열거타입의 개념 : 타입 중에는 한정된 값만을 가지는 타입이 존재 - > 열거타입
ex) 계절 - 봄 여름 가을 겨울
사용법 : public enum 키워드를 사용하여 열거타입을 선언
public enum 열거타입명{열거 상수}
열거상수는 관례적으로 모두 대문자로 작성한다. 또, 상수가 여러단어로 이어질 땐, '_'를 쓴다.
변수 선언과 값 저장
열거타입 변수 = 열거타입.열거상수;
ex) Week today = Week.SUNDAY; , Week today = null;
* 열거타입 변수는 값으로 null 을 쓸 수 있다. - > 열거타입도 참조 타입에 포함 되기 때문이다.
->> 그래서 위의 예 Week를 볼때 총 7개의 객체가 만들어 진다 << - 헛갈리는 부분
Week today = Week.SUNDAY; - > today는 SUNDAY의 참조값을 저장한다.
1번째 코드 Week week1 = Week.SUNDAY;
2번째 코드 Week week2 = Week.SUNDAY;
라면 System.out.println(week1 == week2) -> 출력시 true
날짜를 쓸 적에 현재 날짜를 이용해서 사용하는 경우가 많다.
java에선 Calendar 라는 클래스가 존재한다고 한다. << - 클래스가 정확히 어떤 역활인지 아직은 모른다.
Calendar 변수명 = Calendar.getInstance(); - 해당 코드를 통해서 변수를 선언!
변수명.get(Calendar.YEAR);
변수명.get(Calendar.MONTH)+1;
변수명.get(Calendar.DAY_OF_MONTH);
변수명.get(Calendar.DAY_OF_WEEK);
변수명.get(Calendar.HOUR); ...
해당코드 등을 통해서 그값을 원하는 변수에 저장하여 활용이 가능하다.
열거타입인 Week에도 사용해보자
... <- 공부중 class 에 대한 이해가 필요하여 잠시 스탑!!
책 속 예제에서 public static void main(String\[] arg){} 과 예제에 public class enum{} 말고 다른 클래스를 채용하는 것으로 보인다.
본인은 아직 클래스에 대한 개념이 잡히지 않아 멈추는 것이 맞다고 판단하였다.
오늘 클래스 공부 후 - > 내일 til에서 알게 된 내용을 정리하겠다.
우선 개념을 적기에 앞서 다시 해당 개념들을 공부하러 나의 til에 찾아올 수 있어,
최대한 쉽게 적을 생각이다.
객체 = > a라는 사람과 b라는 사람이 물건을 교환 혹은 받을 때, 하는 행동(메서드) - ex교환하다 을 가지고, 그 행동에 내용을 속성(필드) - ex물건 - 책 (교환의 대상)을 가진다.
(해당 내용은 더 공부를 하면서 틀린 부분을 수정하자!))**
객체 지향프로그램밍 = > 객체들을 만들고, 그것들을 조립하여 완성품을 만드는 방법!
객체의 종류
1. 집합관계 = > 포함 관계
2. 사용관계 = > 뽑아먹는 관계(한쪽에서)
3. 상속관계 = > 상위 객체는 종류 - 하위개체는 구체적인 사물 인 관계
클래스
객체를 생성할 때, 객체의 설계도 역활!
설계도(클래스)를 통해 만들어진 객체를 인스턴스(instance)라 한다!
Q .
오늘 배우면서 헛갈리는 내용 = >
1. 객체를 생성할 설계도인 클래스를 생성 후, 만들어진 객체(new 클래스명;) ...
이해안되는 부분은 'new 연산자는 힙 영역에 객체를 생성 후 객체의 번지를 리턴한다. 이 주소는 참조타입인 클래스 변수에 저장해두면 변수를 통해 객체를 사용 할 수 있다.'
- > 클래스를 통해서 객체를 생성해주었는데 다시 클래스 변수에 만든 해당 객체를 집어 넣는?? 이 부분이 이해가 잘 되지 않는다.
2. 이어지는 내용으로 '클래스 변수가 클래스의 객체를 참조한다.' 라는 문구가 이해가 되지않는다.
A .
...
제귀함수 찾아보자! 시간이 없다! ㅠ
1. 랜더링
2. 비동기, AJAX
3. velog 마크다운
마지막으로 위에서 말한 코드를 적고 마친다.
package method;
public class test4 {
public static void main(String[] args) {
int n = 1613;
int answer = 0;
int sum = 0;
if (n == 100000000) {
} else if (n == 10000000) {
answer = 1;
}
else if (n == 1000000) { // 서순!!
answer = 1;
}
else if (n == 100000) {
answer = 1;
}
else if (n == 10000) {
answer = 1;
}
else if (n == 1000) {
answer = 1;
}
else if (n == 100) {
answer = 1;
}
else if (n == 10) {
answer = 1;
}else if (n == 1) {
answer = 1;
}else if (n < 10) { // 서순 파트!
sum += t_8(n);
n -= 1 * t_8(n);
answer = sum;
} else if (n < 100) {
sum += t_7(n);
n -= 10 * t_7(n);
sum += t_8(n);
n -= 1 * t_8(n);
answer = sum;
} else if (n < 1000) {
sum += f_6(n);
n -= 100 * f_6(n);
System.out.println(sum);
System.out.println(n);
sum += t_7(n);
n -= 10 * t_7(n);
System.out.println(sum);
System.out.println(n);
sum += t_8(n);
n -= 1 * t_8(n);
System.out.println(sum);
System.out.println(n);
answer = sum;
} else if (n < 10000) {
sum += f_5(n);
n -= 1000 * f_5(n);
System.out.println(sum);
System.out.println(n);
sum += f_6(n);
n -= 100 * f_6(n);
sum += t_7(n);
n -= 10 * t_7(n);
sum += t_8(n);
n -= 1 * t_8(n);
answer = sum;
} else if (n < 100000) {
sum += s_4(n);
n -= 10000 * s_4(n);
sum += f_5(n);
n -= 1000 * f_5(n);
sum += f_6(n);
n -= 100 * f_6(n);
sum += t_7(n);
n -= 10 * t_7(n);
sum += t_8(n);
n -= 1 * t_8(n);
answer = sum;
} else if (n < 1000000) {
sum += s_3(n);
n -= 100000 * s_3(n);
sum += s_4(n);
n -= 10000 * s_4(n);
sum += f_5(n);
n -= 1000 * f_5(n);
sum += f_6(n);
n -= 100 * f_6(n);
sum += t_7(n);
n -= 10 * t_7(n);
sum += t_8(n);
n -= 1 * t_8(n);
answer = sum;
} else if (n < 10000000) {
sum += e_2(n);
n -= 1000000 * e_2(n);
sum += s_3(n);
n -= 100000 * s_3(n);
sum += s_4(n);
n -= 10000 * s_4(n);
sum += f_5(n);
n -= 1000 * f_5(n);
sum += f_6(n);
n -= 100 * f_6(n);
sum += t_7(n);
n -= 10 * t_7(n);
sum += t_8(n);
n -= 1 * t_8(n);
answer = sum;
} else if (n < 100000000) {
sum += n_1(n);
n -= 10000000 * n_1(n);
sum += e_2(n);
n -= 1000000 * e_2(n);
sum += s_3(n);
n -= 100000 * s_3(n);
sum += s_4(n);
n -= 10000 * s_4(n);
sum += f_5(n);
n -= 1000 * f_5(n);
sum += f_6(n);
n -= 100 * f_6(n);
sum += t_7(n);
n -= 10 * t_7(n);
sum += t_8(n);
n -= 1 * t_8(n);
answer = sum;
}
System.out.println(answer);
}
public static int n_1(int a) {
int num = 0;
for (int i = 90000000; i <= 90000000; i -= 10000000) {
if (a - i > 0) {
num = i / 10000000;
break;
}
}
return num;
}
public static int e_2(int a) {
int num = 0;
for (int i = 9000000; i <= 9000000; i -= 1000000) {
if (a - i > 0) {
num = i / 1000000;
break;
}
}
return num;
}
public static int s_3(int a) {
int num = 0;
for (int i = 900000; i <= 900000; i -= 100000) {
if (a - i > 0) {
num = i / 100000;
break;
}
}
return num;
}
public static int s_4(int a) {
int num = 0;
for (int i = 90000; i <= 90000; i -= 10000) {
if (a - i > 0) {
num = i / 10000;
break;
}
}
return num;
}
public static int f_5(int a) {
int num = 0;
for (int i = 9000; i <= 9000; i -= 1000) {
if (a - i > 0) {
num = i / 1000;
break;
}
}
return num;
}
public static int f_6(int a) {
int num = 0;
for (int i = 900; i <= 900; i -= 100) {
if (a - i > 0) {
num = i / 100;
break;
}
}
return num;
}
public static int t_7(int a) {
int num = 0;
for (int i = 90; i <= 90; i -= 10) {
if (a - i > 0) {
num = i / 10;
break;
}
}
return num;
}
public static int t_8(int a) {
int num = 0;
for (int i = 9; i <= 9; i -= 1) {
if (a - i == 0) {
num = i ;
break;
}
}
return num;
}
}
너무 재밌고~호호
그리고 생각해서 코드를 그릴 때, 서순을 생각하자!
그리고 'static과 non-static의 차이' 에 대해서도 찾아보자!