JAVA

[JAVA] 배열, 다차원 배열, 클래스, 상속

멍정 2023. 9. 14. 15:58

멍하 돌아온 자바공부 4일차입니다.

13강 배열

https://youtu.be/SByN3m_8Nr4?si=mWH-821eOja9KdXQ 

배열 선언 방법

int[] array = new int[크기];

원하는 개수만큼 배열을 생성하여 최댓값을 구하기

import java.util.Scanner;

public class Main {
	
	public static int max(int a, int b) {
		return (a > b) ? a : b;
	}
	
	public static void main(String[] args) {
		Scanner scanner = new Scanner(System.in);
		System.out.println("생성할 배열의 크기를 입력하세요 : ");
		int number = scanner.nextInt();
		int[] array = new int[number];
		for(int i = 0; i < number; i++)
		{
			System.out.println("배열에 입력할 정수를 하나씩 입력하세요. : ");
			array[i] = scanner.nextInt();
		}
		int result = -1;
		for(int i = 0; i < number; i++)
		{
			result = max(result, array[i]);
		}
		System.out.println("입력한 모든 정수 중에서 가장 큰 값은 : " + result + "입니다.");
    }
}

100개의 랜덤 정수의 평균

public class Main {
	public static void main(String[] args) {
		int[] array = new int[100];
		for(int i = 0; i < 100; i++) {
			array[i] = (int)(Math.random()*100 + 1);
		}
		int sum = 0;
		for(int i = 0; i < 100; i++)
		{
			sum += array[i];
		}
		System.out.println("100개의 랜덤 정수의 평균값은" + sum / 100 + "입니다.");
    }
}

Math.random()을 사용하여 랜덤 값 구하기

Math.random()은 0부터 소숫점자리의 값 사이의 값을 랜덤하게 제공함. (0 ~ 0.nnn)

그래서 100을 곱해서 0부터 100사이의 값으로 변환해줌 (0 ~ 1.nnn)

거기에 1을 더해서 범위를 다시 지정해줌 (1 ~ 100.nn)

정수형으로 변환하여 1부터 100까지의 범위로 지정해줌 (1 ~ 100)

(int)(Math.random()*100 + 1);


14강 다차원배열

https://youtu.be/fVCnjfUeS8E?si=HjP7X9JMIjH83pbz 

다차원 배열 : 배열이 배열의 원소로 들어가는 구조

a[0,0] a[0,1] a[0,2] a[0,3]
a[1,0] a[1,1] a[1,2] a[1,3]
a[2,0] a[2,1] a[2,2] a[2,3]

다차원 배열에 정수 랜덤 데이터를 입력하기

import java.util.Random;

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

		int N = 50;
		int[][] array = new int[N][N];
		for(int i = 0; i < N; i++)
		{
			for(int j = 0; j < N; j++)
			{
				array[i][j] = (int)(Math.random()*10);
			}
		}
		for(int i = 0; i < N; i++) 
		{
			for(int j = 0; j < N; j++)
			{
				System.out.print(array[i][j] + " ");
			}
			System.out.println();
		}
    }
}

15강 클래스

https://youtu.be/4idO8VOr17o?si=I4rBTzc_WLOm9pO2 

클래스 : 붕어빵 공장의 붕어빵틀 같은 것 < 특징들을 모아서 담아놓음.

ex. car(속력, 색상, 이름) 등의 형식(클래스)으로 정보를 담아놓고 new car1(10, 빨강, 빨간차), new car2(20, 초록, 초록차)의 형식으로 객체를 생성함.

+인스턴스화 : car 클래스를 다양하게 사용할 수 있게 하는 것

 

클래스는 유니티 오브젝트로 생각하면 프리팹(prefab) 같은 느낌이고 객체(=인스턴스)는 씬에서 사용하고 있는 오브젝트 느낌?


Node클래스를 이용하여 두 점 사이의 중점을 구하는 프로그램

다른 클래스의 값을 사용하기 때문에 src 하위에서 Node라는 클래스를 하나 더 생성해줌

Node.java 클래스 생성

Node 객체 one과 two를 생성하여 one.getCenter를 사용하여 원하는 값을 리턴받음.

//main.java
public class Main {
	public static void main(String[] args) {

	Node one = new Node(10,20);
	Node two = new Node(30, 40);
	Node resultNode = one.getCenter(two);
	System.out.println("x : " + resultNode.getX() + " y : " + resultNode.getY());
    }
}

Node 클래스에 private로 x와 y값을 생성해줌.

외부에서 x와 y값을 리턴 받을 수 있도록 public으로 get함수를 만들어줌

Node 생성자를 통해 x와 y값을 초기화해줌

//Node.java
public class Node {
	private int x;
	private int y; //외부에서 접근하지 못하게 private로 선언

	public int getX() { //외부에서 x값을 볼 수 있게 public으로 선언해줌
		return x;
	}
	
	public void setX(int x) {
		this.x = x; //this x는 내가 갖고 있는 x
	}
	
	public int getY() { 
		return y;
	}
	
	public void setY(int y) {
		this.y = y; 
	}
	//생성자 : 객체를 만들었을 때 자동으로 초기화 해주는 함수 | 클래스랑 동일한 이름을 가짐
	public Node(int x, int y) {
		this.x = x;
		this.y = y;
	}
	
	public Node getCenter(Node other) { //다른 노드와 이 노드의 위치 중간 값을 반환
		return new Node((this.x + other.getX()) / 2, (this.y + other.getY()) / 2);
	}
}

생성자

https://meongjeong.tistory.com/entry/JAVA-%EC%83%9D%EC%84%B1%EC%9E%90-Constructor

 

[JAVA] 생성자 (Constructor)

생성자(Constructor) 객체 지향 프로그래밍(OOP:objective-oriented programming)에서 쓰이는 객체 초기화 함수. 객체의 생성 시에만 호출되어 메모리 생성과 동시에 객체의 데이터를 초기화하는 역할을 한다.

meongjeong.tistory.com


16강 상속

https://youtu.be/iYW83DF6MHk?si=AnJuBSkMs2gdkHVR https://youtu.be/5uFdYN_AiUY?si=Sl7_uOoy7aCBymtY

상속 : 다른 클래스가 갖고 있는 정보를 받아오는 것

 

person {이름, 나이, 키, 몸무게}

student {학년, 반 ...} < student 클래스는 person 클래스를 상속받아 person의 값도 사용할 수 있음

person을 상속받은 student 클래스를 이용하여 객체 생성 

사용할 변수를 선언한 후 generate getters and setters를 이용하여 get와 set을 선언해줌

source - generate getters and setters

동일한 방법으로 생성자도 생성해줌.

source - generate constructor using fields

1. person class 생성

//Person.java
public class Person {
	
	private String name;
	private int age;
	private int height;
	private int weight;
	
	public String getName() {
		return name;
	}
	public void setName(String name) {
		this.name = name;
	}
	public int getAge() {
		return age;
	}
	public void setAge(int age) {
		this.age = age;
	}
	public int getHeight() {
		return height;
	}
	public void setHeight(int height) {
		this.height = height;
	}
	public int getWeight() {
		return weight;
	}
	public void setWeight(int weight) {
		this.weight = weight;
	}
	public Person(String name, int age, int height, int weight) {
		super(); //자신의 부모 클래스에 생성자를 실행?
		this.name = name;
		this.age = age;
		this.height = height;
		this.weight = weight;
	}	
}

2. Student class 생성 및 Person class 상속

//student.java
public class Student extends Person{ //extends를 통해 상속 받음

	private String studentIDString;
	private int grage;
	private double GPA;
	public String getStudentIDString() {
		return studentIDString;
	}
	public void setStudentIDString(String studentIDString) {
		this.studentIDString = studentIDString;
	}
	public int getGrage() {
		return grage;
	}
	public void setGrage(int grage) {
		this.grage = grage;
	}
	public double getGPA() {
		return GPA;
	}
	public void setGPA(double gPA) {
		GPA = gPA;
	}
	public Student(String name, int age, int height, int weight, String studentIDString, int grage, double gPA) {
		super(name, age, height, weight);
		this.studentIDString = studentIDString;
		this.grage = grage;
		GPA = gPA;
	}
	public void show() {
		System.out.println("---------------");
		System.out.println("학생 이름 : " + getName());
		System.out.println("학생 나이 : " + getAge());
		System.out.println("학생 키 : " +getHeight());
		System.out.println("학생 몸무게 : "+getWeight());
		System.out.println("학번 : "+getStudentIDString());
		System.out.println("학년 : "+getGrage());
		System.out.println("학점 : "+getGPA());
		
	}
}

3. main class에서 student 객체를 생성하여 출력

//main.java
public class Main {
	public static void main(String[] args) {

		Student student1 = new Student("홍길동", 20, 175, 70, "20230101", 1, 4.5);
		Student student2 = new Student("이순신", 30, 170, 80, "20230102", 2, 3.5);
		
		student1.show();
		student2.show();
	}
}

4. 출력

 

 

 

 

 

 

+ 반복문 + 배열을 사용하여 다 다른 학번을 만들어주기

//main.java
public class Main {
	public static void main(String[] args) {

		Student[] students = new Student[100];
		for(int i = 0; i < 100; i++)
		{
			students[i] = new Student("홍길동", 20, 175, 70, i + "", 1	, 4.5);
			students[i].show();
		}
	}
}

+ 키보드로 값을 입력 받아서 데이터 처리하기

//main.java
import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		
		Scanner scan = new Scanner(System.in);
		System.out.print("총 몇명의 학생이 존재합니까? : ");
		int number = scan.nextInt();
		Student[] students = new Student[number];
		for(int i = 0; i < number; i++)
		{
			String name;
			int age;
			int height;
			int weight;
			String studentID;
			int grade;
			double GPA;
			System.out.print("학생의 이름을 입력하세요. : ");
			name = scan.next();
			System.out.print("학생의 나이을 입력하세요. : ");
			age = scan.nextInt();
			System.out.print("학생의 키를 입력하세요. : ");
			height = scan.nextInt();
			System.out.print("학생의 몸무게를 입력하세요. : ");
			weight = scan.nextInt();
			System.out.print("학생의 학번을 입력하세요. : ");
			studentID = scan.next();
			System.out.print("학생의 학년을 입력하세요. : ");
			grade = scan.nextInt();
			System.out.print("학생의 학점을 입력하세요. : ");
			GPA = scan.nextDouble();
			
			students[i] = new Student(name, age, height, weight, studentID, grade, GPA);
		}
		for(int i = 0; i < number; i++)
		{
			students[i].show();
			
		}

		//Teacher teacher1 = new Teacher("John Doe", 25, 180, 120, "ABC201", 300000, 5);
		//teacher1.Show();
	}
}