Dev/Java

[java] 선택정렬, 난수, 가위바위보 게임만들기

창문닦이 2019. 1. 22. 09:45

배열에서의 정렬작업.(Selection Sort)


자바에서는 배열의 단점을 보완하기위해 collection 사용함

collection 도 배열과 사용하는 방법 동일

변수 하나가 별도로 있어야 저장해뒀다가 덮어씌움

num[0] > num[1,2,3,4]? num[0]이 더 크면 자리바꿈 : 정렬의 기본 원리

int num[] = {35,27,13,5,10} 

27 35 13 5 10

13 35 27 5 10

5 35 27 13 10

5 35 27 13 10 (4번 반복)

->5는 전체데이터중 가장 작은 값으로 고정.


5 27 35 13 10

5 13 35 27 10

5 10 35 27 13 (3번 반복)

->5 ,10 고정.


5 10 27 35 13

5 10 13 35 27 (2번 반복)

->5 ,10, 13 고정.


5 10 13 27 35 (1번 반복)

->정렬 끝

이중 for문 이용. 전체적으로 '배열의 length-1'번, 내부적으로 4-3-2-1번

import java.util.Scanner;

public class Test1 {

public static void main(String[] args) {

//세 개의 수를 입력받아서 작은 수 에서 큰 수로 출력

Scanner sc = new Scanner(System.in);

int num1,num2,num3,temp;

System.out.print("세개의 수?");//9 5 2

num1 = sc.nextInt();

num2 = sc.nextInt();

num3 = sc.nextInt();

/*

//1-2, 2-3, 1-2비교

if(num1>num2){

temp = num1;

num1 = num2;

num2 = temp;

}

if(num2>num3){

temp = num2;

num2 = num3;

num3 = temp;

}

if(num1>num2){

temp = num1;

num1 = num2;

num2 = temp;

}

*/

//1-2, 1-3, 2-3비교

if(num1>num2){

temp = num1;

num1 = num2;

num2 = temp;

}

if(num1>num3){

temp = num1;

num1 = num3;

num3 = temp;

}

if(num2>num3){

temp = num2;

num2 = num3;

num3 = temp;

}

System.out.printf("결과 : %d %d %d\n",num1, num2, num3);

sc.close();

}

}


실행 화면




선택정렬 Selection Sort

import java.util.Scanner;

public class Test2 {

public static void main(String[] args) {

//int[] num = { 28, 65, 7, 4, 10 };

int i, j, temp;

int num[] = new int[5];

Scanner sc = new Scanner(System.in);

//입력

System.out.print("다섯개의 숫자를 입력하세요:");

for(i=0;i<num.length;i++){

num[i]= sc.nextInt();

}

//출력

System.out.print("Source data: ");

for (i = 0; i < num.length; i++) {

System.out.printf("%4d", num[i]); // 공백 네칸의 자리를 두고 숫자 출력

}

System.out.println();

//선택정렬 Selection Sort

for (i = 0; i < num.length - 1; i++) {

for (j = i + 1; j < num.length; j++) { // 기준값과 비교하는 수는 항상 +1번째부터

  // 시작부터 ~ 마지막 배열의자리까지

//System.out.println(i+":"+j); //인덱스마다 회전수 조회

if (num[i] > num[j]) { //부등호에 따라 내림차순(<), 오름차순(>) 정렬 가능. 크기에 따라 자리바꿈 진행

temp = num[i];

num[i] = num[j];

num[j] = temp;

}

}

}

// 출력

System.out.print("Sorted data: ");

for (int su : num) {// 확장 for문. 시작값과 끝값 선언 안해줘도됨. 배열, collection에서만 가능

System.out.printf("%4d", su);

}

System.out.println();

sc.close();

}

}


실행 화면




selection sort 10명 이내의 이름과 점수를 입력받아 점수가 높은 사람에서 낮은 사람순으로 출력

import java.util.Scanner;

public class Test3 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int i, j, inwon, temp1;

String temp2;

String[] name; // 배열크기가 입력값에 따라 달라지므로 크기 지정을 미리 할 수 없음.

int[] score;

do{

System.out.print("인원수[1~10?]");

inwon = sc.nextInt();

}while(inwon<1||inwon>10);

//배열의 객체 생성, 메모리 할당. new가 붙으면 객체를 생성했다 = 메모리상에 로딩시켰다.

name = new String[inwon];

score = new int[inwon];

//인원수 만큼 이름과 점수 입력

for(i=0;i<inwon;i++){

System.out.print((i+1)+"번째 이름?");

name[i]=sc.next();

System.out.print((i+1)+"번째 점수?");

score[i]=sc.nextInt();

}

//정렬

for(i=0;i<inwon-1;i++){

for(j=i+1;j<inwon;j++){

if(score[i]<score[j]){//점수오름차순

temp1=score[i];

score[i]=score[j];

score[j]=temp1;  

temp2=name[i];

name[i]=name[j];

name[j]=temp2;

}

}

}

//출력. 확장for문은 배열1개일때만 가능. 예제에서는 2개의 배열이므로 사용불가

System.out.printf("이름   점수\n");

System.out.printf("-----------\n");

for(i=0;i<inwon;i++){

System.out.printf("%6s %4d\n",name[i],score[i]);

}

sc.close();

}//endmain

}//endclass


실행 화면




1~45까지의 수중 6개의 난수를 발생시켜 크기순으로 출력

import java.util.Random;

public class Test4 {

public static void main(String[] args) {

Random rd = new Random();

//난수생성 : Random class 사용자가 정해준 숫자범위 중에서 임의의 숫자를 하나 만들어낸다.

int[] num = new int[6];

int i, j, su, temp;

su = 0;

// while문은 몇번을 반복해야할지 모를 때 사용.

// 난수를 추출할때 동일한 난수가 나오게되면 다시 진행해야 함.

while (su < 6) {

num[su] = rd.nextInt(45) + 1; // 1~45를 꺼내라. 0부터 시작하므로 '+1'을 해줘야함

for (int n = 0; n < su; n++) { //이전 데이터와 전부 비교해야하므로 for문 사용

if (num[su] == num[n]) { // su:추출한 난수 데이터 갯수(배열의 인덱스), n번째 데이터와 동일하냐

su--; // 동일하다면 su를 줄이고 break문으로 나가라. 중복데이터 발생하면 여러번 돌릴 필요없이 다시 난수 뽑아내야 함

break;

}

}

su++;

}

// 선택정렬

for (i = 0; i < num.length - 1; i++) {

for (j = i + 1; j < num.length; j++) {

if (num[i] > num[j]) {

temp = num[i];

num[i] = num[j];

num[j] = temp;

}

}

}

// 출력

for (int n : num) {

System.out.printf("%4d", n);

}

System.out.println();

}

}


실행 화면




Selection sort 10명 이내의 이름과 점수를 입력받아 석차를 구하세요 석차가 높은 사람순으로 출력

import java.util.Scanner;

public class Test5 {

public static void main(String[] args) {

Scanner sc = new Scanner(System.in);

int i, j, k, inwon;

String[] name;

int[] score;

int[] rank;

//인원수 입력

do{

System.out.print("인원수[1~10?]");

inwon = sc.nextInt();

}while(inwon<1||inwon>10);

//인원수에 따른 객체 생성

name = new String[inwon];

score = new int[inwon];

rank = new int[inwon];

//int형 배열에는 초기값 0 이 들어있음. 모두 1로 초기화

for(i=0;i<inwon;i++){

rank[i]=1;

}

//인원수 만큼 이름과 점수 입력

for(i=0;i<inwon;i++){

System.out.print("이름?");

name[i]=sc.next();

System.out.print("점수?");

score[i]=sc.nextInt();

}

//순위작성. if문 사용

for (i = 0; i < inwon - 1; i++) {

for (j = i + 1; j < inwon; j++) {

if (score[i] > score[j])

rank[j]++;

else if (score[i] < score[j])

rank[i]++;

}

}

//정렬 후 출력

System.out.printf("이름   점수 석차\n");

System.out.printf("-------------------\n");

for(k=1;k<=inwon;k++){

for(i=0;i<inwon;i++){

if(k==rank[i]){

System.out.printf("%6s %4d %4d\n",name[i],score[i],k);

}

}

}

sc.close();

}//endmain

}//endclass


실행 화면





5개의 정수를 입력받아 입력받은 수를 출력하고 입력받은 수중 가장 큰수와 적은수를 출력

import java.util.Scanner;

public class Test6 {

public static void main(String[] args) {

int num[] = new int[5];

int i, max, min;

System.out.print("정수 다섯개를 입력하세요: ");

Scanner sc = new Scanner(System.in);

for (i = 0; i < num.length; i++) {

num[i] = sc.nextInt();

}

max = min = num[0];

for (i = 0; i < num.length; i++) {

if (num[i] > max) {

max = num[i];

}

if (num[i] < min) {

min = num[i];

}

}

System.out.println("최댓값: " + max + ", 최소값: " + min);

sc.close();

}// endmain

}// endclass




실행 화면




1~10사이의 난수를 발생시켜 발생시킨 난수를 3번안에 알아 맞추는 게임 (3번안에 알아맞추지 못하면 발생된 난수를 출력)

import java.io.IOException;

import java.util.Random;

import java.util.Scanner;

public class Test7 {

public static void main(String[] args) throws IOException {

int i, j, k;

char play;

Random rd = new Random();

Scanner sc = new Scanner(System.in);

do {

i = rd.nextInt(10) + 1;

for (j = 1; j <= 3; j++) {

System.out.printf("1~10중에 정수를 입력하세요. [%d번째 기회] :", j);

k = sc.nextInt();

if (k == i) {

System.out.printf("정답은 %d. 정답입니다!\n",i);

break;

} else {

System.out.printf("오답입니다!\n");

}

}

System.out.printf("정답은 %d 입니다. ", i);

System.out.println("계속할래?[Y/N]");

play = (char) System.in.read();

} while (play == 'y' || play == 'Y');

sc.close();

}//end main

}//end class


실행 화면




1~3사이의 난수를 발생시켜 가위,바위,보 게임 프로그램 작성 1:가위, 2:바위, 3:보

import java.util.Random;

import java.util.Scanner;

public class Test8 {

public static void main(String[] args) {

Random rd = new Random();

Scanner sc = new Scanner(System.in);

int me, com;

String game[] = { "가위", "바위", "보" };

com = rd.nextInt(3) + 1;

do{

System.out.print("1:가위, 2:바위, 3:보 입니다. 숫자를 입력하세요. : ");

me = sc.nextInt();

}while(me<1||me>3);

System.out.println("컴퓨터: " + game[com - 1] + ", 사람: " + game[me - 1]);

if (me == com) {

System.out.println("비겼습니다.");

} else if ((me == 1 && com == 3) || (me == 2 && com == 1)|| (me == 3 && com == 2)) {

System.out.println("당신이 이겼습니다.");

} else {

System.out.println("컴퓨터가 이겼습니다.");

}

/*

//가위바위보 수학 공식

if (me == com) {

System.out.println("비겼습니다.");

}else if((me+2)%3==com){

System.out.println("당신이 이겼습니다.");

}else{

System.out.println("컴퓨터가 이겼습니다.");

}

*/

sc.close();

}

}


실행 화면




지역변수와 전역변수의 초기값

import com.day06.Rect;

public class Test9 {

public static void main(String[] args) {

Rect usa = new Rect();//패키지가 달라서 import 시켜야함

usa.input();

int a = usa.area();

int l = usa.length();

usa.print(a, l);

//전역변수: 초기값 - 0

//지역변수: 초기값 - 쓰레기값 가지고 있음

}

}


실행 화면





'Dev > Java' 카테고리의 다른 글

[java] static변수, 변수 초기화 방법, Overloading  (0) 2019.01.22
[java] 전역/지역변수, 버블정렬,구구단만들기  (0) 2019.01.22
[java] 배열, 달력만들기  (0) 2019.01.21
[java] for문, switch문  (0) 2019.01.21
[java] 반복문  (0) 2019.01.21