개발자 끄적끄적
배열(Array) 본문
public static void main(String[]args){ ... }
- static : 메모리에 제일 먼저 상주한다
WhileTest wt = new WhileTest();
- wt : instance = object = 객체
- wt는 내맘대로 선언 가능->abc도 가능
[while 미션]
1. WhileTest클래스를 만들어 아래의 조건을 해결하시오.
2. 두 개의 정수 x,y를 전달받아 x~y까지의 합을 계산하는 hap 메서드를 작성
3. 한 개의 정수 dan을 전달받아 dan에 해당하는 구구단을 출력하는
gugudan 메서드를 작성하시오.
4. 두 개의 정수 x,y를 전달받아 x~y까지의 수 중 4의 배수만을
출력하는 메서드 incre를 작성하시오.
package core;
public class WhileTest {
public static void main(String[]args){
WhileTest a = new WhileTest();
WhileTest b = new WhileTest();
WhileTest c = new WhileTest();
a.hap(10,20);
b.gugudan(9);
c.incre(10,20);
}
public void hap(int x, int y) {
int i = 1;
int sum = 0;
while(x<=y) {
sum = sum + x;
x++;
}
System.out.println(sum);
}
public void gugudan(int dan) {
int gugu=0;
int i = 1;
while(i<=9) {
gugu = dan * i;
i++;
}
System.out.println(dan + "*" + i + "=" + gugu);
}
public void incre(int x, int y) {
int p = 0;
while(x<=y) {
if((x%4==0)) {
System.out.println("4의 배수:" + x);
}
++x;
}
}
}
-------------------------------------------------------
<for 문>
- 반복 횟수가 일정하거나 정해진 값이 있는 경우 사용
for(변수=초기값; 조건; 증가값){
실행문;
}
<for문의 실행 패턴>
for(A; B; C){
T;
}
1. A : for문이 시작되면 가장 먼저 실행
- A는 for문이 종료될 때까지 단 1회만 실행
2. B : A가 실행되고 바로 B가 실행되는데
이는 for문을 실행할 지 판단한다
만약, B가 참이라면 바로 T를 실행한다
3. C : T를 실행하고 나서 for문은 C로 바로 넘어 오는 데
A에 지정된 제어변수의 값을 바꾸는 영역이다
- C에서 제어변수의 값을 바꾼 후 for문을 다시 시작하는 것이 아니라
B로 이동하여 다시 실행 할 지를 판단하고 B가 참이면 다시 T를 실행한다
4. B->T->C->B->T가 계속 반복된다
<break문>
- 각 종 반복문에서 반복문을 강제로 종료시키고 해당
블록을 빠져 나오도록 한다
<continue문>
- 블록의 처음 실행문으로 이동한다
<배열>
- 같은 종류의 데이터 n개가 하나의 이름으로 표시되는
데이터 묶음
<배열의 특징>
1. 배열의 개수는 고정적이다
2. 배열의 요소는 배열명[첨자]와 같은 방법으로 접근한다
3. 배열의 첨자는 0부터 시작된다
4. 첨자는 반드시 0을 포함한 양의 정수이어야 한다
5. 배열의 길수(갯수)알아내는 속성 : 배열명.length
<배열 생성>
[배열의 선언]
데이터형 변수명[]; or
데이터형[] 변수명;
[메모리 할당]
변수 = new 데이터형[실제 크기]
[사용]
변수[첨자]
<배열을 선언하는 여러 가지 방법들>
<방법1>
int[] score = {10, 20, 30, 40, 50}
int[] score = new int[]{10, 20, 30, 40, 50}
- 배열이 생성되면서 초기값을 갖게 되며,
배열의 크기는 인수들의 갯수만큼 지정된다
<방법2>
int[] score = new int[5]
or
int[] score;
score = new int[5]
- 배열의 크기만 지정되고 초기값은 모두 0을 갖는다
<방법3>
Object[] obj = new Object[5]
- Object타입의 배열이 5개 선언되고 각각의 요소는
null값이 된다
<방법4>
int[] score;
score = new int{10, 20, 30, 40, 50}
- 배열 변수만 미리 선언한 뒤 나중에 배열에 초기값을 넣는다
<배열 접근>
- 선언된 배열의 요소는 첨자(INDEX)를 사용하여 접근한다
첨자는 항상 0보다 크거나 같은 양의 정수이어야 한다
ex)배열 생성 및 값 저장
int[] score = new int[5];
score[0] = 100; //배열의 첫 번째 요소에 100이 저장된다
ex)배열에 저장된 값을 첨자를 사용하여 가져와 본다
int[] score = new int[]{10, 20, 30, 40, 50};
int x = score[0] //x에 10이 대입된다
package core;
public class ArrayTest {
//생성자
public ArrayTest() {
System.out.println("ArrayTest객체가 생성됨");
boolean[]b = new boolean[5];
byte[]by = new byte[10];
char[]ch = new char[5];
int[]i = new int[5];
short[]sh = new short[5];
long[]L = new long[3];
float[]f = new float[4];
double[]d = new double[4];
String[]str = new String[5];
WhileTest[]wt = new WhileTest[5];
ArrayTest[] at = new ArrayTest[10];
//변수의 유형만 선언, WhileTest, ArrayTest라는 객체가 만들어진게 아니다
}
public static void main(String[] args) {
ArrayTest at = new ArrayTest();
}
- ArrayTest : 클래스명
- at : 변수, 객체명, 인스턴스
- new : 객체를 생성하는 키워드
- ArrayTest() : 생성자 메서드(생성자는 클래스명과 반드시 똑같아야한다)
- WhileTest[]wt = new WhileTest[5];
- ArrayTest[] at = new ArrayTest[10];는
변수의 유형만 선언했을 뿐, WhileTest와 ArrayTest라는
객체가 만들어진게 아니다
//정수형 배열을 선언하여 배열을 운영
public void intArray(){
//정수형 배열 10개
int[]x = new int[10]; - O
int[10]y = new int[]; - X
int[10]y = new int[10]; - X
- public void intArray()에서 intArray는 일반메서드이다(생성자X)
- int는 "데이터 형"을 나타낸다
int[10] : "int형 배열 10개" 라는건 없다
- int[]x : "int형 배열 x"가 있다
- new int[10] : 메모리(4byte)에 정수형 배열 10개가 생성된다
=> 메모리에 40byte가 존재
<다차원 배열>
[정수형 1치원 배열, 행만 존재]
int[] score;
[정수형 2차원 배열, 행-열이 존재]
int[][] score;
[정수형 3차원 배열, 면-행-열이 존재]
int[][][] score;
ex)정수형 1차원 배열
int[] score = { 10, 20, 30, 40 };
x = score[0]; //10
x = score[4]; //50
ex)정수형 2차원 배열
int[][] score = {
{10,60},
{20,70},
{30,80},
{40,90},
{50,100}
};
x=score[0][0]; //10
x=score[0][1]; //60
x=score[1][0]; //20
<배열 대표명>
- 배열의 요소를 접근할 때는 첨자를 사용하여 접근하지만,
배열명만을 사용하면 배열 전체를 의미한다
- 2차원 이상의 배열인 경우 배열의 첨자를 행만 지정한다면
행 전체를 나타낸다
10 60
20 70
30 80
40 90
50 100
- score : 5행 2열의 배열 전체를 의미
- score[0] : 배열의 첫번째 행을 의미
- score[4][0] : 5행의 1열의 값 50만을 의미
[배열 대표명을 사용한 길이 구하기]
- score.length ==> 5행
- score[0].length ==> 2열(10, 60)을 의미
- 특정 열만은 지정할 수 없다
<다차원 배열 선언 중>
ex1)초기값이 없을 경우
String[][]str = new String[3][4];
- 3행 4열 선언 가능
ex2)초기값이 있을 경우
char[][]ch = new char[][] {
{'b','o','o','k'},
{'1','2','3','4'},
{'j','a','v','a'},
{'1','2','3','4'}
};
- 행과 열을 선언하면 안된다
☆Javascript VS Java☆
NO NAME
1 KIM
2 HONG
일 때, Javascript는 가능하지만 Java는 불가능하다
이유->int[][] score : 배열이 숫자형으로 고정되기 때문
Java에서는
하나의 배열로 문자열, 정수형 저장이 불가능하다
즉, int[]string[] -> 불가능
별개로 선언해주어야한다
-----------------Java 프로그래밍-----------------
package core;
import java.lang.reflect.Array;
import java.util.Arrays;
public class ArrayTest {
//생성자
public ArrayTest() {
System.out.println("ArrayTest객체가 생성됨");
boolean[]b = new boolean[5];
byte[]by = new byte[10];
char[]ch = new char[5];
int[]i = new int[5];
short[]sh = new short[5];
long[]L = new long[3];
float[]f = new float[4];
double[]d = new double[4];
String[]str = new String[5];
WhileTest[]wt = new WhileTest[5];
ArrayTest[] at = new ArrayTest[10];
//변수의 유형만 선언, WhileTest, ArrayTest라는 객체가 만들어진게 아니다
}
//정수형 배열을 선언하여 배열을 운영
public void intArray() {
//정수형 배열 10개
int[]x = new int[10];
System.out.println(x[0]);
x[0]=90;
System.out.println(x[0]);
System.out.println(x); //배열의 시작주소를 출력한다
System.out.println(Arrays.toString(x));
//배열 x에 1~10까지를 저장하시오.
for(int i=0; i<x.length; i++) {
x[i] = (i+1);
}
System.out.println(Arrays.toString(x));
//배열 x에 있는 모든 값의 합계를 출력
int hap = x[0];
for(int i=0; i<x.length; i++) {
hap += x[i];
}
System.out.println("hap :" + hap);
//배열 x의 값 중 최대값을 출력
int max=x[0];
for(int i=1; i<x.length; i++) {
if(x[i]>max) {
max=x[i];
}
}
System.out.println("최대값 :" + max);
}
//문자열 배열 처리
public void stringArray() {
String[]names = new String[5];
names[0] = "홍길동";
names[1] = "일지매";
names[2] = "춘향이";
names[3] = "향단이";
names[4] = "방자";
//names[5] = "변사또"; -> 오류가 난다
System.out.println(Arrays.toString(names));
//주소 5개를 저장할 수 있는 배열 address
String[]address = new String[] {
"서울", "대구", "인천", "강릉", "제주"
};
System.out.println(Arrays.toString(address));
//실수형 성적 5개를 저장할 수 있는 배열 scores
double[]scores = new double[] {
60,70,100,95,90
};
System.out.println(Arrays.toString(scores));
//향단이의 주소와 성적 출력
for(int x=0; x<names.length; x++) {
if(names[x].equals("향단이")) {
System.out.println(address[x]);
System.out.println(scores[x]);
}
}
//최고 성작자의 이름, 주소, 성적을 출력하시오
double max = scores[0];
int pos = 0;
for(int i=1; i<scores.length; i++) {
if(scores[i]>max) {
max = scores[i];
pos = i;
}
}
System.out.println("이름 :" + names[pos]);
System.out.println("주소 :" + address[pos]);
System.out.println("성적 :" + scores[pos]);
}
//다차원 배열 선언
public void multiArray() {
//정수형 2차원 배열
int[][]su = new int[3][4]; //3행 4열의 정수형 배열
//문자열 2차원 배열 선언
String[][]str = new String[3][4]; //3행 4열의 문자열형 배열
//초기값을 갖고 있는 문자형 2차원 배열
char[][]ch = new char[][] {
{'b','o','o','k'},
{'1','2','3','4'},
{'j','a','v','a'},
{'1','2','3','4'}
};
}
public void multiBasic() {
char[][]ch = new char[5][5];
for(int r=0;r<5;r++) { //행
for(int c=0;c<=r;c++) { //열
ch[r][c]='*';
}
System.out.println(Arrays.toString(ch[r]));
}
}
public void multiM1() {
System.out.println("---M1---");
char[][] ch = new char[5][5];
for(int r=0; r<5; r++) {
for(int c=0; c<=(4-r); c++) {
ch[r][c] = '*';
}
System.out.println(Arrays.toString(ch[r]));
}
}
public void multiM2() {
System.out.println("---M2---");
char[][]ch = new char[5][5];
for(int r=0;r<5;r++) {
for(int c=4;c>=4-r;c--) {
ch[r][c]='○';
}
System.out.println(Arrays.toString(ch[r]));
}
}
public void multiOp() {
}
public static void main(String[]args){
ArrayTest at = new ArrayTest();
at.intArray();
at.stringArray();
at.multiBasic();
at.multiM1();
at.multiM2();
}
}
'JAVA' 카테고리의 다른 글
클래스, 생성자 (0) | 2023.03.04 |
---|---|
연산자, 제어문 (0) | 2023.03.04 |
연산, 문자열, 변수 (0) | 2023.03.04 |