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

+ Recent posts