JAVA 프로그래밍 및 실습

2025. 4. 1. 14:19·컴퓨터공학과/Java 1 & 2

C에서는 고정할당 배열방식과 비슷함
동적할당(malloc) 복습필요할듯..

배열 (array)

int [] intArray = {4,3,2} //JAVA
<=> int Array[] = {4,3,2} //c

레퍼런스 구조
사이즈를 주지않아도 자동으로 공간을 만들고 값을 초기화해서 이어주는 구조를 만듦

배열이란?
: 인덱스와 인덱스에 대응하는 데이터들로 이루어진 자료 구조

  • 인덱스는 배열의 시작 위치에서부터 데이터가 있는 상대 위치
  • 배열을 이이용하면 한 번에 많은 메모리 공단 할당 가능
    • 같은 타입의 데이터들이 순차적으로 저장
  • 인덱스를 이용하여 원소 데이터 접근
  • 반복문을 이용하여 처리하기에 적합
    • 배열 인덱스 : 0부터 시작 5칸의 경우 인덱스는 [0],[1],[2],[3],[4]
    • 레퍼런스 타입레퍼런스 변수와 배열둘 다 가능
  • intArray : int [] int Array; int intArray[];

new가 malloc이랑 거의 똑같은 작업을 함.
배열 선언 + 배열 생성의 두 단계가 필요하다

int intArray[]; // 1
int[] int Array; //2
intArray = new int[10]; //
int[] intArray = new int[10]; // 선언과 동시에 생성

배열 선언 시 값 초기화

int [] intArray = {0,1,2,3,4,5,6,7,8,9} // 초기화된 값의 개수 10만큼 자동으로 생성함

인덱스의 경우, 음수는 불가능하다.

레퍼런스 치환과 배열 공유

  • 하나의 배열을 다수의 레퍼런스가 참조 가능
    • int [] intArray = new int[5];
    • int [] myArray = intArray; //배열은 주소이기때문~

int Array = new int[10];을 실행한다면, int Array에는 새로운 공간이 할당된다!

배열의 크기, length 필드

배열은 자바에서 객체로 관리
배열 객체 내의 length필드는 배열의 크기를 나타낸다.

int intArray[];
int Array = new int[5];
int size = intArray.length; // size는 5

배열과 for-each 문

배열이나 나열의 각 원소를 순차적으로 접근하는데 유용한 for문

for ( 배열의 원소타입 변수 : 배열){
    ...
    }
String [] names = {"사과", .....};
for (String s : names) // 반복할때마다 s는 name[0], name[1] , ....로 설정됨
    System.out.print(s+" ")

2차원 배열

int[][] intArray; // int intArray[][]; 도 가능하지만 전자 권장
char[][] charAttay;

[]괄호 안에 값 입력 시, 선언과 동시에 생성 가능.

int [][] intArray = new int[2][5];
int [][] intArray = {{0,1,2,},{3,4,5}}; // 선언,생성,초기화

2차원 배열의 구조와 length 필드

int[][] i = new int[2][5]
int size1 = i.length; // 2 , 2차원 배열의 행의 개수
int size2 = i[0].length; // 5, 2차원 배열 중 0번째 행의 열의 개수

비정방형 배열

  • 정방형 배열
    • 각 행의 열의 개수가 같은 배열
  • 비정방형 배열
    • 각 행의 열의 개수가 다른 배열
    • 비정방형 배열의 생성
    • int [][]; i = new int[4][]; 
      i[0] = new int[1]; // 한칸생성 i[0][0] 
      i[1] = new int[2]; // 두칸생성 i[1][0] i[1][1] 
      ... 
      i[3] = new int[4]; //4 칸생성 i[3][0] i[3][1] i[3][2] i[3][3]
      
      
      i.length // 2차원 배열의 행의 개수이므로 4 출력
      i[3].length // 위와 같이 입력하면 3번째 행의 열의 개수이므로 4 출력

행크기 만들어서 보여주는 실습

package week5;
import java.util.Scanner;

public class 행크기 {

	
	public static void main(String args[]) {
		Scanner input= new Scanner(System.in);
		// 행크기를 입력받아서 각 행마다 1부터 하나씩 증가시켜 열만들기
		
		int [][] arr;
		System.out.print("행크기 : ");
		int row = input.nextInt();
		
		arr = new int [row][]; //동적할당 층크기부터 만들고 그 다음에 열채운다. 
		//2차구조에서 1차구조만 생성한 것! 앞족에 항상 써줘야함! [][row]는 불가능하다는 의미다!
		
		//반복
		for (int i =0 ; i< arr.length; i++) {
			//각 행마다 열크기 할당하기
			arr[i] = new int[i+1];
		}
		
		showArray(arr);
		
	}

	private static void showArray(int[][] arr) {
		//private 현재는 아무런 문제가 발생하지 않는다.
		for(int row = 0; row<arr.length; row++) {
			System.out.printf("%2d : ", row+1);
			for(int col = 0; col<arr[row].length; col++) {
				System.out.print(arr[row][col] + " ");
						}
			System.out.println();
		}
		
	}

}


메소드의 배열 리턴

메소드에서 만든 배열의 레퍼런스 리턴

메소드에서의 리턴타입

+ 메소드의 리턴 타입과 리턴 받는 배열 타입과 일치

+ 리턴 타입에 배열의 크기를 지정하지 않음.

 

++얼튜비튜 추가++

Scanner 이용해서 입력받을 때, int형만 받을 때는 nextInt()만 사용하면됨

tmp = input.nextLine(); << 필요없는 구문이다.

bakjoon 2566,2738

 

25.04.03(목, 2차원배열)

더보기

극장예약시스템 배열이 1~10으로 설정

package week5;
import java.util.Scanner;
// 1. 환영
// 2. 메뉴보이기
// 3. 메뉴입력받기
// 4. 메뉴에 따라 동작하기
// 5.반복하기!

public class 극장예약시스템 {
	static Scanner input = new Scanner(System.in); //static 해줘야하는 이유?
	public static void showWelcome() {
		System.out.println("*****************************************************");
		System.out.println(" WELCOME TO EWHA THEATER ");
		System.out.println("*****************************************************");	
	}
	
	private static void 메뉴보이기() {
		System.out.println("###########################################################");
		System.out.println("1.예약하기 2.취소하기 3.좌석보이기 0.종료하기");
		System.out.println("###########################################################");
	}
	
	private static void 예약하기(int[][] seats) { 
		//continue ? :
		//행과 열을 입력받아서 1로 채운다.
		System.out.println("행과 열을 입력받아 좌석을 예약합니다!");
		System.out.printf("행을 입력하세요(0~%d) : ",seats.length); int 행 = input.nextInt();
		System.out.printf("열을 입력하세요(0~%d) : ",seats[0].length); int 열 = input.nextInt();
		if (행 <1 || 행 > seats.length-1 ) {
			System.out.println("입력 범위(행)를 다시 확인하십시오.");
			return;
		}
		if( 열 <1 || 열 > seats[0].length-1) {
			System.out.println("입력 범위(열)를 다시 확인하십시오.");
			return;
		}
		if (seats[행-1][열-1] == 1) {
			System.out.println("이미 예약된 좌석입니다.");
			return;
			}
		seats[행-1][열-1] = 1;
	}
	
	private static void 취소하기(int[][] seats) { 
		//continue ? :
		//행과 열을 입력받아서 1로 채운다.
		System.out.println("행과 열을 입력받아 좌석을 취소합니다!");
		System.out.printf("행을 입력하세요(1~%d) : ",seats.length); int 행 = input.nextInt();
		System.out.printf("열을 입력하세요(1~%d) : ",seats[0].length); int 열 = input.nextInt();
		if (행 <1 || 행 > seats.length ) {
			System.out.println("입력 범위(행)를 다시 확인하십시오.");
			return;
		}
		if( 열 <1 || 열 > seats[0].length) {
			System.out.println("입력 범위(열)를 다시 확인하십시오.");
			return;
		}
		if (seats[행-1][열-1] == 0) {
			System.out.println("예약된 자리가 아닙니다.");
			return;
			}
		seats[행-1][열-1] = 0;
	}
	
	private static void 좌석보이기(int[][] seats) {
		for(int i=1; i<=seats.length; i++) {
			System.out.printf("[%d]\t ",i);
			for(int j=1;j<=seats[0].length;j++) {
				if(seats[i-1][j-1] ==1) System.out.print("■ ");
				else System.out.print("□ ");
			}
			System.out.println();
		}
	}

	
	public static void main(String[] args) {
		int[][] seats = new int[10][10];
		int menu;
		
		showWelcome();
		
		while(true) {
			메뉴보이기();
			System.out.print("메뉴 입력 : ");
			menu = input.nextInt();	
			if (menu ==0) break;
			else if(menu ==1) 예약하기(seats); 
			else if (menu ==2) 취소하기(seats);
			else if(menu ==3) 좌석보이기(seats);
			
			
			}
		System.out.println("이화 극장 예약시스템을 종료합니다.");

	}

}

#랜덤 수 만들기: 0~100까지

1. Math.random() 메소드이용

0.0-1.0까지의 실수를 리턴.

0부터 100까지를 얻으려면? Math.random()*1000 or 100000을 곱하고 나머지 연산자(%) 활용

 

2. Random 클래스 이용

Random r = new Random(); // 랜덤클래스로 r 생성 후

r.nextInt() // 이용하여 정수를 얻음.

범위는 -21 ~ 21억 사이의 정수를 리턴.

범위를 0부터 100으로 설정하려면? 일단 양수로 처리하고, 나머지 연산자(%)를 이용하여 0부터 100까지 수를 얻어내면 됨.

 

public class RandomExample {
    public static void main(String[] args)  {
        System.out.println("0.0 ~ 1.0 사이의 난수 1개 발생 : " + Math.random());
        System.out.println("0 ~ 10 사이의 난수 1개 발생 : " + (int)((Math.random()*10000)%10));
        System.out.println("0 ~ 100 사이의 난수 1개 발생 : " + (int)(Math.random()*100));
    }
}

Math.random() 은 현재 시간을 시드값으로 사용한다.

Math.random( )을 정수로 사용하기

1. random의 값을 충분히 높여준 뒤 나머지 연산을 합니다. 나머지 연산 값보다 무조건 작은값이 나옵니다.

2. random의 값을 원하는 자리수만큼 곱한 뒤 int형으로 변환하면 소수점 단위는 자동 절삭되어 정수형으로 표현이 가능합니다.

Random클래스 주요 메서드

메서드 설명
setSeed(long n) 매개값으로 주어진 종자값이 설정됩니다.
boolean nextBoolean() boolean타입의 난수를 리턴합니다.
double nextDouble() doouble 타입의 난수를 리턴합니다.
int nextInt()  int 타입의 난수를 리턴합니다.
int nextInt(int n) int 타입의 0 ~ 매개값까지의 난수를 리턴합니다.
double nextGaussian() 평균이 0.0이고 표준편차가 1.0인 정규분포 난수를 리턴합니다.

 

'컴퓨터공학과 > Java 1 & 2' 카테고리의 다른 글

WEEK7 . chap05-class  (0) 2025.04.15
Week6 : JAVA프로그래밍및실습  (0) 2025.04.11
JAVA 지뢰찾기  (0) 2025.04.04
JAVA 프로그래밍 및 실습 추가학습  (0) 2025.04.03
[#실습2 JAVA프로그래밍및실습 I ]  (0) 2025.03.18
'컴퓨터공학과/Java 1 & 2' 카테고리의 다른 글
  • Week6 : JAVA프로그래밍및실습
  • JAVA 지뢰찾기
  • JAVA 프로그래밍 및 실습 추가학습
  • [#실습2 JAVA프로그래밍및실습 I ]
sihyes
sihyes
24학번 컴퓨터공학과
  • sihyes
    시혜적으로개발
    sihyes
  • 글쓰기 관리
  • 전체
    오늘
    어제
    • 분류 전체보기 (114)
      • 단순 설정 (10)
      • 백엔드 공부(BE, AWS) (8)
        • 로그인&회원가입 (3)
        • 파일업로드&GPT (2)
      • 컴퓨터공학과 (51)
        • 운영체제 (0)
        • Artificial Intelligence (0)
        • Java 1 & 2 (23)
        • 컴퓨터네트워크 (3)
        • 모앱JavaScript (0)
        • Data structures (9)
        • 소프트웨어공학 (5)
        • 오픈SW플랫폼 제출용 (5)
        • Python - 문해프 (1)
      • 개인 프로젝트 (2)
        • 알바솔로몬 (1)
        • PLACO 프로젝트 (0)
      • 도서 공부(정리) (20)
        • 알고리즘 코딩 테스트 자바 편 (1)
        • SQL첫걸음 (8)
        • 코딩 자율학습 스프링 부트 3 자바 백엔드 개발 .. (6)
        • Do it! 지옥에서 온 문서 관리자 깃&깃허브 .. (5)
      • 개인공부정리페이지 (12)
        • 백준 & 프로그래머스 (3)
  • 블로그 메뉴

    • 홈
    • 태그
  • 링크

  • 공지사항

  • 인기 글

  • 태그

    ㅇ
  • 최근 댓글

  • hELLO· Designed By정상우.v4.10.4
sihyes
JAVA 프로그래밍 및 실습
상단으로

티스토리툴바