본문 바로가기
Java

Java_배열

by 히예네 2023. 1. 26.
728x90
반응형

Java에서 배열은 객체이다. (랜덤이면 랜덤 참조변수를 만든다. )

int[] aaa=new int[3];

단, 앞 참조 변수 안에 [ ]안에 숫자를 넣지 않는다!

  • 객체는 자기의 멤버에 쓰레기값이 있는걸 싫어한다. 아무것도 안 해도 자동 0으로 초기화한다.
  • 참조 변수는 배열은 아니지만, 배열처럼 행동한다. aaa[0]=10;
  • pr(aaa)는 주소를 출력한다
  • 인덱스, 배열의 요소
  • 객체니까 기능(method)를 갖고 있다.
  • 한꺼번에 관리하고 싶어서

배열은 참조변수만 여러개 있는것이다. (배열 안에 객체가 여러개 있는게 아니다)

객체를 만든게 아니다 객체를 만드려면 ( ) 을 뒤에 붙여야함.

new textview[] >>> 배열을 만든것임

 

배열의 초기값 (지역변수X 지역변수는 내가 초기화 해줘야한다.)

 

자료형 초기값
int 0
double 0.0
boolean false
한문자 아스키코드 ‘0’
참조형 null

기본형이 아닌애들의 초기값(Random,String등등)은 null이다(2천여개 다 null이다)

 

import java.util.Scanner;

public class Main {
	public static void main(String[] args) {
		//Java언어에서 배열은 객체임.
		
		// int형 3개짜리 배열객체 생성
		int[] aaa=new int[3]; //배열의 요소들은 자동으로 0에 해당하는 값으로 초기화 된다. 
        
       //int는 0, double0.0 , boolean이면 false가 나온다
		
		System.out.println(aaa); //배열 객체의 .toString()이라는 기능이 자동 발동함.
        // 이렇게 하면 배열의 설명이 콘솔창에 뜸. 
		//진짜 주소는 아니고 고유번호 :  해쉬코드라고 한다. (C에서 주소는 8자리였다)
        
		System.out.println(aaa[0]);
		System.out.println(aaa[1]);
		System.out.println(aaa[2]);
		//System.out.println(aaa[3]); 인덱스 범위를 벗어나면 에러! 
		
		//요소별로 넣는다. 배열 요소에값대입
		aaa[0]=10;
		aaa[1]=20;
		aaa[2]=30;
		
		//배열객체에게 배열 요소의 개수(길이)를 가진 멤버변수 존재, 
        //함수면 뒤에 length()을붙여야함. 함수가아니다
		int len=aaa.length; //()이 없으면 값이라는뜻, 함수가 아니다 
		
		
		//배열 요소값을 반복문을 이용하여 출력해보기
		
		for(int i=0;i<len;i++) { //배열의개수를 이용한다. 
			System.out.println(aaa[i]);
		}
		
		System.out.println( );
		System.out.println( );
		
		//배열객체를 생성하면서 배열요소값들을 초기화해보기
		int[] bbb=new int[] {10,20,30}; //초기화할때는 배열개수를 명시하면 안됨.
        
        //뒤에 초기화로 개수를 알수있다. 초기화 안했을때는 반드시해야함 차이점! 기억! 
		//배열객체 생성 및 초기화할때 축약표현문법
		int[] ccc= {100,200,300}; //자동 new int[]
		System.out.println(ccc[0]);
		System.out.println(ccc[1]);
		System.out.println(ccc[2]);
		
		int n=3; //배열개수 n의 값을 키보드로 입력받을수도 있다
		int[] ddd=new int[n];
		
		//배열 생성할때 개수지정을 상수가 아니라 변수로 지정할 수 있다. 
        //c에서는 이러면 에러! c에서는 상수만써야한다.
		Scanner scan=new Scanner(System.in);
        //System.out.print("배열 개수 입력 : ");
        //n=scan.nextInt();
		
		
		for(int i=0;i<ddd.length;i++) {
			System.out.print(ddd[i]+", ");
		}
		
		System.out.println( );
		
		//배열객체의 초기화할때도 변수로 값 지정가능함
		int k=10;
		int[] eee=new int[] {k,k+1,12};
		
		for(int i=0;i<eee.length;i++) {
			System.out.print(eee[i]+", ");
		}
		
		//배열요소의 개수가 0개짜리인 배열객체도 존재 할 수 있음.
		int[] fff=new int[0]; //
		System.out.println("배열길이 : "+fff.length);
		
		System.out.println( );
		
		//배열참조변수끼리의 대입 
		double[] ggg=new double[] {3.14,2.48,7.23};
		double[] hhh=ggg; 
        //객체대입이 아니라 주소값 복사 - 하나의 객체를 공유하게 됨. 
		
		for(int i=0;i<ggg.length;i++) {
			System.out.print(ggg[i]+", ");
		}
		
		System.out.println( );
		

		for(int i=0;i<hhh.length;i++) { //값 복사가 아니라 객체를 공유하는중이다
			System.out.print(hhh[i]+", ");
		}
		
		System.out.println( );
		
		//공유된 객체를 참조하는 참조변수 중 하나를 이용하여 요소값 변경하면
        // 당연히 다른 참조변수의 값도 영향을 받음.
		
		hhh[1]=6.49;
		System.out.println(ggg[1]);
		
		//배열객체를 copy해보기 [배열요소값들을 복사하기]
		
		int[] mmm=new int[] {50,60,70};
		int[] nnn=new int[mmm.length]; // 변수지정가능.
        // mmm배열과 같은 개수의 값이 0인 배열객체 생성 
		
		for(int i=0;i<nnn.length;i++) {
			nnn[i]=mmm[i]; 
		} 
		//mmm과 nnn이 참조하는 배열객체는 서로 다른 객체임! 
		
		System.out.println( );
		System.out.println("=================================");
		System.out.println( );
		
		//참조형 자료형의 배열객체 생성해보기 스트링을 참조한다는게 아님 
        //배열 여러개를 참조한다는것
		String[] sss=new String[3]; 
        //스트링 참조변수 3개짜리 배열객체를 생성 (스트링 객체 3개가 아니다) 리모컨만 3개 만듬
		System.out.println(sss);//자동 투스트링()기능발동
		System.out.println(sss[0]); //참조형변수의 기본값은 null이다 
		System.out.println(sss[1]);
		System.out.println(sss[2]);

		
		//배열객체의 요소들(참조변수들)에 값(객체) 대입
		sss[0]=new String("Sam");
		sss[1]=new String("Robin");
		sss[2]="Hong"; //자동 new String()이 된다.
		
		System.out.println(sss[0]);
		System.out.println(sss[1]);
		System.out.println(sss[2]);
		System.out.println( );
		
		//각 배열요소(String참조변수)의 기능메소드 사용해보기
		System.out.println("배열길이 : "+sss.length); 
//배열을 참조한다, 배열에게 명령 내리는것  여기에 점 찍은거랑 밑에 점찍은거랑 구별 못함
		System.out.println(sss[0].length()); 
//.찍으면 스트링의 기능을 쓸수있다 배열 sss에 점찍은거랑 sss[0]
// 즉 배열요소 에 점 찍은거랑은 다르다 
		System.out.println(sss[1].length()); //.찍으면 스트링의 기능을 쓸수있다 
		System.out.println(sss[2].length()); //.찍으면 스트링의 기능을 쓸수있다 
		System.out.println( );
		
		//char ch=sss.; 이러면 배열의 능력  
		//char ch=sss[1].; 이러면 스트링의 기능
		char ch=sss[1].charAt(2); //세번째 글자를 꺼내온다
		System.out.println(ch);
		
		ch=sss[2].charAt(3);
		System.out.println(ch);
		
		//참조형 배열객체 생성하면서 배열요소들 초기화 해보기
		int[] xxx=new int[] {10,20,30};
		String[] uuu=new String[] {new String("android"), new String("ios"),new String("web")}; 
  //객체를 만들어서 넣는다 정신없다
		uuu=new String[] {"androis" ,"ios" ,"web"}; //new String() 축약표현
		String[] ttt= {"android" ,"ios" ,"web"};
//배열 참조변수 초기화하면서 배열객체 초기화할때는 축약표현 가능 

		for(int i=0; i<ttt.length; i++) {
			System.out.println(ttt[i]);
		}
		System.out.println( );
		
		//당연히 개발자가 만든 class도 배열로 만들 수 있다
		Person p=new Person();
		p.name="san";
		p.age=20;
		
		p.show();
		
		Person[] people=new Person[3];//참조변수 3개짜리 배열을 만듬 퍼슨객체X
		people[0]=new Person();
		people[1]=new Person();
		people[2]=new Person();

		people[0].show();
		people[1].show();
		people[2].show();
		
		System.out.println( );
		
		// 배열처럼 여러개의 요소를 가진 객체의 요소제어를 위한 반복문을 쉽게 사용하기 위해 등장한 새로운 for문법
		// 확장된 for문 [for each문법이라고 부른다. ]
		
		int[] nums=new int[] {10,20,30};
		
		//반복문이용하여 요소값 출력
		for(int i=0;i<nums.length;i++) {
			int t=nums[i]; //t의 역할을 알아야한다 임시변수는 요소 하나하나를 잠깐동안 보관하는 것
			
			System.out.println(t);
		}
		System.out.println( );
		
		
		//확장된 for문법으로 배열의 요소값을 간결하게 출력해보기 for each문
		for(int t : nums) { //배열의 이름만써도 배열의 개수만큼 반복한다 176,177 줄을 요약한것 그렇지만 3번부터 9번까지 범위지정은 불가 
			System.out.println(t); 
		}
		System.out.println( );
		
		
		double[] www=new double[] {3.14,2.56,8.79};
		for(double t : www) {
			System.out.println(t);
		}
		
		
		String[] rrr=new String[] {"aaa","bbb","ccc",};
		for(String t:rrr) {
			System.out.println(t+" : "+ t.length());
		}
	}
}


//사용자 정의 class
class Person{
	String name; //멤버변수
	int age;
	
	void show() {  //멤버함수
		System.out.println(name+" : "+age);
	}
}

 

 

2차원 배열

2차원 배열 객체라는 것은?

1차원 배열을 참조하는 참조 변수를 여러개 가진 배열 객체

(1차원 배열이 여러 개 있는게 아니다 )

int[] >> 참조변수

참조변수만 3개이다

int[3][] ; 3개짜리인데 1차원배열이 3개 있다. 앞이 층이다 >> 총 3봉지인데 안에 몇개 들어있는지 모른다

 

int[3][5]; 1차원 배열(각5개)이 3봉지가 있다

객체  3명, 5개씩사탕

aaa[0][2]=30;

aaa[2][3]=50; 2바이3

728x90
반응형

'Java' 카테고리의 다른 글

Java_접근제한자  (0) 2023.01.27
Java_객체 지향 프로그래밍 OOP  (0) 2023.01.27
Java_String  (2) 2023.01.26
Java_키보드 입력 Scanner  (0) 2023.01.26
Java_화면 출력 객체 System.out  (0) 2023.01.24