Welcome to Wesley & Harry's Traveling & Programming

IT Program/Java Basic

자바(java) for문으로 배열만들기 & 랜덤 배열 생성 & 증가하는 배열 생성

Wesley & Harry 2022. 3. 5. 18:40
반응형

저희는 저번 게시물을 통해 랜덤숫자를 사용하는 법과 배열(array)에 대해 배웠습니다.

 

우선 for문을 통해 배열을 만드는 법부터 배워보도록 합니다.

아래 코드를 살펴봅시다.

package wesley.java.practice.basic;

public class arrayEx5 {
	public static void main(String[] args) {
		int wesley[] = new int[5];
		int exampleNum = 1;
		for(int i = 0 ; i < wesley.length; i++) {
			wesley[i] = i + exampleNum;
			System.out.printf(wesley[i]+"\t");
		}
	}

}

위코드에 대한 설명을 해보도록 하겠습니다.

우리는 for문을 통해서 배열에 있는 값을 하나씩 증가시킬 수 있습니다.

int wesley[] = new int[5];

인트타입의 5칸짜리 배열을 선언합니다.

 

int exampleNum = 1;

for문안에서도 사용 가능한 위치에 숫자 변수를 선언합니다.

 

for문을 통해 wesley.length만큼 반복을 돌리는데

wesley[i] = i + exampleNum을 통해 배열의 값을 채워줍니다.

예를들어

------

i의 값이 0일때의 반복문 실행부는

wesley[0] = 0 + 1;

해당 값 출력

------

i의 값이 1일때의 반복문 실행부는

wesley[1] = 1 + 1;

해당 값 출력

-------

반복

-------

 

이런식입니다. 해당 결과값을 통해 우리의 생각대로 잘 출력이 되는지 알아봅시다.

저번시간에 배웠던 printf와 "\t"을 사용해보았습니다.

각배열의 자리에 우리생각과 같은 값이 나오는걸 볼수 있습니다.


일정한 패턴의 값이 늘어나는 배열을 for문을 통해 초기화하는 법을 배워보았습니다.

다음은 일전에 배웠던 랜덤숫자를 이용해서 배열을 선언해보도록 하겠습니다.

 

저는 각각의 코드를 배우는건 어렵지 않다고 생각합니다. 하지만 두가지의 코드를 합쳣을 때 응용할 수 있는 능력이

실력향상에 도움이 된다고 생각합니다.

아래 코드를 통해 보도록 하겠습니다.

해당 코드는 저희의 생각과 다른 값이 나옵니다. 설명을 하기 위한 코드

package wesley.java.practice.basic;

public class arrayEx6 {
	public static void main(String[] args) {
		int[] wesley = new int[5];
		int randomNum = (int) (Math.random()*20);
		System.out.println("randomNum의 값은 " + randomNum);
		for (int i = 0; i < wesley.length; i++) {
			wesley[i] = randomNum;
			System.out.printf(wesley[i]+"\t");
		}
	}

}

저희는 해당 코드에 대해 이해해보도록 합시다.

int[] wesley = new int[5]; 

5칸의 배열 새성

 

int randomNum = (int)(Math.random()*20);

20까지의 랜덤숫자를 randomNum에 저장

 

System.out.println("randomNum의 값은 " + randomNum);

randomNum값 출력

 

for (int i = 0; i < wesley.length; i++) {}

for문 i가 0부터 wesley.length길이만큼 반복

 

wesley[i] = randomNum;

생성한 랜덤숫자를 wesley[i]에 저장

 

System.out.printf(wesley[i]+"\t");

wesley[i]에 있는 값과 탭 출력

 

우선 결과를 봅시다.

우리는 여기서 의문점을 가질 수 있다. Math.random()의 함수를 통해 랜덤값을 넣었는데 왜 같은값이 들어가는 것일까

계속 실행을 해도 똑같은값만이 저장되는것을 볼 수 있다.

 

그 이유는 바로 randomNum이라는 변수에 있다.

위의 사진을 보면 6번 라인에 우리는 Math.random() 함수를 통해 랜덤 함수를 저장했다.

그다음 저장한 값을 for문에 가져간다.

그럼 어떤 현상이 일어나는 것일까?

wesley[i] = randomNum;을 실행할때마다 랜덤 숫자가 형성되는 것이 아니라, 

randomNum에 저장된 변수(실제론 Math.random함수의 결과값)를 써먹는것이다.

반복문을 몇번돌던지간에 똑같은 숫자를 사용하는 것이다.


이를 해결하기 위해선 코드의 위치를 어떻게 바꿔야할까?

아래 코드를 통해 확인해보자

 

package wesley.java.practice.basic;

public class arrayEx6 {
	public static void main(String[] args) {
		int[] wesley = new int[5];
		for (int i = 0; i < wesley.length; i++) {
			int randomNum = (int) (Math.random()*20);
			wesley[i] = randomNum;
			System.out.printf(wesley[i]+"\t");
		}
	}

}

int randomNum = (int) (Math.random()*20);의 위치를 바꿔보았다.

만약 해당 코드의 위치를 바꾸게되면

이전에 썻던 코드

System.out.println("randomNum의 값은 " + randomNum);

이 코드가 에러가 생길텐데 그 이유는 randomNum이 for문 안에서 선언된 값이기 때문이다.

지역변수에 대한 이해가 있다면 충분히 알 수 잇는 내용이다. 또한 자바는 위에서부터 읽기때문에라고 생각할 수 있는데

for문 닫는 괄호 아래에 적어도 에러는 똑같을 것이다. 이를 주의하도록 하고 인지하자.

지역변수에 대해 모른다면 아래 게시글을 클릭해서 알아보기 바란다. 앞으로도 계속 이해하기 편리하게 해줄것이다.

2022.02.25 - [IT Program/Java Basic] - java 로컬변수 블록으로 간단하게 이해하기 & local variable error

 

java 로컬변수 블록으로 간단하게 이해하기 & local variable error

java에서 변수의 선언과 초기화는 필수적이다. 초기화를 해주지 않으면 해당 변수는 사용을 할 수가 없다. 예제를 적어본다. int wesley; System.out.print(wesley); 해당 예제는 초기화를 해주지 않고 변수

dongwoonew.tistory.com

우선 잘 되는지 확인부터 해보자

int randomNum = (int) (Math.random()*20);의 위치를 바꾸는 것만으로도

우리의 생각대로 잘 돌아가고 있다는 걸 알수있다.

왜일까?

for문은 실행문 부분을 통채로 한번씩 돌리고난뒤 다시 반복을 하는 구조이다.

헬스를 할때 셋트를 한다고 생각하면된다.

i=0 일때 1세트

i=2 일때 2세트 ..

i=3 일때 3세트 ...

하지만 5셋트를 할때 셋트랑 몇개씩 하는지는 개인마다 다르다. 이것이 for문이다.

그럼 코드를 얘기해보겠다.

for문 안에서 랜덤 숫자가 생성되고 그 랜덤숫자가 wesley[0]에 들어간뒤

출력을 해준다음

i의 값이 증가되고 해당 행위를 다시 반복한다. 그렇기 때문에 우리는 항상 코드의 위치를 신경써야한다.

위에 넣냐 아래에 넣냐가 결과값을 다르게 불러온다. 그럼 여기서 한가지 의문점이 더 생긴다.

int randonNum = (int)(Math.random()*20);

wesley[i] = randomNum;

이값을 굳이 두줄로 써야하나 피곤한데 한줄로 쓰면 안될까?

정답은 된다. 해당 코드를 복사해서 실행해보는 것으로 마무리하겠다. 좀더 간결해진것을 확인할 수 있다.

package wesley.java.practice.basic;

public class arrayEx6 {
	public static void main(String[] args) {
		int[] wesley = new int[5];

		for (int i = 0; i < wesley.length; i++) {
			wesley[i] = (int) (Math.random()*20);
			System.out.printf(wesley[i]+"\t");
		}
	}

}
반응형