겉바속촉
2차원 배열 본문
안녕하세요~ 겉바속촉입니다!^^!
이번에는 1차원 배열에 이어서 2차원 배열까지 해보도록 할게요:)
1차원 배열은 지난번 포스팅을 참고해주세요!^^!
2020/05/29 - [취업일기/블록체인] - 1차원 배열
우선 2차원 배열은 말그대로 1차원에서 차원하나가 늘어난 2차원입니다.
쉽게 말해서 행과 열 개념이 도입되는 거에요!!
2차원 배열은 예~~~전에 수학시간에 배웠던 행렬과 비슷합니다:)
요새는 행렬을 안 배운다고 하더라구요??
그래서 아래쪽에 (행,열)을 0행에만 표시해봤어요
그럼 이제 2차원배열에 대해서 알아보기 위해
다음과 같은 코드를 작성해볼게요:)
저는 2행 3열로 만들어주었구요
각각의 자리에다가 수를 넣어주었습니다.
즉 다음과 같은 그림을 상상할 수 있겠죠??
10 | 20 | 30 |
5 | 40 | 23 |
행의 갯수/ 각 행의 열갯수/ 각각의 자리에 있는 데이터/
까지
출력해보도록 하겠습니다!^^!
package day0529;
public class Array2Char_11 {
public static void main(String[] args) {
//2차원 배열..행열로 이루어짐
int [][]arr;
arr = new int[2][3]; //2행3열로 할당
//1행
arr[0][0]=10;
arr[0][1]=20;
arr[0][2]=30;
//2행
arr[1][0]=5;
arr[1][1]=40;
arr[1][2]=23;
System.out.println("행의 갯수: "+arr.length);
System.out.println("0행의 열갯수: "+arr[0].length);
System.out.println("1행의 열갯수: "+arr[1].length);
System.out.println("데이타 출력");
for(int i=0;i<arr.length;i++)
{
for(int j=0;j<arr[i].length;j++) //행이 가진 열의 개수만큼
{
System.out.println(arr[i][j]+"\t");
}
}
}
}
콘솔창이랑 저 위의 표랑 값이 동일한지 확인해보시면 될 것 같아요:)
동일하게 나왔다면 성공이에요!^^!
간단한 게임 빙고 만들기
1. 3행 3열의 방을 만들어 주기 ---> int [][] pz = new int[3][3];
2. 각각의 방에 1~3을 랜덤으로 넣어주기 ---> pz[i][j] = (int) (Math.random()*3 +1);
3. 출력 코드 작성해주기 ---> for문으로
package day0529;
public class Array2CharBingo_12 {
public static void main(String[] args) {
//3행 3열의 빙고판을 생성
int[][]pz = new int[3][3];
int bingo;
//3행3열의 배열에 1~3사이의 난수를 발생시킨다.
System.out.println("***같은 숫자 나오면 빙고***");
//난수구하기
for(int i =0; i<pz.length;i++)
{
for(int j=0;j<pz[i].length;j++)
{
//난수 발생
pz[i][j]=(int)(Math.random()*3+1);
}
}
//출력
for(int i =0; i<pz.length;i++)
{
for(int j=0;j<pz[i].length;j++)
{
//난수 발생
System.out.printf("%4d",pz[i][j]);
}
System.out.println();
}
}
}
이제 난이도를 업시켜서
빙고판이 계속 랜덤으로 생성되면서
빙고 개수가 몇개인지까지 출력될 수 있게 코드를 작성해볼게요:)
빙고판 만들어지기까지는 위의 과정과 동일합니다.
1. 3행 3열의 방을 만들어 주기 ---> int [][] pz = new int[3][3];
2. 각각의 방에 1~3을 랜덤으로 넣어주기 ---> pz[i][j] = (int) (Math.random()*3 +1);
3. 출력 코드 작성해주기 ---> for문으로
3. 가로선 비교해주기 ---> pz[i][0]==pz[i][1]&&pz[i][1]==pz[i][2]
4. 세로선 비교해주기 ---> pz[0][i]==pz[1][i]&&pz[1][i]==pz[2][i]
5. 대각선(/) 비교해주기 ---> pz[0][2]==pz[1][1]&&pz[1][1]==pz[2][0]
6. 대각선(\) 비교해주기 ---> pz[0][0]==pz[1][1]&&pz[1][1]==pz[2][2]
package day0529;
import java.util.Scanner;
public class Array2CharBingo_12 {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//3행 3열의 빙고판을 생성
int[][]pz = new int[3][3];
int binggo;
String ans;
//3행3열의 배열에 1~3사이의 난수를 발생시킨다.
while(true)
{
System.out.println("***같은 숫자 나오면 빙고***");
//난수구하기
for(int i =0; i<pz.length;i++)
{
for(int j=0;j<pz[i].length;j++)
{
//난수 발생
pz[i][j]=(int)(Math.random()*3+1);
}
}
//출력
for(int i =0; i<pz.length;i++)
{
for(int j=0;j<pz[i].length;j++)
{
//난수 발생
System.out.printf("%4d",pz[i][j]);
}
System.out.println();
}
//빙고개수 구하기
binggo =0;
//가로선 비교
for(int i=0;i<3;i++)
{
if(pz[i][0]==pz[i][1]&&pz[i][1]==pz[i][2])
{
binggo++;
}
}
//세로선 비교
for(int i=0;i<3;i++)
{
if(pz[0][i]==pz[1][i]&&pz[1][i]==pz[2][i])
{
binggo++;
}
}
//대각선/비교
if(pz[0][2]==pz[1][1]&&pz[1][1]==pz[2][0])
binggo++;
//대각선\비교
if(pz[0][0]==pz[1][1]&&pz[1][1]==pz[2][2])
binggo++;
System.out.println("빙고: "+binggo+ "개");
//break문
System.out.println("계속(c), 그만(x)");
ans=sc.nextLine();
if(ans.equalsIgnoreCase("X"))
{
System.out.println("게임을 종료합니다");
break;
}
else if(ans.equalsIgnoreCase("c"))
{
System.out.println("계속....");
}
else
{
System.out.println("잘못입력...강제종료");
break;
}
}
}
}
로또 번호 만들기
빙고게임을 만들다 보니 로또번호를 만들었던 게 생각나서
이것저것 연습해볼겸 난이도 높여서 해보려고합니다:)
로또 번호 만드는 코드는 지난 번 부분을 참고해주세요:)
2020/05/29 - [취업일기/블록체인] - temp순서바꾸기
거기다 더해서 우리가 로또를 산 금액을 입력하면
그에 맞는 로또가 생성될 수 있도록 코드를 작성할게요
ex) 3000 ---> 로또 3줄 생성
5000 ---> 로또 5줄 생성
package day0529;
import java.util.Scanner;
public class QuizArraySortRandom_13 {
public static void main(String[] args) {
//import
Scanner sc = new Scanner (System.in);
//변수선언
int[]lotto = new int[6];
int don ;
System.out.println("로또 금액을 입력해주세요");
don = sc.nextInt();
for(int n=0; n<don*0.001;n++)
{
for(int i=0;i<lotto.length;i++)
{
//1~46번까지의 난수를 발생
lotto[i] = (int)(Math.random()*45 +1);
//증복체크
for(int j=0;j<i;j++)
{
//조건 은 같은 숫자가 나오면
if(lotto[i]==lotto[j])
{
i--; //같은 번지에 다시 값을 구하기 위해서
break; //i++로 이동
}
}
}
for(int i=0;i<lotto.length-1;i++)
{
for(int j=i+1;j<lotto.length;j++)
{
if(lotto[i]>lotto[j])
{
int temp=lotto[i];
lotto[i]=lotto[j];
lotto[j]=temp;
}
}
}
System.out.print(n+1 + ":회 " );
for(int i=0; i<lotto.length;i++)
{
System.out.print(lotto[i] + " ");
}
System.out.println();
}
}
}