7일차 - 240104

김리오·2024년 1월 4일

학원공부 TIL

목록 보기
7/13

📌240103 과제(표채우기) - Solution

  • printf 이용해서 출력 및 정렬할 때,
    직접 수를 입력하는 것보다 탭 입력해주는 게 좋다
  • 평균 출력할 때 소수점 자리 나오게 하는 방법 잘 기억해두자
//240103 숙제 보완

package ex06_3_method_intro3_return;

public class Homework_240103_Solution {
	public static void main(String[] args) {
		String name[] = { "강호동", "이승기", "유재석", "하하", "이광수" };
		String sub_name[] = { "국어", "수학", "영어" };

		int[][] score = { { 85, 60, 70 }, // 0행(1번학생)
				{ 90, 95, 80 }, // 1행(2번학생)
				{ 75, 80, 100 }, // 2행(3번학생)
				{ 80, 70, 95 }, // 3행(4번학생)
				{ 100, 65, 80 } // 4행(5번학생)
		};

		int[] subject = new int[3]; // 과목총점 저장
		int[] student = new int[5]; // 학생의 총점 저장

		System.out.println("=========== 학생별  /  과목별 총점구하기 ===========");

		String[] R2 = { "국어", "수학", "영어", "총점", "평균" };
		for (int i = 0; i < R2.length; i++) {
			System.out.printf("%s\t", R2[i]);
		}

		System.out.println();

		///////////////////// 학생의 총점//////////////////////
		for (int i = 0; i < score.length; i++) {
			for (int j = 0; j < score[i].length; j++)
				student[i] += score[i][j];
		}

		/////////////////// 표 채우기////////////////////////
		for (int i = 0; i < name.length; i++) {
			System.out.printf("%s\t", name[i]); // 정렬할때 \t으로 하면 간격 잘 맞음

			for (int j = 0; j < score[i].length; j++) {
				System.out.printf("%s\t", score[i][j]);
			}

			System.out.printf("%s\t %.1f\t%n", student[i], (student[i] / 3f)); // 소수점 표현하기 연습!!

		}

		////////////////// 과목 총점 채우기 //////////////////////
		System.out.println("=================================================");
		System.out.printf("%s\t", "총점");

		///////////////// 과목 총점 /////////////////////////
		for (int i = 0; i < 3; i++) {
			for (int j = 0; j < 5; j++) {
				subject[i] += score[j][i];
			}
		}

		for (int i = 0; i < subject.length; i++) {
			System.out.printf("%s\t", subject[i]);
		}
	}
}

📌method overloading

//오버로딩을 이용한 print() 메서드 정의 및 호출
/*
 * 자바는 메서드 시그니처를 사용해 메서드를 구분한다.
 * 메서드 시그니처 (Method Signature)는
   메서드 이름, 매개변수 개수, 데이터 타입, 순서를 의미한다.
   하나라도 다르면 다른 메서드로 정의하는 것을 메서드 오버로딩이라고 한다.
 * 자바는 반환형으로 메서드를 구분하지 않는다.
 */

package ex06_4_method_overloading;

public class Method_overloading {
	//매개변수 없는 메서드 - 1
	public static void print() {
		System.out.println("print()메서드 입니다.");
		return;
	} 
	
	//매개변수 한 개를 갖는 메서드 - 2
	public static void print(int num) {
		System.out.println("print(int num)메서드 입니다.");
	}
	
	//매개변수 두 개를 갖는 메서드 - 3
	public static void print(int num, char data) {
		System.out.println("print(int num, char data)메서드 입니다.");
	}
	
	//매개변수 두 개를 갖는 메서드 - 매개변수 자료형의 순서가 다르다. - 4
	public static void print(char num, int data) {
		System.out.println("print(char num, int data)메서드 입니다.");
	}
	
/*	 3번과 동일한 메서드로 취급한다.
	Duplicate method print(int, char) in type Method_overloading	
	public static String print(int num, char data) {
		System.out.println("print(int num, char data)메서드 입니다.");
	}
*/
	
	// main메서드에서 정의된 메서드를 활용하려면, 인자(arguments)를 활용하면 됨
	public static void main(String[] args) {
		print();
		print(10);
		print(10, 'a');
	}
}

📌pubilic static void main의 의미

public class MethodExample7 {

	
	//접근제어자 : 어떤 페키지에서도 접근 가능   객체생성없이접근가능   반환되는 값의 자료형     메서드이름(매개변수 목록)
	                     public 	           static                void             main(String[] args) {
		   int num = 50;
		   //num 변수가 갖고 있는 값을 print()안에서 출력하려면 어떻게 해야 할까?
		   print(num);	//메서드의 괄호안에 값을 넣어준다
		   				//메서드를 정의한 곳에서 num 값을 저장하기 위한 변수를 선언해 주어야 함
		   				//호출하는 메서드에서 사용한 num의 값을 인자라고 하며
		   				//메서드 정의에 사용된 parameter를 매개변수라고 한다
	   }

	//메서드 정의
	   public static void print(int parameter) { //자바에서 값을 받으려면 자료형을 명시해야 함
		   System.out.println("print() 메서드 입니다.");
		   System.out.println("main() 메서드에서 전달받은 데이터의 값은 " + parameter + "입니다.");
		   
	   }

}

📌method 2개를 중첩해서 사용하는 문제

/*
1. input()
	기능 : 정수를 입력 받는 메서드
	반환형 : 입력 받은 정수형을 리턴한다.

2. abs(int data)
	기능 : 절대값 구하기
	매개변수 : 정수형 한 개
	반환형 : 매개변수로 입력받은 정수형 값을 절대값으로 구한 뒤 리턴

출력결과)
정수를 입력 하세요? -3
절대값 : 3
 */
 
package ex06_3_method_intro3_return;

import java.util.Scanner;

public class MethodExample2_abs_input {

	public static int input() { // 매개변수가 필요할까?
		Scanner sc = new Scanner(System.in);
		System.out.print("정수를 입력 하세요?");
		int value = sc.nextInt();
		sc.close();

		return value;
	}

	public static int abs(int data) {
		if (data >= 0) {
		} else {
			data = (-(data));
		}
		return data;
	}

	public static void main(String[] args) {
		int inputdata = input();
		// 1. input method를 호출해서 정수를 입력 받고, 변수 inputdata에 대입
		int result = abs(inputdata);
		// 2. 1에서 입력받은 정수를 abs 매서드의 매개변수로 활용하여 결과값 출력
		// int reuslt = abs((input());
		System.out.println("절대값 :" + result);
	}
}

📌데이터 5개를 입력받고 최대값/최소값 구하는 문제

package ex06_3_method_intro3_return;

import java.util.Scanner;

public class MethodExample4_max_min_array2_input {

	
	/* 5개의 정수를 입력받을 때, 반복되는 부분을 for문으로 표현해주면 더 간결하다
	 	public static int[] input() {
	 	int[] data=new int[5];
	 	System.out.print("5개의 정수를 입력하세요?");
	 	Scanner sc = new Scanner(System.in);
	 	
	 	for(int i=0;i<data.length;i++) {
	 		data[i]=sc.nextInt();
	 	}
	 	sc.close();
	 	
	 	return data;
	 */
	
	
	public static int[] input() { //매서드 input
		Scanner sc = new Scanner(System.in);
		System.out.print("5개의 정수를 입력 하세요?");
		int v1 = sc.nextInt();
		int v2 = sc.nextInt();
		int v3 = sc.nextInt();
		int v4 = sc.nextInt();
		int v5 = sc.nextInt();
		int[] input = { v1, v2, v3, v4, v5 }; //변수 input

		sc.close();

		return input;
	}

	public static int max(int[] data1) {
//		data1 = new int[5];
// 메서드 사용하면서 인자를 가져올텐데,
// 이렇게 정의하면 가져온 인자에 초기값을 부여하게 됨
		int max = data1[0];

		for (int i = 1; i < data1.length; i++) {
			if (max < data1[i])
				max = data1[i];
		}
		return max;

	}

	public static int min(int[] data1) {
		int min = data1[0];

		for (int i = 1; i < data1.length; i++) {
			if (min > data1[i])
				min = data1[i];
		}
		return min;
	}

	public static void main(String[] args) {
		int[] data = input(); 

		int max2 = max(data); //result
		int min2 = min(data); //result

		System.out.println("max = " + max2);
		System.out.println("min = " + min2);
	}

}

📌constructor(생성자)

public class GoodsStock {	//클래스의 선언을 시작하는 키워드 : class
	
	String goodsCode;	//상품코드
	int stockNum;		//재고수량
	/*
	 * 1. 생성자
	 * 	(1) 인스턴스가 생성될 때 호출되는 '인스턴스 초기화 메서드'
	 		따라서 인스턴스 변수의 초기화 작업에 주로 사용되며 인스턴스 생성시에
	 		실행되어야 할 작업을 위해서도 사용된다.
	 	(2) 생성자도 오버로딩이 가능하여 여러 개의 생성자가 존재할 수 있다.
	   2. 생성자 조건
	   	(1) 생성자의 이름은 클래스의 이름과 같아야 한다.
	   	(2) 생성자의 리턴 타입이 없어야 한다.
	 */
	
	 /* 매개변수가 없는 생성자 - 기본 생성자
	  	(1) 클래스에는 반드시 하나 이상의 생성자가 정의되어 있어야 함
	  	(2) 생성자가 없는 경우 자동으로 추가되는 생성자
	  	(3) 매개변수가 있는 생성자가 한개라도 작성된 경우 자동 추가 안 됨
	   
	  */
	
	GoodsStock(String goodsCode, int stockNum) {
		this.goodsCode = goodsCode;
		this.stockNum = stockNum;
		
	}
	
	void addStock(int num) {
		stockNum += num;	
	}
	
	int subtractStock(int num2) {
		if(num2 > stockNum) {
			return 0;
		} else {
		//	return stockNum-num2;
			stockNum -= num2;
			return num2; //return문을 만나면 method 종료
		}
	}
	}
  • this() : 생성자에서 다른 생성자를 호출할 수 있다
public class SubscriberInfo {
	String name;
	String id;
	String password;
	String phoneNo;
	String address;
	
	//this는 참조변수로 인스턴스 자신을 가리킴.
	SubscriberInfo(String name, String id, String password) {
		
		this.name = name;
		this.id = id;
		this.password = password;
		
	}
	
	SubscriberInfo(String name,String id,String password,String phoneNo,String address){
		//this() : 같은 클래스의 다른 생성자를 호출할 때 사용
		//this. : this()과 다름.
		//String 타입의 파라미터 3개를 갖는 생성자를 호출
		this(name, id, password);
		//Constructor call must be the first statement in a constructor
		//this()로 생성자를 호출할 때는 첫번째 줄에 반드시 작성해야 함
		this.phoneNo = phoneNo;
		this.address = address;
		
	}
	
	void changePassword(String password) {
		this.password = password;
	}
	
	void setPhoneNo(String phoneNo) {
		this.phoneNo = phoneNo;
	}
	
	void setAddress(String address) {
		this.address = address;
	}

}

📌반복되는 코드를 method를 이용해서 관리하기

  • 반복되는 내용을 method로 정의해주면 관리/재사용이 편하다
public class GoodsStock_make {
	public static void main(String args[]) {
		GoodsStock obj = new GoodsStock("52135", 200);
		print(obj); // 여기서의 obj는 인자. 밑에서 parameter obj와 다름

		obj.addStock(1000); // 메서드 호출
		System.out.println("=====obj.addStock(1000); 후=====");
		print(obj);

		obj.subtractStock(500);
		System.out.println("=====obj.subtractStock(500); 후=====");
		print(obj);

	}

	// 만들려고 하는 print 메서드는 GoodsStock클래스 타입의 참조변수obj를 argument로 받아야 한다.
    // argument obj는 GoodsStock클래스 타입의 참조변수이므로, 자료형을 GoodsStock으로 해줘야 한다.
	//                  매서드명칭 (자료형 파라미터) -> 파라미터에는 다른 변수가 쓰여도 무관함
	private static void  print  (GoodsStock obj) {
		System.out.println("상품코드:" + obj.goodsCode);
		System.out.println("재고수량:" + obj.stockNum);

	}

}
public static void main(String[] args) {
		SubscriberInfo obj
		= new SubscriberInfo("제임스 고슬링", "java",
				"java", "010-111-2222", "나를 찾지 마세요~");
		
		printSubscriberInfo(obj);
		
		//주소 변경
		obj.setAddress("서울시 강남구 역삼동");
		printSubscriberInfo(obj);
	}
	
    ///////////반복되는 내용을 method로 정의///////////////
	static void printSubscriberInfo(SubscriberInfo obj) {
		System.out.println("이름:"+obj.name);
		System.out.println("아이디:"+obj.id);
		System.out.println("패스워드:"+obj.password);
		System.out.println("전화번호:"+obj.phoneNo);
		System.out.println("주소:"+obj.address);
		System.out.println("============================");
	}

📌240104 과제 - method를 활용하여 240103과제 해결하기

public class Student_Make {
	public static void main(String[] args) {

		Student a = new Student("강호동", 85, 60, 70);
		Student b = new Student("이승기", 90, 95, 80);
		Student c = new Student("유재석", 75, 80, 100);
		Student d = new Student("하하", 80, 70, 95);
		Student e = new Student("이광수", 100, 65, 80);

		///////////////////////////////////////////

		System.out.println("=========== 학생별  /  과목별 총점구하기 ===========");
		String[] R2 = { "이름", "국어", "수학", "영어", "총점", "평균" };
		for (int i = 0; i < R2.length; i++) {
			System.out.printf("%s\t", R2[i]);
		}

		//////////////////////////////////////////////
		System.out.println();
		print(a);
		print(b);
		print(c);
		print(d);
		print(e);

		/////////////////////////////////////////////

		for (int i = 1; i < 48; i++) {
			System.out.print("=");
		}

		/////////////////////////////////////////////
		int korhpa1 = korhap(a) + korhap(b) + korhap(c) + korhap(d) + korhap(e);
		int enghap1 = enghap(a) + enghap(b) + enghap(c) + enghap(d) + enghap(e);
		int mathhap1 = mathhap(a) + mathhap(b) + mathhap(c) + mathhap(d) + mathhap(e);

		System.out.println();
		System.out.print("총점" + "\t");
		System.out.printf("%d\t%d\t%d\t", korhpa1, enghap1, mathhap1);
		//////////////////////////////////////////////

	}

	static void print(Student abs) {
		System.out.printf(abs.name + "\t");
		System.out.printf(abs.kor + "\t");
		System.out.printf(abs.eng + "\t");
		System.out.printf(abs.math + "\t");
		System.out.printf(abs.getTotal() + "\t");
		System.out.printf("%.1f\t", abs.getAverage());
		System.out.println();
	}

	static int korhap(Student hap) {
		return hap.kor;
	}

	static int enghap(Student hap) {
		return hap.eng;
	}

	static int mathhap(Student hap) {
		return hap.math;
	}
profile
생각하는 사람이 되고 싶다

0개의 댓글