//향상된 for문을 이용하여 배열안의 값을 출력
//배열이나 컬렉션에 value가 존재하는 동안만 반복해서 실행
/*실행순서
* 1. 배열명 또는 컬렉션명
* 2. 데이터타입 변수명
* 배열(또는 컬렉션)에서 value를 하나씩 꺼내어
* 변수에 저장한다.
* 3. for {} 블럭안의 코드를 반복실행
*/
int[] nArr=new int[5]; //0 0 0 0 0 향상된 for문, 이 포문에서는 배열은 그냥 회수 지정
for(int temp : nArr) {
temp = (int)(Math.random()*100)+1; //만약 난수 메소드가 없으면 그냥 배열에 있는 값 찍어버린다.★★★★★★★★★★★★★★★
System.out.println(temp);
}
package ch05;
/*다차원 배열 (교재 p162~)
- 2차원 배열 이상의 배열
- 수학의 행렬과 같은 자료 구조
*배열생성
1.변수명 = new 타입[길이]; new라는 연산자를 이용해서 배열선언 --> 타입에 따른 자동초기화 진행
2.변수명 = {값1, 값2,...값n};
3.변수명 = new 타입[]{값1, 값2,...값n}; 위에 두개 섞은 것. --->해당 예제는 이 방식을 사용
*/
/*줄=행=row
*칸=열=column
교재 164p~165p
*/
public class ArrayEx04_p162 {
public static void main(String[] args) {
int[][] scores= {
//[0][0], [0][1], [0][2], [0][3], [0][4]
{100, 95, 94, 93, 91}, //학생1의 5과목 점수
//[1][0], [1][1], [1][2], [1][3], [1][4]
{80, 81, 82, 93, 84}, //학생2의 5과목 점수
//[2][0], [2][1], [2][2], [2][3], [2][4]
{70, 71, 72, 73, 74} //학생3의 5과목 점수
};
//이건 내 코드 i 및 j 의 조건문 길이를 바꿔줄것 아래
// for(int i=0; i<3;i++) { //0, 1, 2 출력 for문 (행 출력)
// for(int j=0; j<5;j++) { //0, 1, 2, 3, 4 출력 for문 (열 출력)
// System.out.println("학생"+(i+1)+"의 다섯과목 중 "+(j+1)+"번째 과목 점수는 = "+ scores[i][j]);
// }
// System.out.println("-------------------------------------");
// }
//
//내가 한 것.
for(int i=0; i<scores.length;i++) { //0, 1, 2 출력 for문 (행 출력)
System.out.println("학생"+(i+1)+"의 다섯 과목 점수");
for(int j=0; j<scores[0].length;j++) { //0, 1, 2, 3, 4 출력 for문 (열 출력)
System.out.print((j+1)+"번째 과목 점수 ="+ scores[i][j] + " | ");
//System.out.println("학생"+(i+1)+"의 다섯과목 중 "+(j+1)+"번째 과목 점수는 = "+ scores[i][j]);
}
System.out.println();
System.out.println();
// System.out.println("-------------------------------------");
}
//아래는 따로 출력. 강사님 코드
// /[0]
// *[1]
// *[2]출력/
// for(int i=0; i<3;i++) { //0, 1, 2 출력 for문 (행 출력)
// System.out.println("["+i+"]");
// }
//
// //0 1 2 3 4 출력
// for(int j=0; j<5;j++) { //0, 1, 2, 3, 4 출력 for문 (열 출력)
// System.out.print("["+j+"], ");
// }
System.out.println();
System.out.println("-------------------------------------");
//같이 출력. 강사님 코드
for(int i=0; i<3;i++) { //0, 1, 2 출력 for문 (행 출력)
//System.out.println("i가["+i+"]일때");
for(int j=0; j<5;j++) { //0, 1, 2, 3, 4 출력 for문 (열 출력)
//System.out.print("scores["+i+"]["+j+"], ");
System.out.print(scores[i][j]+", "); //순수한 배열로 표현!!!!!!!!!!!!!!!!★★★★★★★★★★
}
System.out.println(); //줄바꿔
}
//0 1 2 3 4 출력
System.out.println("-------------------------------------");
// int[] stu1 = {100,95,94,93,91}; //학생1의 5과목 점수
// int[] stu2 = {80,81,82,93,84}; //학생2의 5과목 점수
// int[] stu3 = {70,71,72,73,74}; //학생3의 5과목 점수
System.out.println(); //빈줄
System.out.println("===================================");
//5과목의 점수를 저장하는 배열을 생성, 출력
int[] stu1 = {100, 95, 94, 93, 91}; //학생1의 5과목 시험점수
for(int i=0; i<stu1.length; i++) { //stu1.length=5
//System.out.print(stu1[i]+"\t");
System.out.print(stu1[i]+" ");
}
}
}
package ch05;
/*다차원 배열 (교재 p162~)
- 2차원 배열 이상의 배열
- 수학의 행렬과 같은 자료 구조
1.변수명 = new 타입[길이]; new라는 연산자를 이용해서 배열선언 --> 타입에 따른 자동초기화 진행
2.변수명 = {값1, 값2,...값n};
3.변수명 = new 타입[]{값1, 값2,...값n}; 위에 두개 섞은 것. --->해당 예제는 이 방식을 사용
*/
/*줄=행=row
*칸=열=column
교재 164p~165p
*/
public class ArrayEx04_2 {
public static void main(String[] args) {
//2차원배열 생성, 값초기화
//가변배열 165p
String[][] animals = {
{"말", "염소", "돌고래", "강아지", "고양이"},
{"제비", "딱따구리", "까치", "닭", "앵무새"},
{"뱀", "도마뱀", "이구아나"}
};
//animals 값출력
//내가 한 것.
for(int i=0; i<animals.length;i++) { //0, 1, 2 출력 for문 (행 출력)
System.out.println("animals["+i+"]의 동물은?");
for(int j=0; j<animals[i].length;j++) { //0, 1, 2, 3, 4 출력 for문 (열 출력)
System.out.print((j+1)+"번째 동물은 ="+ animals[i][j] + " | ");
//System.out.println("학생"+(i+1)+"의 다섯과목 중 "+(j+1)+"번째 과목 점수는 = "+ scores[i][j]);
}
System.out.println();
System.out.println();
// System.out.println("-------------------------------------");
}
System.out.println("------------------------------------------------------");
//강사님이 한 것.
for(int i=0; i<animals.length;i++) { //행수만큼 반복
for(int j=0; j<animals[i].length; j++) { //행별 칸수만큼 반복
System.out.print(animals[i][j]+" ");
}
System.out.println();
}
//animals[0]배열길이
//animals[1]배열길이
//animals[2]배열길이
System.out.println("animals[0] 배열길이 = "+animals[0].length); //2차원 배열에서 배열길이는 행단위를 말한다.
System.out.println("animals[1] 배열길이 = "+animals[1].length); //2차원 배열에서 배열길이는 행단위를 말한다.
System.out.println("animals[2] 배열길이 = "+animals[2].length); //2차원 배열에서 배열길이는 행단위를 말한다.
System.out.println("------------------------------------------------------");
//animals[0] ~ animals[2] 주소출력
System.out.println("animals[0] 참조변수= "+animals[0]);
System.out.println("animals[1] 참조변수= "+animals[1]);
System.out.println("animals[2] 참조변수= "+animals[2]);
/* 콘솔 결과값
animals[0] 참조변수= [Ljava.lang.String;@15db9742
animals[1] 참조변수= [Ljava.lang.String;@6d06d69c
animals[2] 참조변수= [Ljava.lang.String;@7852e922
*/
System.out.println("------------------------------------------------------");
//배열길이
System.out.println("animals 배열길이 = "+animals.length); //2차원 배열에서 배열길이는 행단위를 말한다.
System.out.println("------------------------------------------------------");
//주소출력
System.out.println("animals 참조변수= "+animals); //콘솔 결과값 animals = [[Ljava.lang.String;@15db9742 -> 바뀌었다. [[Ljava.lang.String;@4e25154f
System.out.println("------------------------------------------------------");
System.out.println();//빈줄
System.out.println();//빈줄
System.out.println();//빈줄
// 스택영역 | 힙영역
String[] animal1 = {"말", "염소", "돌고래" }; //포유류
String[] animal2 = {"제비", "딱따구리", "까치"}; //조류
String[] animal3 = {"뱀", "도마뱀", "이구아나"}; //파충류
//향상된 for문 활용하여 animal2의 값 출력
/*for(타입 변수 : 배열명 or 컬렉션명) {
//반복실행코드
} */
System.out.println("--향상된 for문 이용하여 출력--");
//향상된 for문, 포문안에 실행 문이 있을때 배열은 그냥 회수 지정을 하지만 단순 출력같은 동작일때는 비교하는 배열 값을 저장하여 출력
int b=0;
for(String temp : animal2) {
System.out.println("animal2 배열의 ["+b+"] 값 = "+ temp);
b++;
// System.out.println(temp);
} //보통 향상된 포문은 일반적으로 배열이나 변수에 있는 모든 데이터를 출력할때 많이 사용한다.
//일반 포문은 일정범위를 출력할때 조건문을 수정하여 출력하는데 의미가 있다.
System.out.println("------------------------------------------------------");
//for문 활용하여 animal1의 값 출력
for(int i=0; i<animal1.length; i++) {
System.out.println("animal1 배열의 ["+i+"] 값 = "+ animal1[i]);
}
System.out.println("---------------------------------------------------");
//for문 활용하여 animal2의 값 출력
for(int i=0; i<animal2.length; i++) {
System.out.println("animal2 배열의 ["+i+"] 값 = "+ animal2[i]);
}
System.out.println("---------------------------------------------------");
//for문 활용하여 animal3의 값 출력
for(int i=0; i<animal3.length; i++) {
System.out.println("animal3 배열의 ["+i+"] 값 = "+ animal3[i]);
}
System.out.println("---------------------------------------------------");
//배열길이
System.out.println("animal1 배열길이 = "+animal1.length);
System.out.println("animal2 배열길이 = "+animal2.length);
System.out.println("animal3 배열길이 = "+animal3.length);
System.out.println("---------------------------------------------------");
//주소확인
//주소지가 들어가는 참조변수(스택영역)
//주소지는 서로 다르다. 힙영역에서 차지하는 공간이 다 다르니까
System.out.println("animal1 참조변수 = "+animal1);
System.out.println("animal2 참조변수 = "+animal2);
System.out.println("animal3 참조변수 = "+animal3);
//아래는 콘솔 결과값. 서로 다른 주소지를 차지하고있다.
// animal1 참조변수 = [Ljava.lang.String;@15db9742
// animal2 참조변수 = [Ljava.lang.String;@6d06d69c
// animal3 참조변수 = [Ljava.lang.String;@7852e922
}
}
//포유류 - 4개의 다리, 새끼를 낳아 => 말, 염소, 돌고래
//조류 - 깃털, 날개, 부리, 알을 낳아 => 제비, 딱따구리, 까치
//파충류 - 주로 따뜻한 지역, 폐호흡 => 뱀, 도마뱀, 이구아나
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------ㄱ
package ch05;
/*배열생성
1.변수명 = new 타입[길이]; new라는 연산자를 이용해서 배열선언 --> 타입에 따른 자동초기화 진행
2.변수명 = {값1, 값2,...값n};
3.변수명 = new 타입[]{값1, 값2,...값n}; 위에 두개 섞은 것. 주의. 1,2 섞어서 선언하는 방법은 []에 길이를 명시하지 않는다. 하지만 보통은 첫번째, 두번째 방식을 가장 많이 사용.
/*배열 복사(p168)
- 배열은 한 번 생성하면 크기 변경 불가
- 더 많은 저장 공간이 필요하다면 보다 큰 배열을 새로 만들고
이전 배열로부터 항목 값들을 복사 - 배열 복사 방법
- for문 이용
- System.arrayCopy() 메소드 이용
- Arrays 클래스 이용
*/
public class ArrayEx05_p168 {
public static void main(String[] args) {
// 원본 배열
String[] oldStrArr = {"자바", "배열", "복사"};
// 새 배열
String[] newStrArr = new String[10]; //새배열. null로 자동초기화
System.out.println("--- oldStrArr값 출력 ---");
for(int i=0; i<oldStrArr.length; i++) {
System.out.print(oldStrArr[i]+" ");
}
System.out.println();//줄바꿈 또는 빈줄
System.out.println("--- newStrArr값 출력 ---");
for(int i=0; i<newStrArr.length; i++) {
System.out.print(newStrArr[i]+" ");
}
System.out.println();//줄바꿈 또는 빈줄
//배열복사
System.out.println("--- 배열복사 진행 ---");
// System.arraycopy(oldStrArr, 0, newStrArr, 0, 3);
// System.arraycopy(oldStrArr, 0, newStrArr, 1, 3);
// System.arraycopy(oldStrArr, 1, newStrArr, 5, 2);
System.arraycopy(oldStrArr, 0, newStrArr, 5, oldStrArr.length); // 원본배열 몇개인지는 모르겠지만 다 가져올게 라는 뜻
//System.arraycopy(object src, int srcPos, object dest, int destPos, int length);
// (원본배열 , 원본배열 인덱스 몇번부터? , 새로운배열(주소지), 새로운 배열의 인덱스 몇번부터 채울까, 원본배열에서 몇 개 가져올까?);
//새 배열의 값 출력
System.out.println("--- newStrArr값 출력 ---");
for(int i=0; i<newStrArr.length; i++) {
System.out.print(newStrArr[i]+" ");
}
System.out.println();//줄바꿈 또는 빈줄
}
}
package ch05;
public class Quiz { // 미친듯이 쉬운 예제
public static void main(String[] args) {
// 배열에 가장 큰 수 부터 내림차순으로 정렬하여 저장 --효율적 소스
int[] array = {1, 5, 3, 8, 2};
int max1 = 0; //임시 변수 선언
for (int i = 0; i < array.length; i++) {
for (int j = i; j < array.length; j++) {
if (array[i] < array[j]) {
max1 = array[i];
array[i] = array[j];
array[j] = max1;
}
}
}
for (int k=0;k<array.length;k++) {
System.out.println("array:["+k+"] = " + array[k]);
}
// int[] array = {1, 5, 3, 8, 2};
// int max1 = 0; //임시 변수 선언
// for (int i = 0; i < array.length; i++) {
// for (int j = 0; j < array.length; j++) {
// if (array[i] > array[j]) {
// max1 = array[i];
// array[i] = array[j];
// array[j] = max1;
// }
// }
// }
// for (int k=0;k<array.length;k++) {
// System.out.println("array:["+k+"] = " + array[k]);
// }
//
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println("-------------------------------");
// int max = 0;
// int[] array = {1, 5, 3, 8, 2};
// for (int i = 0; i < array.length; i++) {
// if (array[i] > max) {
// max = array[i];
// }
//
// }
// System.out.println("max: " + max);
// System.out.println();
// System.out.println();
// System.out.println();
// System.out.println();
// System.out.println();
// System.out.println("-------------------------------");
// 2개의 수를 바꿔라--배열/배열 버전
// 10, 999인 2개의 정수값이 저장된 배열을 생성 //새배열에 옮겨서 저장 후 출력
int[] digit1 = new int[] {10, 999};
int[] digit2 = new int[1];
for (int i=0; i<digit1.length;i++) {
System.out.println("digit1["+i+"] = "+digit1[i]);
}
//변경 작업
digit2[0] = digit1[0]; //--->임시변수까지 배열로 처리해서 코드를 작성 할 수 있다.
digit1[0]=digit1[1];
digit1[1]=digit2[0];
System.out.println("--변경작업진행--");
//변경 후 출력
for (int i=0; i<digit1.length;i++) {
System.out.println("digit1["+i+"] = "+digit1[i]);
}
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println("-------------------------------");
// 2개의 수를 바꿔라--배열/임시변수 버전
//10, 999인 2개의 정수값이 저장된 배열을 생성
int[] digit = new int[] {10, 999};
for (int i=0; i<digit.length;i++) {
System.out.println("digit["+i+"] = "+digit[i]);
}
// System.out.println("digit[0] = "+digit[0]);
// System.out.println("digit[1] = "+digit[1]);
//변경 작업
int temp2; //--->임시변수까지 배열로 처리해서 코드를 작성 할 수 있다.
temp2 = digit[0];
digit[0]=digit[1];
digit[1]=temp2;
System.out.println("--변경작업진행--");
//변경 후 출력
for (int i=0; i<digit.length;i++) {
System.out.println("digit["+i+"] = "+digit[i]);
}
// System.out.println("digit[0] = "+digit[0]);
// System.out.println("digit[1] = "+digit[1]);
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println();
System.out.println("-------------------------------");
// 2개의 수를 바꿔라--일반 변수버전
int a=10;
int b=999;
System.out.println("a="+a); //10
System.out.println("b="+b); //999
System.out.println("--변경작업진행--");
int temp = 0; //임시변수 선언
temp = a;
a = b;
b = temp;
System.out.println("a="+a); //999
System.out.println("b="+b); //10
}
}
자동차
모델
색상
연식(제조년월일)
가격
연비
배기량
제로백
옵션(등급)
중고차 시세
package ch06;
//이 클래스는 자동차 클래스이다.
/*
클래스 멤버라하면 필드와 메소드로 구성되어있다고 얘기한다.
class 클래스{
field- 데이터 터가 필요한 타입 변수
method()-기능, 동작을 수행
//리턴유형 메소드명(){수행하고자하는 동작, 구현코드}
- 리턴 할 것이 없다.---> void
- 정수, 실수, char, boolean, String, String[] 등
} - /
public class CarEx01 {
//[]는 생략 가능 한 것들
//field-데이터
//[접근제어자] [제어자] 타입 변수(필드)명 [ = 초기값;] 초기값 생략 가능생산일 20221102 "2022-11-02" Date클래스
가격 5000
제조회사 "현대"
최고속도 250
등급-'A'
타이어
제조회사 "한국"
생산일2022-10-02생산
가격 20
사이즈 17.5
미끄럼방지강화기능-있다 true/없다 false */
String color = "red"; //색상
int price = 5000; //가격
String company = "HYUNDAI"; //제조회사
int maxSpeed = 250; //최고속도
char grade = 'A'; //등급
String productDate = "2022-11-02"; //생산일 타입을 잘못지정하면 추후에 형변환해야해서 번거롭다.
// Tire tire = Null;
// String[] tires={"","","",""};//움직이다
void move(){}
//멈춘다
void stop(){}
// //방향조절하다()
// void turn() {
// -->동작이나 기능이 조금 광범위하고 포괄적임
// }
//왼쪽이동하다()
void turnLeft() {}
//오른쪽이동하다()
void turnRight() {}
//전진하다()
void turnFront() {}
//후진하다()
void turnBack() {}
// //속도조절하다()
// void controlSpeed() {
// -->동작이나 기능이 조금 광범위하고 포괄적임
// }
//가속하다()
void speedUp() {}
//감속하다()
void speedDown() {} System.out.println("speedDown()호출-감속한다.");
System.out.println("speedUp()호출-가속한다.");
System.out.println("turnBack()호출-후진한다.");
System.out.println("turnFront()호출-직진한다.");
System.out.println("turnRight()호출-오른쪽으로 이동한다.");
System.out.println("turnLeft()호출-왼쪽으로 이동한다.");
System.out.println("stop()호출-멈춘다.");
System.out.println("move()호출-움직이다.");
- //method-기능, 행위, 동작
//[접근제어자] [제어자] 리턴유형 메소드명(){}; - /* 자동차
색상 "red" ->
// public static void main(String[] args) { //진입 메소드--> 만약 실행 및 런하지 않는다면 메인메소드가 필요하지 않다.
// ㅇ
//
// }
}
package ch06;
//이 클래스는 CarEx01을 실행하는 클래스이다.
public class CarEx01Main {
public static void main(String[] args) {
//class(클래스)를 이용하여 object(객체)를 생성한다. //Object O가 대문자 이면 클래스를 말하는 것. 오브젝트가 최상위계층인데 그곳에서 상속받은 것이므로.
//객체생성 문법> new 클래스명(); 정확히 말하면 클래스명과 동일한 이름을 가진 생성자, new 가 붙으면 무조건 힙영역에서 사용되어진다.
//참조변수 또는 레퍼런스변수 선언을 해야한다. 참조변수 선언 문법>타입 변수명[=초기값];
//참조변수선언 및 객체생성
//클래스명 참조변수명 = new 클래스명();
//CarEx01클래스의 객체를 생성. 힙영역의 주소가 myCar에 담긴 것이다.
CarEx01 myCar = new CarEx01();
System.out.println(myCar); //콘솔 결과값 ch06.CarEx01@15db9742 -->내가 만든 CarEx01클래스의 객체를 담고있는 주소지
//참조변수명.메소드명(); -->메소드 호출 문법
myCar.move();
myCar.stop();
myCar.turnFront();
myCar.turnBack();
myCar.turnLeft();
myCar.turnRight();
myCar.speedUp();
myCar.speedDown();
//Main 클래스를 또 만들면 또 다른 자동차를 만드는 개념이라고 생각하면 된다.
//
}
}
First 홈워크
설계하라.
자동차, 핸드폰, 기계, 컴퓨터, 텔레비전 등등
사람-학생, 사원, 회원
ch06과 같은 클래스 설계 및 매인 클래스 만들기- eclipse 단축키
'java' 카테고리의 다른 글
22.11.07 클래스 인스턴스화 및 생성자 (0) | 2023.02.13 |
---|---|
22.11.03 클래스 인스턴스화 심화 (0) | 2023.02.12 |
22.11.01 배열, 향상된 for문, 객체화(instance), 다중배열, 논리 연산 문자와 정수 변환 (0) | 2023.02.12 |
22.10.31 논리연산자, 증감연산자, 다중for문, 배열, ==, equals. (0) | 2023.02.12 |
22.10.28 for, do-while, break, switch, 삼항연산자 (0) | 2023.02.12 |