Selection Sort(선택정렬)
for(int i=0;i<arr.length-1;i++)
{
for(int j=i+1;j<arr.length;j++)
{
if(arr[i]>arr[j])
{
int temp=arr[i];
arr[i]=arr[j];
arr[j]=temp;
}
}
}
for(int i=0;i<arr.length;i++)
{
System.out.print(arr[i]+" ");
}
- 오름차순 정렬(비교하여 가장 작은 수를 앞으로 보냄)
- 위의 코드는 Array.sort(배열명); 으로 축약가능
for(int i=0;i<arr.length/2;i++)
{
int temp=arr[i];
arr[i]=arr[arr.length-1-i];
arr[arr.length-1-i]=temp;
}
중복처리(Lotto)
int [] lotto=new int[6];
for(int i=0;i<lotto.length;i++)
{
lotto[i]=(int)(Math.random()*45)+1;
for(int j=0;j<i;j++)
{
if(lotto[i]==lotto[j])
{
i--;
break;
}
}
}
Arrays.sort(lotto);
for(int i=0;i<lotto.length;i++)
{
System.out.printf("%5d",lotto[i]);
}
Scanner sc=new Scanner(System.in);
int guip;
int [] lotto=new int[6];
System.out.println("로또 얼마 구입할지를 입력해주세요");
guip=sc.nextInt();
if(guip<1000)
{
System.out.println("***구입금액이 부족합니다***");
return;
}
for(int n=0;n<guip/1000;n++) {
System.out.printf("%d회: ",n+1);
for(int i=0;i<lotto.length;i++)
{
lotto[i]=(int)(Math.random()*45)+1;
for(int j=0;j<i;j++)
{
if(lotto[i]==lotto[j])
{
i--;
break;
}
}
}
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;
}
}
}
for(int i=0;i<lotto.length;i++)
{
System.out.printf("%5d",lotto[i]);
}
System.out.println();
}
- 구입 금액에 따라 n번의 임의 로또 번호 생성(위의 코드 전체를 for문으로 감쌈)
다차원배열
int [][] arr;
arr=new int[2][3];
arr[0][0]=10;
arr[0][1]=20;
arr[0][2]=30;
arr[1][0]=5;
arr[1][1]=10;
arr[1][2]=20;
System.out.println("행의갯수: "+arr.length);
System.out.println("0행의 열갯수: "+arr[0].length);
System.out.println("1행의 열갯수: "+arr[1].length);
- 배열의 대표 길이(arr.length)는 행의 갯수 표현, 열의 갯수는 각 행의 길이(arr[i].length)로 계산
for(int i=0;i<arr.length;i++)
{
for(int j=0;j<arr[i].length;j++)
{
System.out.printf("%d,%d=%2d\t",i,j,arr[i][j]);
}
System.out.println();
}
- 출력 시 이중 for문 사용하며, 마지막에 줄 바꿈 해주어 행을 구분
- 각 행의 열 갯수가 다른 경우
int [][] arr= {
{22,33},
{11,22,33},
{10,20,30,40}
};
- { }을 중첩하여 다차원배열 선언과 동시에 초기값 지정가능
System.out.println("총행갯수: "+arr.length);
System.out.println("0번행의 열갯수: "+arr[0].length);
System.out.println("1번행의 열갯수: "+arr[1].length);
System.out.println("2번행의 열갯수: "+arr[2].length);
for(int i=0;i<arr.length;i++)
{
for(int j=0;j<arr[i].length;j++)
{
System.out.printf("[%d],[%d]=%d\t",i,j,arr[i][j]);
}
System.out.println();
}
Bingo(이중배열)
Scanner sc=new Scanner(System.in);
int [][] pz=new int[3][3];
int bingo=0;
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();
}
bingo=0;
for(int i=0;i<pz.length;i++)
{
if(pz[i][0]==pz[i][1]&&pz[i][1]==pz[i][2])
bingo++;
if(pz[0][i]==pz[1][i]&&pz[1][i]==pz[2][i])
bingo++;
}
if(pz[0][0]==pz[1][1]&&pz[1][1]==pz[2][2])
bingo++;
if(pz[2][0]==pz[1][1]&&pz[1][1]==pz[0][2])
bingo++;
if(bingo==0)
System.out.println("\t꽝!!!");
else
System.out.println("\t빙고 "+bingo+"개");
System.out.println("엔터를 누르면 다음난수가 나옵니다(q: 종료)");
String ans=sc.nextLine();
if(ans.equalsIgnoreCase("q"))
{
System.out.println("게임을 종료합니다");
break;
}
}
- arrange가 지정되지 않았으므로 while(true)문 사용
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의 난수만 발생
bingo=0;
for(int i=0;i<pz.length;i++)
{
if(pz[i][0]==pz[i][1]&&pz[i][1]==pz[i][2])
bingo++;
if(pz[0][i]==pz[1][i]&&pz[1][i]==pz[2][i])
bingo++;
}
if(pz[0][0]==pz[1][1]&&pz[1][1]==pz[2][2])
bingo++;
if(pz[2][0]==pz[1][1]&&pz[1][1]==pz[0][2])
bingo++;
if(bingo==0)
System.out.println("\t꽝!!!");
else
System.out.println("\t빙고 "+bingo+"개");
- 빙고 갯수를 변수 bingo로 주어 빙고 달성 시마다 1개씩 증가(다시 실행 시 초기화 위해 처음 bingo=0; 으로 초기화
System.out.println("엔터를 누르면 다음난수가 나옵니다(q: 종료)");
String ans=sc.nextLine();
if(ans.equalsIgnoreCase("q"))
{
System.out.println("게임을 종료합니다");
break;
}
- while(true)문이므로 break; 조건 반드시 필요