9일차 강의 정리


DAY8, DAY9 는 클래스의 구성요소에 대해 다룬다

1. 멤버필드(멤버변수,전역변수)/지역변수

소스

public class Ex01 {

public int a = 100; //멤버필드 - 인스턴스변수

int c;

//c=5; //분리하면 오류

public static int b = 50;         //멤버필드 - 클래스변수

public static void main(String[] args) {

func1();        //static 메소드 호출

Ex01 me = new Ex01();    //클래스이름 (...) = new 클래스이름();  선언

me.func2();    //non - static 메소드 호출

}//main end


//클래스 메소드,static 메소드

public static void func1(){

System.out.println("나는 static");

//System.out.println("멤버 필드는 a="+a); //오류 

System.out.println("멤버 필드는 b="+b); //static 끼리는 가능

Ex01 me = new Ex01();       

int temp=me.a;                 //클래스의 a 를 가져와 temp에 저장

System.out.println("멤버 필드는 a="+temp); //이렇게 사용해야 가능

}


//인스턴스메소드,non-static 메소드

public void func2(){ //static 과 non 은 오버로드가 안됨 그래서 이름 변경

System.out.println("나는 non-static");

System.out.println("멤버 필드는 a="+a);

System.out.println("멤버 필드는 b="+b); //static 변수는 사용가능

}

}//class end

static 변수,static메소드 간의 호출 및 사용은 가능하지만 non - static 변수,메소드를 사용하기 위해서 객체를 선언해야 사용이 가능

하지만 반대로 non - static 변수,메소드는 객체 선언을 하지않아도 static 변수,메소드를 사용가능하다

결과

소스

public class Ex02 {

int a=0; //멤버필드

public static void main(String[] args) {

Ex02 me = new Ex02();

  /*Ex02 me;                    //선언(참조변수의 선언)

me = new Ex02();     //초기화

 */

me.func1();

me.func1();

me.func2();

System.out.println("a="+me.a); //멤버필드

int a=1;

System.out.println("a="+a); //지역변수

int temp=me.func3();

System.out.println("func3:"+temp); //지역변수

}//main end


public void func1(){

a++;

}

public void func2(){

a += 10;

}

public int func3(){

int a=0; //지역변수

a += 100; //우선순위 : 지역변수 > 멤버필드

return a;

}

}//class end

지역변수와 멤버필드의 변수명이 동일할 경우 

우선순위가 지역변수>멤버필드 이다

결과

소스

public class Ex03 {

int a=0;

public static void main(String[] args) {

Ex03 me;         //선언(참조변수의 선언)

me = new Ex03(); //초기화

System.out.println(me.a);

me.a++;

System.out.println(me.a);

me = new Ex03();

System.out.println(me.a);

String st = null; //null != ""

Scanner sc = null;

sc = new Scanner(System.in);

}//main end

}//class end

참조변수의 선언을 다시 하게되면 다시 초기값을 갖게된다

2. 문제

Q1. 은행 입출금하기

 * static 메소드 이용

소스

import java.util.*;

public class Ex03 {

static int money=0;

public static void main(String[] args) {

System.out.println("환영합니다.");

bankCD();                    //bankCD() 호출

}//main end

public static void bankCD(){

boolean tf = true;

while(tf){

System.out.println("------------------------------------");

System.out.println("1. 입금 2. 출금 3. 계좌확인 0. 종료");

System.out.println("------------------------------------");

Scanner sc = new Scanner(System.in);

System.out.print("메뉴선택:");

String st = sc.nextLine();            //메뉴 입력

int input = Integer.parseInt(st);    //문자열을 정수형으로 변환

int input2;


switch(input){

case 1: //입금

System.out.print("입금 금액: ");

input2 = Integer.parseInt(sc.nextLine());

func1(input2);

break;

case 2: //출금

System.out.print("출금 금액: ");

input2 = Integer.parseInt(sc.nextLine());

func2(input2);

break;

case 3: //계좌확인

System.out.println("현재 은행 잔고는 "+money+"입니다.");

break;

case 0: //종료

tf=false;

System.out.println("종료합니다.이용해 주셔서 감사합니다.");

break;

default: //입력오류

System.out.println("입력범위는 0-3 입니다.");

}//switch end

}

}

public static void func1(int a){     //입금 기능

money += a ;

}

public static void func2(int a){     //출금 기능

money -= a ;

}

}//class end

결과

* non - static 메소드 이용

소스

import java.util.Scanner;

public class Ex04 {

int money=0;

boolean tf = true;

public static void main(String[] args) {

System.out.println("***어서 오십시오 환영합니다***");

Ex04 me = new Ex04();

while(me.tf){

me.bankCD();

}

System.out.println("종료합니다.이용해 주셔서 감사합니다.");

}//main end

public void bankCD(){

System.out.println("------------------------------------");

System.out.println("1.입금  2.출금  3.계좌확인  0.종료");

System.out.println("------------------------------------");


Scanner sc = new Scanner(System.in);

System.out.print("메뉴선택:");

String st = sc.nextLine();

int input = Integer.parseInt(st);

int input2;

String yn;


switch (input) {

case 1: // 입금

System.out.print("입금 금액: ");

input2 = Integer.parseInt(sc.nextLine());

System.out.print(input2 + "원 을 입금하시겠습니까(y/n)?");

yn = sc.nextLine();

if (yn.equals("y")) {

func1(input2); // non - non 끼리 단순 호출가능

System.out.println(input2 + "원 입금되셨습니다.");

else { //취소

System.out.println("입금이 취소 되셨습니다.");

}

break;

case 2: // 출금

System.out.print("출금 금액: ");

input2 = Integer.parseInt(sc.nextLine());

System.out.print(input2 + "원 을 출금하시겠습니까(y/n)?");

yn = sc.nextLine();

if (yn.equals("y")) {

func2(input2);

System.out.println(input2 + "원 출금되셨습니다.");

} else { //취소

System.out.println("출금이 취소 되셨습니다.");

}

break;

case 3: // 계좌확인

System.out.println("현재 은행 잔고는 " + money + "원 입니다.");

break;

case 0: // 종료

tf = false;

break;

default: // 입력오류

System.out.println("입력범위는 0-3 입니다.");

}// switch end

}//bankCD end

public void func1(int a){ //예금기능

money += a ;

}//func1 end

public void func2(int a){ //출금기능

money -= a ;

}//func2 end

}//class end

결과

위의 소스와 동일

Q2. 자재관리 프로그램

아이스크림 공장 -> 관리대상 - 물,설탕

아이스크림 1box 당 - 물 3리터, 설탕 2그램

1.입고 2.출고 3.생산 가능량(capa) 4. 종료

소스

import java.util.*;

public class Ex05 {

int water=0;

int sugar=0;

boolean tf = true;

String menu = "1.입고  2.출고  3.생산 가능량  4.생산 출고  0.종료";

public static void main(String[] args) {

Ex05 me = new Ex05();

System.out.println("자재관리시스템(아이스크림 공장)(v1.1.1)");

me.factory();     //메소드 호출

System.out.println("종료합니다.이용해 주셔서 감사합니다.");

}//main end

void factory(){

Scanner sc = new Scanner(System.in); //모든 선언은 반복문 밖에 넣는게 효율적

int input;

int input2;

while(tf){

System.out.println();

System.out.println("--------------------------------------------------");

System.out.println(menu);

System.out.print(">>>");

input = Integer.parseInt(sc.nextLine());

switch(input){

case 1: //입고

System.out.print("입고할 물품 물(1),설탕(2) 중 선택:");

input2 = Integer.parseInt(sc.nextLine());

func1(input2);

break;

case 2: //출고

System.out.print("출고할 물품 물(1),설탕(2) 중 선택:");

input2 = Integer.parseInt(sc.nextLine());

func2(input2);

break;

case 3: //생산가능량

func3();

break;

case 4: //생산출고

System.out.print("생산 할 BOX 입력:");

input2 = Integer.parseInt(sc.nextLine());

func4(input2);

func3();

break;

case 0: //종료

tf = false;

break;

default: //입력오류

System.out.println("입력범위는 0-3 입니다.");

}//switch end

}//while end

}//factory end


public void func1(int a){ //입고 기능

Scanner sc = new Scanner(System.in);

int in;

if(a==1){

System.out.print("입고할 물의 l 수 입력:");

in = Integer.parseInt(sc.nextLine());

water += in;

}else if(a==2){

System.out.print("입고할 설탕의 g 수 입력:");

in = Integer.parseInt(sc.nextLine());

sugar += in;

}else{

System.out.println("잘못입력하셨습니다.");

}

}//func1 end

public void func2(int a){ //출고 기능

Scanner sc = new Scanner(System.in);

int out;

if(a==1){

System.out.print("출고할 물의 l 수 입력(max:"+water+"):"); //출고량이 - 가 되지않게 조건달아주기 if()

out = Integer.parseInt(sc.nextLine());

water -= out;

}else if(a==2){

System.out.print("출고할 설탕의 g 수 입력(max:"+sugar+"):");

out = Integer.parseInt(sc.nextLine());

sugar -= out;

}else{

System.out.println("잘못입력하셨습니다.");

}

}//func2 end

public void func3(){ //생산가능량 아이스크림 1box 당 - 물 3리터, 설탕 2그램

System.out.print("생산 가능량은 물:"+water+"l 설탕:"+sugar+"g 으로");

if(water>=3 && sugar>=2){

if(water/3<sugar/2){

System.out.println(water/3+" BOX 입니다.");

}else{

System.out.println(sugar/2+" BOX 입니다.");

}

}else{

System.out.println("0 BOX 입니다.");

}

}//func3 end

public void func4(int i){ //생산 출고

water -= i*3;

sugar -= i*2;

}//func4 end

}//class end

결과


'* Programming > JAVA' 카테고리의 다른 글

DAY10 업다운 게임  (0) 2016.07.18
DAY10 Class/생성자  (0) 2016.07.18
Apache Ant  (0) 2016.07.13
DAY8 클래스 메소드  (0) 2016.07.13
DAY 7 문제  (0) 2016.07.12

Apache Ant 설치하기

http://ant.apache.org/

Download

Download 에서 Binary Distributions 를 선택

맨 아래 다운로드 받는 파일 3가지중 컴퓨터에 맞는 것을 찾아 다운로드

window .zip 파일을 설치


설치하는 동안 사이드의 메뉴창에서 

Documentation 에서 Manual 선택


설명이 있고....

이곳의 메뉴에서 두번째 메뉴인 Installing Apache Ant 선택 후 

다음 메뉴에서 Getting Apache Ant 선택 하면 아래와 같은 창이 나온다


여기서 설명을 보고 설치를 하면된다


그럼 지금부터 설치 하는 방법을 설명하려 한다

1. .zip 파일의 압축을 푼다

2. C:\ 안에 mtest 폴더를 만들어서 그안에 압축풀은 파일을 가져온다

3. mtest 폴더 안에 test 폴더를 만들어 여기에 올린 파일을 다운받아 넣는다

build.properties

build.xml

4. test폴더에 .java 파일(src폴더 등)을 복사에 넣는다


내컴퓨터의 고급 시스템 설정 에서 환경변수 선택


새 시스템 변수로 사진처럼 추가한다

이름: ANT_HOME

변수값: C:\mtest\apache-ant-1.9.7


변수 Path 를 찾아 편집으로 (다른 것은 절대 건들여선 안된다)

제일 마지막에 ; 뒤에 %ANT_HOME%/bin 를 입력하고 확인


cmd 창에서 test 폴더 경로에서 ant 를 입력


java 파일에 오류가 없으면 SUCCESSFUL 이 뜨며 성공

그래서 폴더로 들어가보면 bulid 폴더에 .java 파일을 컴파일 한 .class 파일만 남게된다

올린 두개의 파일과 src 폴더의 .java 만 있으면 cmd창에서 언제든 실행가능하다

'* Programming > JAVA' 카테고리의 다른 글

DAY10 Class/생성자  (0) 2016.07.18
DAY9 멤버필드  (0) 2016.07.15
DAY8 클래스 메소드  (0) 2016.07.13
DAY 7 문제  (0) 2016.07.12
DAY6 random 함수  (0) 2016.07.12

8일차 강의 정리


1. static 메소드(클래스 메소드)

public static 자료형 메소드명(인자){ }

메소드 의미 - 기능요소를 분리

자료형의 결정은 return xx; 중 xx에 의해 결정

단, return 없거나(생략) reuturn; 인 경우 void

public class Ex01 {

public static void main(String[] args) {

func1(hap());                            //함수 func1 호출

System.out.println("---------------");

System.out.println(sum(hap())); //3+3

System.out.println("---------------");

System.out.println(sum(sum(hap())));//6+6

System.out.println("---------------");

System.out.println(sum(sum(sum(hap()))));//12+12

}//main end


static void func1(int a){

System.out.println("func1");

if(a>10)return; //return 을 만나면 아래의 소스 실행 X

System.out.println("a>10이라서 실행!!");

return;

}//func1 end

static int hap(){ //return 3

return 1+2;

}//hap end

static int sum(int a){

int add = a+a;

System.out.println(a+"+"+a+"="+add);

return add;

}//sum end

}//class end

결과

소스(return 과 break 의 차이)

public class Ex02 {

public static void main(String[] args) {

func1(10);                //func1 호출

}//main end

static void func1(int a){

while(a<20){

System.out.println("run"+a++);

if(a>15)break; //break->a출력 O / reuturn->a출력 X

}

System.out.println("aaaaaaaa");

}//func1 end

}//class end

결과(break 경우)

결과(빨간 부분 return으로 변경한 경우)

*재귀함수

재귀함수는 자바에는 존재 하지않지만 재귀함수 처럼 작성이 가능하다

소스

public class Ex03 {

public static void main(String[] args) {

//재귀함수(나를 다시 호출)

//메소드 == 함수

say(5);

}//main end

static void say(int a){ //재귀함수

System.out.println("say hello");

if(a==1){return;}

say(--a); //다시 호출

}

}

결과

재귀함수이용한 문제

Q. 7+6+5+4+3+2+1=?

public class Ex03 {

public static void main(String[] args) {

qus(7,0);

//System.out.println(say(7));

}//main end

static void qus(int a,int sum){

System.out.print(a);

sum +=a;

if(a>1){

System.out.print("+");

}else {

System.out.print("="+sum);

return;}

qus(--a,sum);

}

//다른방법

/* static int say(int a){

if(a==1){

System.out.print(a+"=");

return 1;

}else{

System.out.print(a+"+");

}

return a+say(--a);

}*/

}//class end

결과


2. non-static 메소드

public 자료형 메소드명(인자){ }

static메소드는 static메소드 끼리의 접근만 허용

static메소드에서 non-static메소드로 접근하려면 

클래스명 변수명 = new 클래스명(); 으로 생성된 변수를 통해서만 실행가능

반면, non-static메소드에서는 non-static메소드 접근 허용하며

또한 static으로의 호출도 허용

소스

public class Ex01 {

public static void main(String[] args) {

//func1(); //오류

Ex01 ex = new Ex01(); //static 없는 함수 func1 사용하는 방법(참조변수를 생성을 해야가능)

ex.func1(); //func1 호출(다른 클래스에서 호출이 불가)

System.out.println("----------------------");

ex.func2(100);

System.out.println("----------------------");

Ex01 ex1 = new Ex01();        //재선언

ex1.func2(50);

System.out.println("----------------------");

Ex01.prn(); //static 있는 함수 prn() 사용(내 클래스(Ex02)안의 static이기 때문에 "Ex02."생략가능)

}//main end


static void prn(){

System.out.println("난스태틱");

Ex01 me = new Ex01(); //여기서도 참조변수 생성 static에서 non-static을 사용하기위해

me.func1(); //non-static 호출

}//prn end

void func1(){

System.out.println("func1 호출");

}//func1 end

void func2(int a){

prn(); //non-static 에서 static메소드 호출은 그냥해도 ok

func1(); //main에서 이미 참조변수 생성해서 ok

System.out.println(a+"을 인자로 전달받은 메소드");

}//func2 end

}//class end

결과

소스(Scanner 사용)

import java.util.Scanner;     //Scanner를 사용하기 위한 import


public class Ex02 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in); //Scanner 선언

Ex01 func = new Ex01(); //non-static 메소드를 사용하기 위해 

System.out.print("첫번째 수: ");

String input1 = sc.nextLine(); //입력

System.out.print("연산자: ");

String input2 = sc.nextLine(); //입력

System.out.print("두번째 수: ");

String input3 = sc.nextLine(); //입력


int a = Integer.parseInt(input1); //첫번째 숫자 String 형에서 int 형으로 변환

int b = Integer.parseInt(input3); //두번째 숫자 String 형에서 int 형으로 변환


func.cal(a, input2, b); //메소드 호출

}

void cal(int a,String s, int b){

switch(s){

case "+":

System.out.println(a+"+"+b+"="+(a+b));

break;

case "-":

System.out.println(a+"-"+b+"="+(a-b));

break;

case "*":

System.out.println(a+"X"+b+"="+(a*b));

break;

case "/":

System.out.println(a+"÷"+b+"="+(a/b));

break;

default:

System.out.println("잘못입력하셨습니다.");

}//switch end

}//cal end

}//class end

결과

새로운 내용!

Scanner 사용하여 입력을 콘솔 창에서 받는다


'* Programming > JAVA' 카테고리의 다른 글

DAY9 멤버필드  (0) 2016.07.15
Apache Ant  (0) 2016.07.13
DAY 7 문제  (0) 2016.07.12
DAY6 random 함수  (0) 2016.07.12
DAY6 문제  (0) 2016.07.12

7일차 강의 정리


Q1. 학생 성적관리 프로그램(조건문 복습)

소스

//국어 80, 영어 75, 수학 90

//합계와 평균을 구하시오

//학점 -> 평균>=90 : A학점, >=80 : B학점, >=70 : C학점, >=60 : D학점, 나머지 F학점(과락) 재시험 응시하세요

int kor = Integer.parseInt(args[0]);

int eng = Integer.parseInt(args[1]);

int math = Integer.parseInt(args[2]);

int sum = kor+eng+math;

double avg = 100*sum/3/100.0;

char result;

//System.out.println("-------학생 성적 관리 프로그램-------");

System.out.println("국어\t영어\t수학\t합계\t평균");

System.out.println("-------------------------------------");

System.out.println(kor+"\t"+eng+"\t"+math+"\t"+sum+"\t"+avg);

System.out.println("-------------------------------------");


if (avg >= 90) {

result = 'A';

} else if (avg >= 80) {

result = 'B';

} else if (avg >= 70) {

result = 'C';

} else if (avg >= 60) {

result = 'D';

} else {

result = 'F';

System.out.println("과락.. 재시험 응시하세요.");

}        //if 문을 사용했을 경우

switch((int)avg/10){

case 10:

case 9:

result = 'A';

break;

case 8:

result = 'B';

break;

case 7:

result = 'C';

break;

case 6:

result = 'D';

break;

default:

result = 'F';

System.out.println("과락.. 재시험 응시하세요.");

break;

}        //switch 문을 사용했을 경우

System.out.println("학점 : "+result+"학점");

결과

Q2.  2e1+2e2+2e3+2e4+...+2e10=? (반복문 복습)

//2e1+2e2+2e3+2e4+...+2e10=?

//2+(2*2)+(2*2*2)+(2*2*2*2)

int i=2;

int sum=0;

int count=0;

boolean b=true;

for(int j=1;j<11;j++){

System.out.print(i+"e"+j);

if(j<10){

System.out.print("+");

}

}

while(b){

i *= 2;

sum += i;

count++;

if(count>=9){

b = false;

}

}

System.out.println("="+(sum+1));

결과

Q3. A, B, C, .... , Z 출력

소스

char ch = 65;            // 'A' , 'a'는 97

while(ch<91){        // 'Z' 까지

System.out.print(ch);

if(ch<90){

System.out.print(", ");

}

ch++;

}

System.out.println();

결과

Q4. a b c d e

f g h i h

...  z

소스

char ch = 97;

int count = 0;

while(ch<=(int)'z'){

System.out.print(ch+" ");

count++;

if(count%5==0){

System.out.println();

}

ch++;

}

System.out.println();

다른방법

for(int i=0;i<6;i++){

for(int j=1;j<=5;j++){

 

if(j+i*5<=26){

System.out.print((char)((j+i*5)+96)+" ");

}

}

System.out.println();

}

결과

Q5. 트리모양 

   *

  ***

 *****

소스1

int limit=4;

for(int a=1;a<=3;a++){

for(int b=1;b<5;b++){

if(b<limit){

System.out.print(' ');

}else{

System.out.print('*');

}

}

for(int b=1;b<a;b++){

System.out.print('*');

}

limit--;

System.out.println();

}

소스2

int tmp=0;

for(int a=1;a<=3;a++){

for(int b=1;b<=5;b++){

if(b<3-tmp){

System.out.print(' ');

}else if(b>3+tmp){

System.out.print(' ');

}else{

System.out.print('*');

}

}

tmp++;

System.out.println();

}

결과


'* Programming > JAVA' 카테고리의 다른 글

Apache Ant  (0) 2016.07.13
DAY8 클래스 메소드  (0) 2016.07.13
DAY6 random 함수  (0) 2016.07.12
DAY6 문제  (0) 2016.07.12
DAY5 기본 메소드  (0) 2016.07.11

6일차 강의 정리


1.random() 함수

소스

public class Ex01 {

public static void main(String[] args) throws Exception{

double ran = Math.random(); //0 <= random < 1

System.out.print("가위(0),바위(1),보(2) 를 선택하세요 : ");

int i = System.in.read()-48;    //console창에 입력

//System.out.println(i);

//int i = Integer.parseInt(args[0]); //문자열을 정수형으로 변환 //args[]를 이용하여 입력받을 수도 있음

int com = (int)(3*ran+0); //0,1,2 의 숫자만 com 에 저장, +n 의 n은 시작숫자

if(i==0 && com==1){

System.out.println("com :"+com+"\n졌습니다...");

}else if(i==0 && com==2){

System.out.println("com :"+com+"\n이겼습니다!!");

}else if(i==1 && com==2){

System.out.println("com :"+com+"\n졌습니다...");

}else if(i==1 && com==0){

System.out.println("com :"+com+"\n이겼습니다!!");

}else if(i==2 && com==0){

System.out.println("com :"+com+"\n졌습니다...");

}else if(i==2 && com==1){

System.out.println("com :"+com+"\n이겼습니다!!");

}else{

System.out.println("com :"+com+"\n비겼습니다.");

}

}//main end

}//class end

컴퓨터와 가위바위보 하기

Math.random() 은 0에서 1사이의 숫자를 랜덤으로 가져온다

가위(0), 바위(1), 보(2) 를 가져오기위해 

*3 : 3이전 까지의 숫자, 0,1,2만 출력

+n : n은 처음 시작 숫자를 결정

결과


'* Programming > JAVA' 카테고리의 다른 글

DAY8 클래스 메소드  (0) 2016.07.13
DAY 7 문제  (0) 2016.07.12
DAY6 문제  (0) 2016.07.12
DAY5 기본 메소드  (0) 2016.07.11
DAY4 문제  (0) 2016.07.11

+ Recent posts