Hyogi's Notebook

Day03 JAVA Studying

by 효기’s

※ 배열 주의점

1. 배열을 잡을 때 1.5배 이상으로 잡는다. (메모리가 부족하면 자바는 올 스톱되므로 생각하고 있어야함)

2. 래퍼런스타입 = 객체 하나당 레퍼런스 하나가 무조껀 필요하다.

3. string[] s = new String[3]; → 레퍼런스가 3개다 객체가 3개가 아니다. = (객체에 접근하는 레퍼런스)

배열의 장점 :  배열을 사용함으로써 일괄처리가 가능해진다.(코딩이 쉬움)

 

Q. 입력한 숫자로 학생수를 바꾸는 성적처리 코드를 만들어라.

package test;

import java.util.Scanner;

public class study20_0705 {

	public static void main(String[] args) {
		
		// 1사람 성적처리
	    // 입력 : 이름,국,영,수
	    // 연산 : 총점,평균
	    // 출력 : 이름,국,영,수,총,평
		
	    String []scoName = {"국어","영어","수학"};
	    int [][]score = new int[3][4];// 국,영,수,총 
	    float []avg = new float[3] ; 
	    Scanner sc = new Scanner(System.in);
	    
	    
	    System.out.println("몇명의 사람을 입력할건가요?");
	    int numPerson = sc.nextInt(); // 사람을 입력받음.
	    String []name = new String[numPerson]; // name에 numPerson을 넣음.
	    
	    for(int i = 0; i < name.length; i++) { // 3번돌아감
	    	
	    	// 입력
	    	System.out.println("이름, 국, 영, 수 입력하세요.");
	    	name[i] = sc.next();   // 이름
	    	
	    	for(int j=0; j < score[i].length; j++) { // 4번돌아감
	    		
	    		if(j < score[i].length-1) { // -1이 총점을 뺸값 (score 배열에 총점도 포함하면 안되기때문에 -1 을 함)
	    			score[i][j] = sc.nextInt(); // 점수 입력
	    		}
	    		score[i][3] += score[i][j]; // 총점 연산
	    	
	    	}
	    	
	    	
	    	avg[i] = (float)score[i][3] / 3; // 평균
	    	
	    	
	    	System.out.println("이름 : " + name[i] + " 국 : " + score[i][0] + " 영 :" + score[i][1] + " 수 :" + score[i][2] + " 총 : " + score[i][3] + " 평: " + avg[i]);
	    	
	    }
	}

}

- 클래스의 구성요소
 1. field (필드)
  객체 생성후 지속적으로 사용하고자 하는 데이터 저장하는 역할.
  접근지정자 주로 private으로 지정한다.
 
 2. method (메소드)
  인스턴스메소드(instance method) 객체를 생성한 후 사용할수 있는 메소드
  매게변수의 첫번째 매개변수 this를 가지고 있다.
  의미상 객체당 하나씩 가지고 있는 의미가 성립.
 
  스태틱메소드(static method) 객체의 생성여부 상관없이 사용할수 있는 메소드
  this를 가지고 있지 않다.
  목적 : 같은 타입의 모든 객체가 공유하는 의미.
 
  메소드의 주목적 : 외부와 내부를 연결시켜주는 역할.
  메소드는 접근 지정자를 주로 public으로 지정.
  오버로딩이 가능
 
 3. construtor (생성자)
  객체 생성시 자동 호출되어지는 함수
  생성자함수를 명시적으로 만들지 않을 경우 디폴트 생성자를 제공한다.
 
  기능 : 디폴트 기능 -> 객체 등록.
    개발자 -> 겍체 생성시 필드 초기화
    
  주로 public으로 지정
  오버로딩이 가능

 

Q. 필드, 멤소드, 생성자 정리해줘

 

자바에서 클래스(class)는 객체(object)의 설계도이며, 클래스 내에서는 필드(fields), 메소드(methods), 생성자(constructor) 등의 요소가 사용됩니다. 이들을 간단히 설명해드리겠습니다:

필드 (Fields):
필드는 클래스 내에서 사용되는 변수(variables)로, 객체의 상태(state)를 나타냅니다. 클래스의 인스턴스가 생성되면, 각 인스턴스는 해당 클래스의 필드에 대한 고유한 값을 가질 수 있습니다. 필드는 클래스의 내부나 생성자, 메소드에서 접근할 수 있으며, 필드에는 다양한 데이터 유형을 저장할 수 있습니다.

메소드 (Methods):
메소드는 클래스 내에서 수행되는 동작(actions)을 정의하는 블록입니다. 메소드는 특정 작업을 수행하고 값을 반환할 수 있으며, 필요에 따라 매개변수를 받을 수도 있습니다. 메소드는 일련의 코드 문장으로 구성되며, 클래스의 인스턴스 또는 클래스 자체에서 호출될 수 있습니다. 메소드를 사용하여 객체의 동작을 정의하고 실행할 수 있습니다.

생성자 (Constructors):
생성자는 클래스에서 객체를 생성할 때 호출되는 특별한 메소드입니다. 생성자는 객체의 초기화를 담당하며, 클래스의 인스턴스를 생성하고 필요한 초기값을 설정합니다. 생성자는 클래스 이름과 동일하며, 반환값을 갖지 않습니다객체가 생성될 때 한 번 호출되며, 필드를 초기화하거나 다른 초기 설정을 수행하는 역할을 합니다.

이들은 클래스의 구성 요소로서, 객체 지향 프로그래밍에서 중요한 역할을 합니다. 필드는 객체의 데이터를 저장하고 상태를 유지하며, 메소드는 객체의 동작을 정의하고 실행하며, 생성자는 객체를 초기화하는 역할을 수행합니다. 이들을 조합하여 클래스를 구현하고, 객체를 생성하고 사용할 수 있습니다.

 

생성자 정의
    생성자를 제공하지 않을경우 내부적으로 제공하는 생성자 : 디폴트생성자
    명시적으로 생성자를 만들경우 디폴트 생성자는 제공되지 않음.
    리턴타입이 존재하지 않고 함수명도 클래스명과 동일해야함.

 

- getter setter 실습 코드

package test;

public class study21 {
  
  // 필드
	private int a;
	
	public study21() { // 생성자는 소문자시작 (명명규칙)
		System.out.println("디폴트생성자");
	}
	
	public int getA() { // 게터 getter (가져오는 함수)
		return a;
	}
	
	public void setA(int aa) { // 새터 setter (넣는함수)
		a = aa;
	}
	
	public static void main(String[] args) { // 외부
		
		study21 ce = new study21(); // 생성자 호출
		study21 ce2 = new study21(); // 생성자 호출

		System.out.println(ce.a); // 바로 a로 출력하면 에러.
		System.out.println(ce2.a);
		
//		ce.a = 100;
//		ce2.a = 200;
		
		ce.setA(100);
		ce2.setA(200);
		
		System.out.println(ce.getA());
		System.out.println(ce2.getA());
	}

}

- getter setter을 이용한 사칙연산 계산기

/*
  getter, setter을 이용한 사칙연산 switch 계산기 만들기
  
   3 + 4 -> 입력 -, *, /
   3 + 4 = 7 -> 출력
*/

package test;

import java.util.Scanner;

public class study22 {

	private int result;
	
	// 입장 멘트
	public study22() { // 생성자는 소문자시작 (명명규칙)
		System.out.println("member1이 입장했습니다.");
	}
	
	public int getResult() { // 게터 getter (가져오는 함수)
		return result; // 결과값 반환
	}
	
	public void setResult(int result) { // 새터 setter (넣는함수)
		this.result = result;
	}
	
	// 연산 메소드
	public void add(int number) { // 값을 더하는 메소드
		result += number;
	}
	
	public void sub(int number) { // 값을 빼는 메소드
		result -= number;
	}
	
	public void mul(int number) { // 값을 곱하는 메소드
		result *= number;
	}
	
	public void div(int number) { // 값을 나누는 메소드
		result /= number;
	}
	
	public static void main(String[] args) { // 외부
	
	
		study22 member1 = new study22(); // 생성자 호출 (환영인사)
		
		
		member1.setResult(100); // member1이 넣기 원하는 값
		
		member1.add(50);
		member1.sub(10);
		member1.mul(2);
		member1.div(2);
		// 결과값
		System.out.println("member1의 결과값은 " + member1.getResult() + "입니다.\n"); // member1 결과값 출력
			
			

	}
	
}

- 클래스를 이용한 성적계산 프로그램

/*
클래스를 이용한 성적 (집에서 복습할것)
*/

package test;

import java.util.Scanner;

public class study23 {
	
	// 필드
    private String[] scoName = { "국어", "영어", "수학" }; // 과목이름
    private String[] name = new String[1]; // 하나의 이름 받음
    private int[][] score = new int[1][4]; // 국,영,수,총
    private float[] avg = new float[1];
    private Scanner sc = new Scanner(System.in);
    
    // 생성자
    public study23() {
    	System.out.println("클래스를 이용한 성적처리 프로그램");
    }
    
    public String[] getName() {
        return name; // 이름을 반환
    }

    public void setName(String[] name) {
        this.name = name; // 이름을 받아옴
    }

    public int[][] getScore() {
        return score; // 점수를 반환
    }

    public void setScore(int[][] score) {
        this.score = score; // 점수를 받아옴
    }

    public float[] getAvg() {
        return avg; // 평균값을 반환
    }

    public void setAvg(float[] avg) {
        this.avg = avg; // 평균값을 받아옴
    }

    public void calculateScore() { // 성적처리 메소드
        // 입력
        for (int i = 0; i < name.length; i++) {
            System.out.println("이름, 국어, 영어, 수학점수를 입력하세요:");

            name[i] = sc.next();

            for (int j = 0; j < score[i].length - 1; j++) {
                score[i][j] = sc.nextInt();

                score[i][3] += score[i][j];
            }

            avg[i] = score[i][3] / 3; // 평균값계산

            System.out.println(
                    "이름:" + name[i] + " 국어:" + score[i][0] + " 영어:" + score[i][1] + " 수학:" + score[i][2] + " 총:" + score[i][3] + " 평:"
                            + avg[i]);
        }
    }

    public static void main(String[] args) {
    	
    	study23 ce = new study23(); // study23라는 클래스의 인스턴스를 생성하여 main이라는 변수에 할당
        ce.calculateScore(); // 성적 처리 메소드 실행
    }
}

- 여러명의 사람을 수용가능한 클래스를 이용한 성적계산프로그램

// 집에서 해봐야 함 

// 여러명 입력하는 코드 추가한 성적 코드
package test;

import java.util.Scanner;

public class study24 {
	// 클래스의 필드
    private String[] scoName = { "국어", "영어", "수학" };
    private String[] name;
    private int[][] score;
    private float[] avg;
    private static Scanner sc = new Scanner(System.in);
    private int numPerson; // 입력 받기 위한 성적을 담은 배열
    
    public study24() {
        System.out.println("클래스를 이용한 성적처리 프로그램");
    }
    
    public String[] getName() {
        return name;
    }

    public void setName(String[] name) {
        this.name = name;
    }

    public int[][] getScore() {
        return score;
    }

    public void setScore(int[][] score) {
        this.score = score;
    }

    public float[] getAvg() {
        return avg;
    }

    public void setAvg(float[] avg) {
        this.avg = avg;
    }
    // 입력받는 사람의 개수 getter setter
    public int getNumPerson() {
        return numPerson;
    }
    
    public void setNumPerson(int numPerson) {
        this.numPerson = numPerson;
    }
    
    public void calculateScore() { // 연산
    	// numPerson이 배열에 넣어짐.
        name = new String[numPerson];
        score = new int[numPerson][4];
        avg = new float[numPerson];
        
        for (int i = 0; i < numPerson; i++) {
            System.out.println("이름, 국어, 영어, 수학점수를 입력하세요:");
            
            name[i] = sc.next();
            
            for (int j = 0; j < scoName.length; j++) {
                score[i][j] = sc.nextInt();
                score[i][3] += score[i][j];
            }
            
            avg[i] = score[i][3] / scoName.length;
            
            System.out.println("이름:" + name[i] + " 국어:" + score[i][0] + " 영어:" + score[i][1] + " 수학:" + score[i][2]
                    + " 총:" + score[i][3] + " 평균:" + avg[i]);
        }
    }

    public static void main(String[] args) {
        System.out.println("몇몇의 사람을 입력할건가요?");
        study24 ce = new study24(); // 처음에 나오는 문구
        // 사람 개수 입력
        int numPerson = sc.nextInt();
        ce.setNumPerson(numPerson); // 사람 개수
        
        ce.calculateScore(); // 연산
    }
}

'Studying > JAVA' 카테고리의 다른 글

Day05 JAVA Studying  (0) 2023.07.07
Day04 JAVA Studying  (0) 2023.07.06
Day02 JAVA Studying  (0) 2023.07.04
Day02 [예제] 문자열 동등성 비교의 결과차이  (0) 2023.07.04
Day01 JAVA Studying  (0) 2023.07.04

블로그의 정보

감성 개발자 효기

효기’s

활동하기