웹개발 기초/java기초

자바 배열

미미_밍 2024. 1. 19. 22:28


기타 제어문 

break : 즉시 해당 중괄호 영역을 탈출한다. 
- if 문 안에서 사용 시 if문을 탈출하지 않고 if 문을 감싸고 있는 중괄호 영역을 탈출

continue : 즉시 다음 반복으로 넘어감. 
- 아래에 작성된 코드를 실행하고 싶지 않을때 사용 



반복문
for문
while문
while(조건식){
}

for 문과 while 문의 목적
-for: 몇 번 반복할 지 알 때
-while : 몇 번 반복할 지 모를 때

do~while문
do{
실행할 문장; 
}while(조건식);



배열 : 

저장공간의 나열 

1. 변수를 여러 개 선언하면 이름도 여러 개 생긴다. 이 때 각 저장공간을 관리하기가 블편하다.
따라서 n칸 배열을 한 번만 선언하면 저장공간도 n 개 생기고, 이름도 한 개 이기 때문에 관리하
기 편하다. 


2. 규칙성이 없는 값에 규칙성을 부여하기 위해서 

 

 


배열의 선언 

1. 자료형[] 배열명 = {값1, 값2, 값3 ,...}; 

// 어떤 값을 넣을 지 알 때


2. 자료형[] 배열명 = new 자료형[칸수]; 

//heap 메모리 주소만 있음, 시작주소 들어감 어떤값 넣을지 모르 나, 몇 칸 만들지 알때 사용


3. 자료형[] 배열명 = null; 

//주솟값을 모를때 쓰는 값이 null , 어떤값 넣을지 모르고 , 몇칸 만들지도  모를때 초기화만
+ 배열명 = new 자료형[칸수];

 



*heap 메모리는 os 가 관리 동적으로 프로그램 '실행중' 공간이 할당됨

<->정적할당 : 프로그램 실행 전 변수선언을 통한 메모리할당

 

* new : heap 메모리에 할당, 초기값을 자동으로 초기화 


* null : 주소의 초깃값, 어떤 주소를 넣을지 모를때 작성하는 값 ,null도 값이다, 덮어써줘야함


* 정적 배열과 동적 배열 :  java 의 배열은 다 heap 메모리에 저장된다. so 메모리 상으로는 동적배열밖에 없다. 

 

 


배열의 구조 
int[] arData  = {3,5,1,2,8}

5칸 필요, arData 에는 3이담긴 주솟값이 담긴다. heap 메모리에 저장됨. 다음주소에 접긴하기 위해서는 
+n 을 한다. arData+2 = 1이 담긴 주솟값 *(arData+2) 는 1이라는 값이 된다. java는 포인터가 
없음으로 arData[2] 로 사용한다 == *(arData+2) 이를 인덱스라 부른다. 

 


length 
배열을 선언하면 length 라는 상수가 선언됨, 해당 배열의 길이가 담긴다. 
배열명.length

 


배열의 사용 
int[] arData = new int[5]; //저장공간
arData[0] = 10; //저장공간
arData[0] + 9; //값
System.out.println(arData); //주솟값
arData[2] = arData[0] + arData[1];  //저장공간, 값,값
System.out.println(arData[5]); // 오류 ,인덱스는 배열길이-1 까지 


 

package arrayTest;

import java.util.Iterator;

public class ArTest1 {
	public static void main(String[] args) {
		int arrData[] = {1,3,2,6,1};
//		System.out.println(arrData);
//		System.out.println(arrData.length);
		
		for (int i = 0; i < arrData.length; i++) {
			System.out.println(arrData[i]);
		}
		
		//5,4,3,2,1 넣은후출력
		
		for(int i=0; i<arrData.length; i++) {
			arrData[i] = 5-i;
		}
		
		for(int j=0; j<arrData.length; j++) {
			System.out.println(arrData[j]);
		}
	}
}

 

arrData = 1 이 담긴 주소값

arrData.length = arr 길이 5

for 로 재할당 할 수 있다. 

but 재할당/ 출력 은 따로 구현

수정 보수 용이 다른 기능은 따로 작업하는게 좋다. 

 

package arrayTest;

public class ArrTest2 {
	public static void main(String[] args) {
		String data = "ABC";
		System.out.println(data.length());//길이 
		System.out.println(data.indexOf('C')); //검색 
		System.out.println(data.charAt(1)); //추출 
	}
}

 

data.length() 길이추출

data.indexOf('c') c의 인덱스 검색

data.charAt(1) 첫번째 인덱스 값추출

 

package arrayTest;

import java.util.Scanner;

public class ArTask1 {
	public static void main(String[] args) {
		int result = 0; 
		int max = -100000; 
		int min = 100000; 
		Scanner sc = new Scanner(System.in);
		int langth = sc.nextInt();
		int Data[] = new int[langth]; //배열 길이만 알때 
		double average = 0; 
		
		
		// 인덱스에 값 대입
		for(int i=0; i<100; i++) {
			Data[i]=i+1;
		}

		// 짝수이면 result+1 
		for(int i=0; i<100; i++) {
			result = i%2==0? result+=i : result;
				}
		System.out.println(result);
	}

		//배열에 문자 넣기(형변환)
		for(int i=0; i<6; i++) {
			Data[i] = (char)(65+i);
		}
		for(int i=0; i<6; i++) {
			System.out.println(Data[i]);
		}
		
		//C 빼고 출력 
		for(int i=0; i<5; i++) {
		Data[i]= (char)(i > 1? (66+i):(65+i)) ;
		}

		for(int i=0; i<5; i++) {
			System.out.println(Data[i]);
		}
		
        //배열에 정수 입력 
		for(int i=0; i<5; i++) {
			Data[i] = sc.nextInt();
			
		}

		//배열에서 max,min 찾기
		for(int i=0; i<5; i++) {
		 max = Data[i]>max ? Data[i]: max;
		 min = Data[i]<min ? Data[i]: min; 
		}
		System.out.println(max);
		System.out.println(min);
			
	
		//배열에 정수 입력후 평균 구하기 
		for(int i=0; i<langth; i++) {
			System.out.println("정수 입");
			Data[i] = sc.nextInt();
			
		}
		
		for(int i=0; i<langth; i++) {
			result += Data[i]; 
		}
		
        //안짤리게 실수로 형변환 
		average = (double)result/Data.length; 
		
		System.out.println(average);
		
	}
		
		
}

 

위의 메서드 사용한 응용문제 

 

package arrayTest;

import java.util.Scanner;


public class ArTask2 {
	public static void main(String[] args) {
    
    //대문자 소문자로 , 소문자 대문자로 바꾸기 
		Scanner sc = new Scanner(System.in);
		String message = "문자열 입력 : ",input="",result="";
		System.out.println(message);
		input = sc.next();
		
		for(int i=0; i<input.length(); i++) {
			char c =  input.charAt(i); 
			if(c >= 65 && c<= 90) { // 대문자(아스키코드상 범위)
				result += (char)(c+32);
			}
            
			else if (c >= 97 && c <= 122) { // 소문자 
				result += (char)(c-32);
				
			}
			else {
				result += c; //영어가 아닐때 (대문자도 소문자도 아닐때 그냥 입력값 저장)
			}

	}
		System.out.println(result);
	
    
    // 정수 받아서 안글로 바꾸기 ex 1432-> 일사삼이 
		
	//	char[] ko ={ '일' ,'이 ','삼 ','사 ','오 ','육 ','칠 ','팔 ','구 ','공 '};
    // 이렇게 할 필요없이 문자열 배열에 담으면 편하겠지 ? 
	
	Scanner sc = new Scanner(System.in);
	String hangle = "공일이삼사오륙칠팔구" , input = null;
	String message = "정수", result = ""; 
			
	System.out.println(message);
	input = sc.next();
	
	for(int i=0; i<input.length(); i++) {
		result += hangle.charAt(input.charAt(i)-48); // 아스키코드 48 = 0
	}
	
	
	
	}		
}

 

 

'웹개발 기초 > java기초' 카테고리의 다른 글

자바 메소드 특징  (2) 2024.01.21
자바 2차원 배열과 메소드  (0) 2024.01.21
자바 연산자,반복문,조건문  (3) 2024.01.19
자바 기본입출력,자료형과 형변환  (0) 2024.01.19
idk 와 자바 개념  (0) 2024.01.19