Java static 함수

2023. 1. 26. 13:02Java

static 함수 - 정적 함수

=================

프로젝트 내 src 내 javabasic 패키지 내 Shop.java

package javabasic;

//상품명, 수량, 단가 멤버 변수
public class Shop {
	private String sang;
	private int su;
	private int dan;

	// setter method
	public void setSang(String sang) {
		this.sang = sang;
	}

	public void setSu(int su) {
		this.su = su;
	}

	public void setDan(int dan) {
		this.dan = dan;
	}

	// getter method
	public String getSang() {
		return this.sang;
	}

	public int getSu() {
		return this.su;
	}

	public int getDan() {
		return this.dan;
	}

	// 수량*단가
	public int getTotal() {
		return su * dan;
	}
}

 

프로젝트 내 src 내 javabasic 패키지 내 Ex8Object.java

package javabasic;

import java.util.Scanner;

public class Ex8Object {
//	데이타 입력
	public static void shopInput(Shop[] shop) {
		Scanner sc = new Scanner(System.in);
		// 데이타 입력
		for (int i = 0; i < shop.length; i = i + 1) {
			// 생성
			shop[i] = new Shop();
			System.out.println("상품명");
			String sang = sc.nextLine();
			shop[i].setSang(sang);

			System.out.println("수량과 단가를 입력하세요");
			int su = Integer.parseInt(sc.nextLine());
			int dan = Integer.parseInt(sc.nextLine());

			shop[i].setSu(su);
			shop[i].setDan(dan);
			System.out.println();
		}

	}

	// 데이타 출력
	public static void shopOutput(Shop[] shop) {
		// 출력
		System.out.println("번호\t상품명\t수량\t단가\t총금액");
		for (int i = 0; i < shop.length; i = i + 1) {
			System.out.println(i + 1 + "\t" + shop[i].getSang() + "\t" + shop[i].getSu() + "\t" + shop[i].getDan()
					+ "\t" + shop[i].getTotal());
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// Shop 에 저장할 갯수를 입력후 할당
		// 상품정보를 키보드로 입력하여 출력하기
		Scanner sc = new Scanner(System.in);
		Shop[] shop;
		int cnt;

		System.out.println("저장할 상품의 갯수를 입력하세요");
		cnt = Integer.parseInt(sc.nextLine());
		// 메모리할당
		shop = new Shop[cnt];

		shopInput(shop);
		shopOutput(shop);
	}

}

Ex8Object.java 에서 수량과 단가를 입력하세요 에서

수량과 단가 사이에 엔터 구분자가 아닌 스페이스바 나 탭 같은 것을 쓰면 오류가 난다.

수량과 단가 사이 구분자는 엔터로 한다.

그렇게 쓰지 않으면 다음과 같이 오류가 뜬다.

저장할 상품의 갯수를 입력하세요
3
상품명
golf ball
수량과 단가를 입력하세요
2	500
Exception in thread "main" java.lang.NumberFormatException: For input string: "2	500"
	at java.base/java.lang.NumberFormatException.forInputString(NumberFormatException.java:65)
	at java.base/java.lang.Integer.parseInt(Integer.java:652)
	at java.base/java.lang.Integer.parseInt(Integer.java:770)
	at javabasic.Ex8Object.shopInput(Ex8Object.java:18)
	at javabasic.Ex8Object.main(Ex8Object.java:51)

구분자를 엔터로 쓰면 결과는 다음과 같다.

저장할 상품의 갯수를 입력하세요
3
상품명
golf ball
수량과 단가를 입력하세요
2
10000

상품명
책
수량과 단가를 입력하세요
5
20000

상품명
화장품
수량과 단가를 입력하세요
1
2000

번호	상품명	수량	단가	총금액
1	golf ball	2	10000	20000
2	책	5	20000	100000
3	화장품	1	2000	2000

========================================

수량과 단가를 nextInt() 로 입력받을 때는 다음과 같이 쓴다.

========================================

프로젝트 내 src 내 javabasic 패키지 내 Ex8Object.java

package javabasic;

import java.util.Scanner;

public class Ex8Object {
//	데이타 입력
	public static void shopInput(Shop[] shop) {
		Scanner sc = new Scanner(System.in);
		// 데이타 입력
		for (int i = 0; i < shop.length; i = i + 1) {
			// 생성
			shop[i] = new Shop();
			System.out.println("상품명");
			String sang = sc.nextLine();
			shop[i].setSang(sang);

			System.out.println("수량과 단가를 입력하세요");
//			int su = Integer.parseInt(sc.nextLine());
//			int dan = Integer.parseInt(sc.nextLine());
			int su = sc.nextInt();
			int dan = sc.nextInt();
			
			shop[i].setSu(su);
			shop[i].setDan(dan);
			sc.nextLine();
			System.out.println();
		}

	}

	// 데이타 출력
	public static void shopOutput(Shop[] shop) {
		// 출력
		System.out.println("번호\t상품명\t수량\t단가\t총금액");
		for (int i = 0; i < shop.length; i = i + 1) {
			System.out.println(i + 1 + "\t" + shop[i].getSang() + "\t" + shop[i].getSu() + "\t" + shop[i].getDan()
					+ "\t" + shop[i].getTotal());
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// Shop 에 저장할 갯수를 입력후 할당
		// 상품정보를 키보드로 입력하여 출력하기
		Scanner sc = new Scanner(System.in);
		Shop[] shop;
		int cnt;

		System.out.println("저장할 상품의 갯수를 입력하세요");
		cnt = Integer.parseInt(sc.nextLine());
//		cnt = sc.nextInt();
		// 메모리할당
		shop = new Shop[cnt];

		shopInput(shop);
		shopOutput(shop);
	}

}
저장할 상품의 갯수를 입력하세요
3
상품명
golf ball
수량과 단가를 입력하세요
2 10000

상품명
책
수량과 단가를 입력하세요
5	20000

상품명
화장품
수량과 단가를 입력하세요
1	2000

번호	상품명	수량	단가	총금액
1	golf ball	2	10000	20000
2	책	5	20000	100000
3	화장품	1	2000	2000

========================================

저장할 상품의 갯수도 nextInt() 로 입력받을 때는 다음과 같이 쓴다.

========================================

프로젝트 내 src 내 javabasic 패키지 내 Ex8Obejct.java

 

package javabasic;

import java.util.Scanner;

public class Ex8Object {
//	데이타 입력
	public static void shopInput(Shop[] shop) {
		Scanner sc = new Scanner(System.in);
		// 데이타 입력
		for (int i = 0; i < shop.length; i = i + 1) {
			// 생성
			shop[i] = new Shop();
			System.out.println("상품명");
			String sang = sc.nextLine();
			shop[i].setSang(sang);

			System.out.println("수량과 단가를 입력하세요");
//			int su = Integer.parseInt(sc.nextLine());
//			int dan = Integer.parseInt(sc.nextLine());
			int su = sc.nextInt();
			int dan = sc.nextInt();
			
			shop[i].setSu(su);
			shop[i].setDan(dan);
			sc.nextLine();
			System.out.println();
		}

	}

	// 데이타 출력
	public static void shopOutput(Shop[] shop) {
		// 출력
		System.out.println("번호\t상품명\t수량\t단가\t총금액");
		for (int i = 0; i < shop.length; i = i + 1) {
			System.out.println(i + 1 + "\t" + shop[i].getSang() + "\t" + shop[i].getSu() + "\t" + shop[i].getDan()
					+ "\t" + shop[i].getTotal());
		}
	}

	public static void main(String[] args) {
		// TODO Auto-generated method stub
		// Shop 에 저장할 갯수를 입력후 할당
		// 상품정보를 키보드로 입력하여 출력하기
		Scanner sc = new Scanner(System.in);//main 함수의 Scanner sc 와
		//위의 shopInput(Shop[] shop) 함수 내의 Scanner sc 는 다른 객체이기 때문에
		//여기서 nextInt() 를 사용하고 버퍼에 남은 엔터가 shopInput(Shop[] shop) 함수에서의 Scanner sc 객체로부터의
		//입력에 아무런 영향을 주지 않는다. 왜냐하면 이름만 같고 다른 객체로 새로 객체를 만들어서 사용하기 때문이다.
		//그래서 shopInput(Shop[] shop) 함수 내에서 main 에서 버퍼에 남은 엔터를 제거하기 위하여 쓰는 코드인
		//sc.nextLine(); 구문은 맨 앞에 쓰지 않아도 되고 단지, shopInput(Shop[] shop) 함수에서 마지막에 쓴 sc.nextInt();
		//두 줄에서 버퍼에 남은 엔터를 제거하여 처리하기 위한 sc.nextLine(); 구문 한 줄 만을 맨 마지막에 써주면 엔터제거를 용이하게 할 수 있다.
		Shop[] shop;
		int cnt;

		System.out.println("저장할 상품의 갯수를 입력하세요");
//		cnt = Integer.parseInt(sc.nextLine());
		cnt = sc.nextInt();
		// 메모리할당
		shop = new Shop[cnt];

		shopInput(shop);
		shopOutput(shop);
	}

}
저장할 상품의 갯수를 입력하세요
3
상품명
golf ball
수량과 단가를 입력하세요
2	10000

상품명
책
수량과 단가를 입력하세요
5	20000

상품명
화장품
수량과 단가를 입력하세요
1	2000

번호	상품명	수량	단가	총금액
1	golf ball	2	10000	20000
2	책	5	20000	100000
3	화장품	1	2000	2000

 

'Java' 카테고리의 다른 글

Java BigDecimal  (0) 2023.01.26
Java call by value  (0) 2023.01.26
Java 상품 정보 입력  (0) 2023.01.26
Java static 변수 변경  (0) 2023.01.25
Java public  (0) 2023.01.25