Java #4

황현근·2023년 5월 1일
0

Acorn-Academy

목록 보기
14/28
post-thumbnail

배열 (Array)

  • 동일한 자료형(Data Type)의 데이터를 연속된 공간에 저장하기 위한 자료 구조이다. 즉, 연관된 데이터를 그룹화하여 묶어준다고 생각하면 된다.

  • 연관된 데이터를 저장하기 위한 변수의 선언을 줄여주며, 반복문 등을 이용하여 계산과 같은 과정을 쉽게 처리할 수 있다.

  • 한 번 생성된 배열은 길이를 늘리거나 줄일 수 없다.
//배열 정의 1
자료형[] 변수 = {데이터1, 데이터2, 데이터3, ... };

//배열 정의 2
자료형[] 변수 = new 자료형[배열크기];
변수[0] = 데이터 값;
변수[1] = 데이터 값; ...
  • 배열 변수를 이미 선언한 후에는 다른 실행문에서 중괄호를 사용한 배열 생성이 허용되지 않는다.


    사용 예시
/*
*  1. Bike 객체를 담을수 있는 방 3개짜리 배열객체를 생성해서 참조값을 
*     bikes 라는 지역 변수에 담아 보세요.
*  2. 배열의 각각의 방(0,1,2번) 에 Bike 객체를 생성해서 담아 보세요.
*  3. 반복문 for 를 이용해서 순서대로 배열의 각각의 방에 있는 Bike 객체의 
*     ride() 메소드를 호출해 보세요.
*/
		
//1
Bike [] bikes = new Bike[3];

for (int i = 0; i < bikes.length; i++) {
//2
bikes[i] = new Bike();
//3
bikes[i].ride();

Scanner

  • 기본적인 데이터 타입들을 Scanner 의 메소드를 사용하여 입력받을 수 있다.

  • Scanner 의 경우 아래처럼 객체를 생성해주면 된다.

Scanner in = new Scanner(System.in); // Scanner 객체 생성
메소드기 능
next()String을 읽음. 단, 띄어쓰기 뒷부분은 읽지 않음.
nextLine()String을 읽음. 띄어쓰기를 포함하여 한 줄(즉, Enter를 치기 전까지)을 읽음.
nextInt()int 를 읽음.
nextBoolean()boolean 을 읽음
nextByte()byte 를 읽음
nextShort()short 를 읽음
nextLong()long 을 읽음
nextFloat()float 을 읽음
nextDouble()double 을 읽음
  • Scanner 클래스는 토큰 단위로 읽는다!
    (단, nextLine()은 예외이다. nextLine()은 Enter 단위로 읽는다.)
토큰(Token) : 공백문자(Spacebar, Tab, Enter 등)로 구분되는 요소
  • 공백 문자는 사라지지 않는다!


    사용 예시
//1. 문자열을 저장할 수 있는 방 5개짜리 배열객체를 생성해서 참조값을 msgs라는 지역변수에 담는다.
		String [] msgs = new String [5];
       
//2. 키보드로부터 입력받을 수 있는 Scanner 객체를 생성해서 참조값을 scan이라는 지역변수에 담는다.
		Scanner scan = new Scanner(System.in);

//3. 반복문을 위에서 생성한 배열의 방의 갯수만큼 돌면서 키보드로부터 문자열을 입력받아서
//   배열에 순서대로 저장한다.
		for (int i = 0; i < msgs.length; i++) {
			System.out.print("문자열 입력: ");
			msgs[i] = scan.nextLine();
		}
		System.out.println(" ---- 출력 ---- ");
       
//4. 반복문 돌면서 배열에 저장되었던 모든 문자열을 순서대로 콘솔창에 출력한다.
		for (String tmp:msgs) {
			System.out.println(tmp);

Random

  • java.util 패키지에 있는 Random 클래스를 사용하는 방법이다.
  • Math.random와 다르게 인스턴스를 생성해서 사용해야 한다.
  • 객체 생성 방법은 2가지인데, 인자 없이 기본 생성자를 사용하는 방법과 long 타입의 시드(seed)를 인자로 받는 생성자를 사용하는 방법이다.
// 기본 생성자로 생성
Random random = new Random();

// seed 지정해서 생성
Random randomWithSeed = new Random(5);

// seed 지정
random.setSeed(System.currentTimeMillis());
  • 난수의 범위를 지정하려면 아래와 같이 설정하면 된다.
random.nextInt(4); // 0 ~ 3 까지의 무작위 int 값 리턴
random.nextInt(10); // 0 ~ 9 까지의 무작위 int 값 리턴 
random.nextInt(100); // 0 ~ 99 까지의 무작위 int 값 리턴 

random.nextInt(4)+1; // 1 ~ 4 까지의 무작위 int 값 리턴 
int ranNum5 = ran.nextInt(51)-25; 
int ranNum5 = ran.nextInt(-25, 26); //-25 ~ 25 사이의 랜덤한 정수

사용 예시

/*
 *    우연히 3개가 모두 같게 나왔을 때는 "당첨됬습니다!"를 출력하고
 * 	  하나라도 다르면 "꽝"을 출력하도록 프로그래밍 해보세요.
 *
 * 	  ex ) 	cherry | apple | cherry
 * 			꽝
 * 		      7    |   7   |   7
 * 			당첨됬습니다!
 */

	String [] list = {"cherry", "apple", "banana", "melon", "7"};
   
	//랜덤한 숫자를 얻어내기 위한 객체
	Random ran = new Random();
	int [] nums = new int[3];

	for(int i=0; i<nums.length; i++) {
      nums[i] = ran.nextInt(5);
		System.out.print(list[nums[i]]);
		if(i!=2) {
			System.out.print(" | ");
		} 
	}
   
    if(nums[0] == nums[1] && nums[1] == nums[2]) {
    	System.out.println("당첨됬습니다!");
    } else {
    	System.out.println("꽝");
    }

forEach (향상된 for문)

  • 보통 for문을 사용할땐 아래와 같이 사용한다.
for(int i=0; i<array.size(); i++){
	System.out.println(array.get(i));
}
  • 조건식에 array.size()를 사용할 시, for문이 돌때마다 size를 호출 한다는 단점이 있다.
    데이터가 적을땐 문제가 안되지만, 만약 데이터가 많다고 가정해보면 문제가 될 수 도 있다.

  • 이러한 것들을 foreach문 쓰면 편하다.
for (type var: iterate) {
    body-of-loop
}
  • 위에서 iterate는 루프를 돌릴 객체이고 iterate 객체에서 한개씩 순차적으로 var에 대입되어 for문이 수행된다. iterate로 사용할 수 있는 자료형은 루프를 돌릴수 있는 자료형(배열 및 ArrayList 등)만 가능하다.

사용 예시

String[] numbers = {"one", "two", "three"};
for(String number: numbers) {
    System.out.println(number);
}
----- 결과 -----
one
two
three

0개의 댓글