160321: 6회차
종료하기 전 티스토리 네이버 로그아웃 할 것
1. 툴
동일
추가시:
2. 폴더
동일
추가시:
3. 사용할 사이트
동일
추가시:
4. 공부하는 것
아침엔 클래스랑 객체 리뷰
<<메모리친구>>
힙: 객체 + 배열 - 얘네는 멤버변수 크기만큼 잡음(메모리 낭비 심한것)
스택:: 지역변수 - 부르면 챱챱
코드: 메소드
데이터: 얜 나중에 :>
클래스: 객체 정의 + 객체의 모임 -붕어빵틀 -은행계좌(발급용)
객체: 얘가 실체임 ㅇㅇ = 인스턴스 -붕어빵 -ㅁㅁ의계좌
빵먹고싶당
Class 만들 때 메소드처럼 클래스명() 이렇게 만들면 안됨... 자꾸 헷갈리는것
클래스(파라미터 = 매개변수 = 인자)
파라미터는 데이터 호출용인데 this.인자 = 값 하면 접근 가능함.
객체는 서로 독립적인 형태로 사용하쉬는것
객체 생성할 떄는 new를 쓴다 = 메모리 할당 용도.
메소드를 기본형 인자로 생성을 하면 return 없으면 안돌아감...
void는 리턴값 없어도 되어서 괜찮음.
메소드안에서 자기네 클래스 다른 메소드 호출 가능 - ㅇㅇ
메소드는 많이 만들어도 성능 저하는 없음.
멤버 변수는 많이 만들면 성능 저하가 있는것 ㅠㅠ
자바는 포인터가 없어서 그...그거는 불가능 (-_-);;; - 그거 ... ㅇ...
--------------------------------------------------------
객체:
상속
다형성
캡슐화 - 세터 & 게터 사용해서 접근 하는 것 - 안에 있는 성분은 모르는데 사용하는 법은 아는것 ((ex) 감기약 같은)
- 캡슐화:
private로 멤버변수를 선언하면 그 클래스 내에서밖에 접근을 못함
- 예를 들어 main이 있는 클래스에서 private로 선언된 남의 클래스 변수를 직접 못 접근하니까
setter랑 getter (값을 저장하고 / 가져오고) 를 꼭 선언해줘야 한다.
이게 메소드 이름이 setter가 아니라 그냥 기능적인 요소
private String name;
private int bonbong;
public void setName(String name){
}
요러면 위에 지역변수 name은 힙 영역
밑에 파라미터는 스택영역에 메모리를 잡아서 이름이 같아도 되긴 하는데
이름이 같을 경우
public void setName(String name){
name = name;
}
요렇게 하면 어느 name인지 모르니까 // 사실 자기가 속한 지역변수가 우선이라서 저건 파라미터 = 파라미터 라는 식임
this.name = name; 으로 고치면
this.name은 위에 지역변수고
name은 파라미터인것.
public void setName(String name){
this.name = name;
}
어쨌든 이게 세터
public String getName(){
return name;
}
이게 게터.
근데 지역변수랑 파라미터랑 이름이 같지 않으면 this 안 써줘도 됨...
세터랑 게터를 하나하나씩 다 만들어 줘야 하는군
안써도 게터를 만들어 줘야 함
2교시때까지 저번 주 코드를 setter getter로 고치는 거 하고있음.
식별자 이름 setName 같이 set 다음에 대문자 한번 써줄 것.
오류는 안 나는데 나중에 프로젝트 하거나 다른 사람과 협업 할 시 귀찮아지니까...
-> 이뿌게 쓸것
이런 이클립스에서 이거 자동 생성할 수 있는 거였음 ㅋㅋㅋㅋㅋㅋㅋㅋㅋㅋ
으아아 그래도 코딩 연습을 잘 했슴니다 :<
아니 그냥 세터 게터를 하나씩 만들어주고 세터를 호출해주는 메소드를 만들면 되겠군...? 귀찮음맨인것 ...
ㄴ 이건 생성자를 통해서 한번에 박을수가 있어서 필요없는것... 그러니까 저것은 따로 쓰려고 만든 애입니다
이런것도 되나
------------------------------------------------
멤버 메소드
main은 멤버 메소드가 아님
근데 메인 말고는 다 멤버 메소드라고 생각하면 그것도 아니긴한데 일단 ... 내가 만든 건 다 멤버 메소드임.
메소드네 인스 데이터 타입은 리턴값과 일치해야함
그리고 파라미터랑 호출시 데이터 타입도 일치해야함 - 그러니까 데이터 형 맞추라고
또한 매개변수 써야 하는 거에 안 쓰면 또 오류남. - 주의할 것
메소드 오버로딩 -과
메소드 오버라이딩 - 을 사용해서 메소드를 확장시킴
ㄴ 나중에 하실것
리턴타입 메소드명(파라미터){
메소드내용
}
-유효 범위-
1. 멤버변수(=인스턴스 변수, 필드) - 힙 메모리 이용
메소드 밖에 선언됨
모든 메소드가 사용 가능
변수 사용이 끝나도 GC에 의해 회수 되기 전에는 할당 메모리 유지함. - 그래서 많이 만들면 메모리 낭비인것
GC: 가비지 컬렉터임
값을 안 줘도 기본 값으로 초기화됨! - null, 0, false 이런거...
2. 지역변수 - 스택 메모리 이용
메소드 안에 선언됨
이용이 끝나면 메소드 영역이 없어지면서 변수도 회수됨.
굳이 초기화 안하면 못 쓴다!
그러니까 스택 메모리 쓸 때는 임시적으로(지역변수) 쓰는 거니까 넣었다 뺐다 하기 좋은 스택
힙은 고정적으로 쓰고 ㅂㅂ 할거니까 관리할 수 있는 힙 (객체와 배열 방을 만듬)
// this로 멤버변수 접근
전역 변수 스트링은 정수형크기 정도 되겠다 싶은 것...
package day06;
public class Variable {
String movie = "트로이"; // heap memory
public void show() {
System.out.println("show 메소드 영역: " + movie);
// movie라는 지역변수의 부재로 전역변수 출력
}
public void title() {
String movie = "아마겟돈"; // stack memory
System.out.println("title 메소드 영역: " + movie); // 아마겟돈
System.out.println("title this.movie: " + this.movie);// 트로이
}
public static void main(String[] args) {
Variable v = new Variable();
//show 시작하면 스택 영역에 메모리 잡고
v.show(); // 트로이
//show 끝나면 스택 영역에 메모리 잡았던거 사라지고
v.title(); // 아마겟돈 트로이
}
//메인 끝나고 바로 해제하는 게 아니라 가비지컬렉터가 놀다가 얘를 참조하는 애가 아무도 없을 때 메모리 삭제 - 할거 많으면 천천히 삭제
}
----------------------------
package day06;
public class Variable {
String movie; // heap memory
public void show() {
System.out.println("show 메소드 영역: " + movie);
// movie라는 지역변수의 부재로 전역변수 출력
}
public void title() {
String movie; // stack memory
System.out.println("title 메소드 영역: " + movie); // 아마겟돈
System.out.println("title this.movie: " + this.movie);// 트로이
}
public static void main(String[] args) {
Variable v = new Variable();
v.show(); // 트로이
v.title(); // 아마겟돈 트로이
}
}
package day06;
public class Block {
String Block = "재미있는 영화"; // 멤버변수 힙
public static void main(String[] args) {
Block b0 = new Block();
String b1 = "트로이"; // 지역변수 스택
System.out.println("Movie: " + b1);
{
String b2 = "우주전쟁"; // 얘는 지역변수
System.out.println("Movie: " + b2);
int i = 0; // 얘도 지역변수
for (int j = 0; j < 5; j++) {
// j도 지역변수다
}
// System.out.println(j); //이거 for문 안의 지역변수라서 x
for (i = 0; i < 5; i++) {
}
System.out.println("i: " + i);// 얘는 선언을 밖에서 해서 ㄱㅊ
} // end {}
System.out.println("Movie: " + b1);
System.out.println("테스트: " + b0.Block);
// System.out.println("Movie: " + b2); //이거 {}안의 지역변수임
}// end main
}
//Block b0 = new Block();
//System.out.println("테스트: " + b0.Block);
요렇게 하면 Block 스택 메모리 잡지 않음
---------------------------------------------------
Call by Value - 값에 의한 호출
ㄴ 이거는 메소드 호출시 값을 주는것
보통 숫자 계열 - 근데 그냥 기본형이면 거의 다 되는것인듯
문자도되고
숫자도되고 어쨌든 예시
구냥 메소드(정수) <- 이렇게 생겼으면 콜바이밸류
값을 복사하는 개념이라서 call by value
Call By Value 예시는 .java 파일 2개 뜨는 것...
그리고 생성자도 써보았다.
생성자는 리턴 타입이 없으신것
public class Person{
public Person(String s){
name= s;
}
}
저렇게 생김.
public Person(String name){
this.name = name;
}
이거랑 같은거지만 그냥 s로 쓰셨길래...
package day06;
class Code{
public String getArea(int index){
String [] areas = {"서울", "천안", "대전", "대구", "광주", "강릉"};
return areas[index-1];
}
}
public class CodeUse {
public static void main(String[] args) {
Code co = new Code();
String area = co.getArea(6);
System.out.println(area);
}
}
Call by Reference
ㄴ 이거는 메소드 호출시 해시코드를 주는것
상수 문자열
예시가 이건데
package day06;
class SchoolVO {
String name = "";
int kuk;
int eng;
int tot;
double avg;
public SchoolVO(String name, int kuk, int eng){
this.name = name;
this.kuk = kuk;
this.eng = eng;
tot = kuk + eng;
avg = (double)tot/2;
}
}
class SchoolProc2{
public void print(SchoolVO v){
System.out.println("vo.name: " + v.name);
System.out.println("vo.kuk : " + v.kuk);
System.out.println("vo.eng : " + v.eng);
System.out.println("vo.tot : " + v.tot);
System.out.println("vo.avg : " + v.avg);
}
}
public class SchoolUse2 {
public static void main(String[] args) {
SchoolVO vo = new SchoolVO("길동", 85, 80);
// vo.name = "길동";
// vo.kuk = 90;
// vo.eng = 80;
// vo.tot = vo.kuk+vo.eng;
// vo.avg = vo.tot/2;
SchoolProc2 sp = new SchoolProc2();
sp.print(vo);
}
}
package day06;
class SchoolVO {
String name = "";
int kuk;
int eng;
int tot;
double avg;
public SchoolVO(String name, int kuk, int eng){
this.name = name;
this.kuk = kuk;
this.eng = eng;
tot = kuk + eng;
avg = (double)tot/2;
}
}
class SchoolProc2{
public void print(SchoolVO v){
System.out.println("vo.name: " + v.name);
System.out.println("vo.kuk : " + v.kuk);
System.out.println("vo.eng : " + v.eng);
System.out.println("vo.tot : " + v.tot);
System.out.println("vo.avg : " + v.avg);
System.out.println("SchoolProc2()-vo 해시코드: " + v.hashCode());
}
}
public class SchoolUse2 {
public static void main(String[] args) {
SchoolVO vo = new SchoolVO("길동", 85, 80);
// vo.name = "길동";
// vo.kuk = 90;
// vo.eng = 80;
// vo.tot = vo.kuk+vo.eng;
// vo.avg = vo.tot/2;
System.out.println("main()-vo 해시코드: " + vo.hashCode());
SchoolProc2 sp = new SchoolProc2();
sp.print(vo);
}
}
그래서 같은 곳을 가리키게 되기 때문에 영역을 공유한다고 함.
//schoolProc2도 변수를 만들지는 않지만 해시코드가 있긴 있음.
-------------------------밥-----------------------------
먹고 와서 이거 하는 중임
package day06;
class Pay {
int ppp;
public void payRefer(Pay a) {
a.ppp = a.ppp + 2000;
}
public void payValue(int j) {
j = j + 2000;
}
}
public class PayTest {
public static void main(String[] args) {
Pay p = new Pay();
p.ppp = 10;
int i = 10;
p.payRefer(p);// cb reference
p.payValue(i);// cb value p.payValue(10)이랑 같은 것 - 변수값을 준다고 cbr이 아닌것 :>
System.out.println(p.ppp);// 2010
System.out.println(i); // return을 안받아서 그냥 i = 10
}
}
근뎅
public void payRefer(Pay a) {
a.ppp = a.ppp + 2000;
}
이럴 경우에
public void payRefer(Pay a) {
a.ppp = a.ppp + 2000;
a.payRefer(null);
}
ㅠㅠ리액션이 안좋은것...
그리고 왜
public int payValue(int j) {
j = j+2000;
System.out.println(" " +j);
return j;
}
하면 리턴값이 2010이 아니라 10이지?
아 이게 지역변수라서 j가 메소드 완료되면 없어져서 그런가보당 맞나 -> 아님 ㅋㅋㅋㅋㅋㅋㅋㅋㅋ
i = p.payValue(i);
i에다가 안넣음 ㅋㅋㅋㅋㅋㅋ
package day06;
class Pay {
int ppp;
int num;
public void payRefer(Pay a) {
a.ppp = a.ppp + 2000;
//a.payRefer(null);
}
public int payValue(int num) {
this.num = num+2000;
// System.out.println(this.num);
return this.num;
}
}
public class PayTest {
public static void main(String[] args) {
Pay p = new Pay();
p.ppp = 10;
int i = 10;
p.payRefer(p);// cb reference
i = p.payValue(i);// cb value p.payValue(10)이랑 같은 것
System.out.println(p.ppp);// 2010
System.out.println(i); // return을 안받아서 그냥 i = 10
}
}
call by value
매개 변수 전달 방식: 값 복사
장점: 원본 값 보호 가능
단점: 메모리 낭비...(별로 안심함)
매개변수 타입: 기본 데이터 타입
call by reference
매개 변수 전달 방식: 레퍼런스 넘겨줌(해시코드)
장점: 메모리 절약(기억장소 공유)
단점: 원본 값 변환됨
매개변수 타입: 레퍼런스(참조)타입 (배열도 포함)
------------------------------------------------
String 객체는 의외로 call by reference인데
call by value 같이 생겼음... - 기본형 변수 타입이 아닌것...
문자열 타입은 - 스트링 / 스트링버퍼 / 스트링빌더 가 있는데
스트링만 불변의 특징이 있는것
얘는 다른 애들하고 달라서 "한번정한글자" 를 "한번정한글자당" 으로 바꿀 수 없음.
그냥 "한번정한글자" 가 땡
그리고 클래스인데도 new 안써도됨 ㅇㅇ String name = new String()일케 안써도 됨
그냥 String name = "홍길동" 하면 객체화 완료
그런데 StringBuffer 는 StringBuffer sb = new StringBuffer("홍길동"); 한다음에
StringBuffer sb2 = new StringBuffer("홍길동"); 하면 sb의 홍길동과 sb2의 홍길동은 다른 홍길동인것
근데 String은
String name = "홍길동"; 하고 String name2 = "홍길동"; 이 가리키는 해시코드값이 동일함 (메모리상으로 하나인것)
만약에 문자열 변경할 때 "안녕" -> "안녕하세요" 했으면
이거 메모리가 해제 안되고 그냥 안녕도 있고 안녕하세요도 있는것...
그러니까 문자열 계속 변경되는 프로그램이면 스트링버퍼 이런걸 써야함 ... <<- 스트링쓰면 메모리 많이 잡아먹는것
문자열 비교할 때는 == 쓰지말고 equals 쓰자!!!
//System.out.println("ABCD".toLowerCase()); //소문자로 변환
//System.out.println("abcd".toUpperCase()); //대문자로 변환
//System.out.println("ABCD".hashCode()); //해시코드 출력
package day06;
public class StringTest {
public void changeString(String src) {
src = "JSP";
}
public static void main(String[] args) {
// System.out.println("ABCD".toLowerCase());
// System.out.println("abcd".toUpperCase().hashCode());
// System.out.println("ABCD".hashCode());
String step = "JAVA";
StringTest st = new StringTest();
System.out.println(step);
st.changeString(step);//JSP로 변경하기 위해 할당 -> 이긴한데 아까 내가 틀린것처럼
//step = st.changeString(step);으로 안 고쳐주면 쟤는 증발하는 메소드의 멤바라서 값 차이 없음
System.out.println(step);
}
}
//call by reference치고 넘나 value 같은 것...-_-);;;;;
//
이거 했음.
public void changeString(String src) {
src = "JSP";
}
저거 위에도
public String changeString(String src) {
return "JSP";
}
이렇게 바꿔주고 step = st.changeString(step) 해줘야 값이 도출된다.
이거 값 받는 걸 자꾸 빠트리니까 메인 문 확인 조심해서 할 것!!!!
멤버변수 = 필드 = 인스턴스변수
package Test_day06;
class Goods {
private String name;
private int price;
private int numberOfStock;
private int sold;
void setName(String name) {
this.name = name;
}
void setPrice(int price) {
this.price = price;
}
void setNumberOfStock(int numberOfStock) {
this.numberOfStock = numberOfStock;
}
void setSold(int sold) {
this.sold = sold;
}
String getName() {
return name;
}
int getPrice() {
return price;
}
int getNumberOfStock() {
return numberOfStock;
}
int getSold() {
return sold;
}
Goods(String name, int price, int numberOfStock, int sold) {
this.name = name;
this.price = price;
this.numberOfStock = numberOfStock;
this.sold = sold;
}// 생성자
}
public class GoodsArray {
public static void main(String[] args) {
Goods goodsArray[] = new Goods[3];
for (int i = 0; i < goodsArray.length; i++) {
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("입력하세요: ");
String name = s.next();
int price = s.nextInt();
int n = s.nextInt();
int sold = s.nextInt();
goodsArray[i] = new Goods(name, price, n, sold);
} // end for
for (int i = 0; i < goodsArray.length; i++) {
System.out.print(goodsArray[i].getName() + " ");
System.out.print(goodsArray[i].getPrice() + " ");
System.out.print(goodsArray[i].getNumberOfStock() + " ");
System.out.println(goodsArray[i].getSold() + " ");
} // end for
}
}
Goods goodsArray[] = new Goods[3];
이거는
Goods [] goodsArray;
goodsArray = new Goods[3]; 하고 같은거임
static 메소드 사용해 보았다!
package Test_day06;
public class ArrayParameter {
static void replaceSpace(char a[]) {
for (int i = 0; i < a.length; i++) {
if (a[i] == ' ') {
a[i] = ',';
// 만약에 공백이 있으면 ,로 바꿔줌.
} // end if
} // end for
}// end replaceSpace
static void printCharArray(char a[]) {
for (int i = 0; i < a.length; i++) {
System.out.print(a[i]);
}//end for
System.out.println();
// 배열의 문자 출력 -> 다 찍으면 줄바꿈
}//end printCharArray
public static void main(String[] args) {
char c[] = {'T', 'h', 'i', 's', ' ', 'i', 's', ' ', 'a', ' ', 'p' , 'e', 'n', 'c', 'i', 'l', '.'};
printCharArray(c);
replaceSpace(c);
printCharArray(c);
}
}
이거 생성자를 이용해서 입력받게 고쳐보기.
package Test_day06;
import java.util.Scanner;
class realCalc {
String cal_num;
double num1, num2;
double printnum;
Scanner s = new Scanner(System.in);
// +
public double pls() {
return num1 + num2;
}
// -
public double min() {
return num1 - num2;
}
// *
public double mul() {
return num1 * num2;
}
// /
public double div() {
return num1 / num2;
}
// %
public double res() {
return num1 % num2;
}
public void inputNumber() {
System.out.print("연산자를 입력하세요: ");
this.cal_num = s.nextLine();
System.out.print("계산할 숫자 두개를 입력하세요: ");
this.num1 = s.nextInt();
this.num2 = s.nextInt();
}
public void printNumber() {
System.out.println("연산자는: " + cal_num);
System.out.println("결과값은: " + printnum);
}
public void calcInput() {
switch (cal_num) {
case "+":
printnum = pls();
break;
case "-":
printnum = min();
break;
case "*":
printnum = mul();
break;
case "/":
printnum = div();
break;
case "%":
printnum = res();
break;
}// end switch
}
}
public class Calculator_machine {
public static void main(String[] args) {
realCalc rc = new realCalc();
rc.inputNumber();
rc.calcInput();
rc.printNumber();
}
}
응 생성자를 이용해서 입력받게 고치고 변수도 더 줄였음.
package Test_day06;
class realCalc {
int num0;// 입력용 연산자
double num1, num2;// 입력용 숫자1, 숫자2 - 숫자 2를 저장으로 사용
String printbuho;// 부호 출력
realCalc() {
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("연산자를 입력하세요(1 = +, 2 = -, 3 = *, 4 = /, 5 = %) \n: ");
this.num0 = s.nextInt();
System.out.print("계산할 숫자 두개를 입력하세요: ");
this.num1 = s.nextDouble();
this.num2 = s.nextDouble();
}
// +
public double pls() {
printbuho = "+";
return num1 + num2;
}
// -
public double min() {
printbuho = "-";
return num1 - num2;
}
// *
public double mul() {
printbuho = "*";
return num1 * num2;
}
// /
public double div() {
printbuho = "/";
return num1 / num2;
}
// %
public double res() {
printbuho = "%";
return num1 % num2;
}
// public void inputNumber() {
// System.out.print("연산자를 입력하세요: ");
// this.num0 = s.nextInt();
//
// System.out.print("계산할 숫자 두개를 입력하세요: ");
// this.num1 = s.nextDouble();
// this.num2 = s.nextDouble();
// }
public void printNumber() {
System.out.println("연산자는: " + printbuho);
System.out.println("결과값은: " + num2);
}
public void calcInput() {
switch (num0) {
case 1:
num2 = pls();
break;
case 2:
num2 = min();
break;
case 3:
num2 = mul();
break;
case 4:
num2 = div();
break;
case 5:
num2 = res();
break;
}// end switch
}
}
public class Calculator_machine {
public static void main(String[] args) {
realCalc rc = new realCalc();
// rc.inputNumber();
rc.calcInput();
rc.printNumber();
}
}
-----------------------------배열----------------------
package Test_day06;
class realCalc2 {
int num0;// 입력용 연산자
double num[] = new double[2];// 입력용 숫자 1,2 - 2를 출력용으로 사용
String print_modulus;// 부호 출력용
realCalc2() {
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("연산자를 입력하세요(1 = +, 2 = -, 3 = *, 4 = /, 5 = %) \n: ");
this.num0 = s.nextInt();
System.out.println("계산할 숫자 두개를 입력하세요: ");
for (int i = 0; i < num.length; i++) {
System.out.print((i + 1) + "번째 숫자를 입력하세요: ");
num[i] = s.nextDouble();
}
}
public void printNumber() {
System.out.println("연산자는: " + print_modulus);
System.out.println("결과값은: " + num[num.length - 1]);
}
public void calcInput() {
switch (num0) {
case 1:
print_modulus = "+";
num[num.length - 1] = num[num.length - 2] + num[num.length - 1];
break;
case 2:
print_modulus = "-";
num[num.length - 1] = num[num.length - 2] - num[num.length - 1];
break;
case 3:
print_modulus = "*";
num[num.length - 1] = num[num.length - 2] * num[num.length - 1];
break;
case 4:
print_modulus = "/";
num[num.length - 1] = num[num.length - 2] / num[num.length - 1];
break;
case 5:
print_modulus = "%";
num[num.length - 1] = num[num.length - 2] % num[num.length - 1];
break;
}// end switch
}
}
public class Calculator_machine2 {
public static void main(String[] args) {
realCalc2 rc = new realCalc2();
rc.calcInput();
rc.printNumber();
}
}
------------------------------------------------
http://mathbang.net/99
http://tip.daum.net/question/60107844https://www.google.co.kr/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=%EB%84%93%EC%9D%B4%EC%99%80+%EB%91%98%EB%A0%88+%EA%B5%AC%ED%95%98%EB%8A%94+%EA%B3%B5%EC%8B%9D
어 다 짰는데 수정해볼 거 있나 보기..
package Test_day06;
class Circle {
// 변수는 private
private double num;
public void setNum() {
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("반지름을 입력하세요: ");
this.num = s.nextDouble();
}// setter
public double getNum() {
return num;
}// getter
public double area() {
double val_area;
val_area = num * num * Math.PI;
return val_area;
}// 넓이
public double round() {
double val_round;
val_round = num * 2 * Math.PI;
return val_round;
}// 둘레
public void printShape() {
java.text.DecimalFormat d = new java.text.DecimalFormat(".##");
System.out.println("넓이: " + d.format(area()));
System.out.println("둘레: " + d.format(round()));
}// 출력
}
class Triangle {
private double num1, num2, num3;
public void setNum1() {
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("삼각형 한 변의 길이를 입력하세요.\n1): ");
this.num1 = s.nextDouble();
}// setter
public double getNum1() {
return num1;
}// getter
public void setNum2() {
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("삼각형 한 변의 길이를 입력하세요.\n2): ");
this.num2 = s.nextDouble();
}// setter
public double getNum2() {
return num2;
}// getter
public void setNum3() {
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("삼각형 한 변의 길이를 입력하세요.\n3): ");
this.num3 = s.nextDouble();
}// setter
public double getNum3() {
return num3;
}// getter
public double area() {
double val_area;
double sum = (num1 + num2 + num3) / 2;
val_area = Math.sqrt(sum * (sum - num1) * (sum - num2) * (sum - num3));
return val_area;
}// 넓이
public double round() {
double val_round;
val_round = num1 + num2 + num3;
return val_round;
}// 둘레
public void printShape() {
java.text.DecimalFormat d = new java.text.DecimalFormat(".##");
System.out.println("넓이: " + d.format(area()));
System.out.println("둘레: " + d.format(round()));
}// 출력
}
class Rectangle {
private double num1, num2;
public void setNum1() {
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("사각형 한 변의 길이를 입력하세요.\n1): ");
this.num1 = s.nextDouble();
}// setter
public double getNum1() {
return num1;
}// getter
public void setNum2() {
java.util.Scanner s = new java.util.Scanner(System.in);
System.out.print("사각형 한 변의 길이를 입력하세요.\n2): ");
this.num2 = s.nextDouble();
}// setter
public double getNum2() {
return num2;
}// getter
public double area() {
double val_area;
val_area = num1 * num2;
return val_area;
}// 넓이
public double round() {
double val_round;
val_round = (num1 + num2) * 2;
return val_round;
}// 둘레
public void printShape() {
java.text.DecimalFormat d = new java.text.DecimalFormat(".##");
System.out.println("넓이: " + d.format(area()));
System.out.println("둘레: " + d.format(round()));
}// 출력
}
public class Shape {
public static void main(String[] args) {
Circle david = new Circle();
Triangle david2 = new Triangle();
Rectangle david3 = new Rectangle();
david.setNum();
david2.setNum1();
david2.setNum2();
david2.setNum3();
david3.setNum1();
david3.setNum2();
david.printShape();
david2.printShape();
david3.printShape();
}
}
5. 수업
진도:
hw:
1. 커서 고정하는 법
6. 할것
졸려서 1교시 수업시간 끝나고 잤음...
1. 오늘은 일찍 잘 것
2. 자료구조 메모리 쪽 볼 것 (힙 스택)
3. 아무래도 BMO 지갑 사야함 (이유: 귀여움)
4. 머리카락을 자르러 가야함(안 피곤한 날? 'ㅁ')
5. 이모한테 전화할 것
6. 배타적 논리합 / 논리합 / 논리곱 한번 더 안보고 쓸 것
7. 오락실에 다트판 없나 봐야지...
8. 그리고 그냥 슬리퍼 갖다놔도 되지 않을까
9. http://www.lectureblue.pe.kr/reqtiles/gread.jsp?bbsno=473&nowPage=1&col=content&word=equals&code=5
이거 do-while로 짜보기.
*1. 하얀색 옷 살 것
*2. 마방진으로 하트 만들어보기
'Programming' 카테고리의 다른 글
160323: 8회차 (1) | 2016.03.23 |
---|---|
160322: 7회차 (4) | 2016.03.22 |
160318: 5일차 (2) | 2016.03.18 |
160317: 4회차 (3) | 2016.03.17 |
160316: 3회차 (2) | 2016.03.16 |