728x90
반응형

문제 1

  • 10진수 값을 2진수 값으로 변환하는 코드를 만들어라.
  • 배열과 반복문을 이용한다.
  • 사용자가 직접 10진수 값을 입력받아 정수형 num에 저장한 뒤 연산한다. 

 

 

▶ 코드

		/*10진수 -> 2진수*/
		Scanner scan = new Scanner(System.in);
		int num=0,i,j;
		int two[] = new int[20];

		//10진수 입력
		System.out.print("10진수 입력>>");
		num = scan.nextInt();
        
		//2진법
		for(i=0;num!=0;i++){
			two[i]=num%2;	//나머지 값을 배열에 저장
			num=num/2;	//2로 나눈 값을 num에 넣고 바뀐 num값으로 연산
		}

		//2진수 출력*       
		System.out.print("2진수:");
		for(j=i-1;j>=0;j--){	//배열의 값을 저장된 부분(i-1)부터 0까지 거꾸로 출력
			System.out.print(two[j]);
		}
		System.out.println();

		scan.close();

 

▶ 출력 결과

10진수 입력>>10
2진수:1010
10진수 입력>>15
2진수:1111
10진수 입력>>31
2진수:11111

 

 

 

문제 2

  • 2진수 값을 10진수 값으로 변환하는 코드를 만들어라.
  • 배열과 반복문을 이용한다.
  • 사용자가 직접 2진수 값을 입력받아 정수형 num2에 저장한 뒤 연산한다. 

 

 

▶ 코드

		/*2진수 -> 10진수*/
		int i,j,k,sum=0,num2=0,temp=1;
		Scanner scan = new Scanner(System.in);

		//2진수 입력
		System.out.print("2진수 입력>>");
		num2 = scan.nextInt();

		//입력된 정수형 2진수를 정수형 배열에 하나씩 넣음
		int ten[] = new int[20];

		for(i=0;num2!=0;i++){
			ten[i]=num2%10;
			num2=num2/10;
		}

		//10진법
		for(k=0;k<i;k++){	//저장된 배열(i)만큼 계산
			if(ten[k]==1){	//1이면 값을 sum에 더한다
				sum=sum+temp;
			}
			temp*=2; //한 칸씩 반복할 때마다 2를 곱한다.
		}
		
		System.out.println("10진수:"+sum); //출력

		scan.close();

 

▶ 출력 결과

2진수 입력>>1010
10진수:10
2진수 입력>>1111
10진수:15
2진수 입력>>11111
10진수:31

 

728x90
반응형
728x90
반응형

1. equals 이용하여 판별

2. 문자를 정수형으로 변환하여 판별

3. switch-case문을 이용하여 판별

 

 

문제

881219-1055910
881219-2132154
221219-3565456
221219-4132547
  • 주민번호를 입력받아 남자인지 여자인지 판정하여 출력하시오. (예제는 임의로 입력된 값이다.)
  • 사용자가 직접 13자리 주민번호를 입력한다. 이 때, '-'를 포함하여 입력한다.
  • 위에 예시를 입력하고, 입력 받은 주민번호를 이용해 남자인지 여자인지 구분하여 출력한다. 

 

 

1. equals 이용하여 판별

		Scanner scan=new Scanner(System.in);

		System.out.print("주민번호를 입력하세요 >> ");
		String num = scan.next();

		int idx=num.indexOf("-")+1;
		String str=num.substring(idx,idx+1);

		//str값(1,2,3,4)에 따라 남자/여자를 구분한다. 문자열은 (str == "1") 대신 equals를 이용해야 정확하게 값이 나온다.
		if(str.equals("1") || str.equals("3"))
			System.out.println("남자입니다.");
		else if(str.equals("2") || str.equals("4"))
			System.out.println("여자입니다.");
		else
			System.out.println("다시 입력해주세요.");

 

 

 

2. 문자를 정수형으로 변환하여 판별

		//str의 인덱스 값을 숫자로 변환하여 비교
		int par = Integer.parseInt(str);

		System.out.println("주민번호 첫 번째 자리 : "+par);
		if(par==1 || par==3)
			System.out.println("남자입니다.");
		else if(par==2 || par==4)
			System.out.println("여자입니다.");
		else
			System.out.println("다시 입력해주세요.");

 

 

 

3. switch-case문을 이용하여 판별

		//switch - case 문을 이용하여 출력
		switch(str){
		case "1":
		case "3":
			System.out.println("남자입니다.");
			break;
		case "2":
		case "4":
			System.out.println("여자입니다.");
			break;
		default:
			System.out.println("다시 입력해주세요.");
		}

 

 

 

출력 결과

주민번호를 입력하세요 >> 881219-1055910
남자입니다.
주민번호를 입력하세요 >> 881219-2132154
여자입니다.
주민번호를 입력하세요 >> 221219-3565456
남자입니다.
주민번호를 입력하세요 >> 221219-4132547
여자입니다.
728x90
반응형
728x90
반응형

문제 1

    *
   **
  ***
 ****
*****
  • 반복문을 이용하라.
  • ' '(공백)과 '*'(별)을 이용해 위 그림과 같이 출력하라.

 

 

▶ 코드

		int max=5;
		int row,column;
        
		for(row=0;row<max;row++){
			for(column=0;column<(max-row)-1;column++){
				System.out.print(" ");
			}
			
			for(column=0;column<row+1;column++){
				System.out.print("*");
			}
			System.out.println();//줄바꿈
		}

 

▶ 출력 결과

    *
   **
  ***
 ****
*****

 

 

 

문제 2

     *
    ***
   *****
  *******
 *********
***********
 *********
  *******
   *****
    ***
     *
  • 반복문을 이용하라.
  • ' '(공백)과 '*'(별)을 이용해 위 그림과 같이 출력하라.

 

 

▶ 코드

		int i,j,k;
		int max=5;//5줄을 기준으로 출력하기 위해 미리 선언
        
		//5줄 출력
		for(i=0;i<max;i++){//0~4
			for(j=0;j<max-i;j++){
				System.out.print(" ");
			}
			
			for(k=0;k<i*2+1;k++){
				System.out.print("*");
			}
			System.out.println(); //줄바꿈
		}////out_for1
		
		//6줄 출력
		for(i=max;i>=0;i--)//5~0
		{
			for(j=0;j<max-i;j++){
				System.out.print(" ");
			}
			
			for(k=0;k<i*2+1;k++){
				System.out.print("*");
			}
			System.out.println(); //줄바꿈
		}//out_for2

 

▶ 출력 결과

     *
    ***
   *****
  *******
 *********
***********
 *********
  *******
   *****
    ***
     *

 

 

 

문제 3

***** *****
****   ****
***     ***
**       **
*         *
*         *
**       **
***     ***
****   ****
***** *****
  • 반복문을 이용하라.
  • ' '(공백)과 '*'(별)을 이용해 위 그림과 같이 출력하라.

 

 

▶ 코드

		int max=5;
		int row, column;
		
		//위
		for(row=0;row<max;row++){
			for(column=0;column<max-row;column++){
				System.out.print("*");
			}//inner_for1
			
			for(column=0;column<(row*2)+1;column++){
				System.out.print(" ");
			}//inner_for2
			
			for(column=0;column<max-row;column++){
				System.out.print("*");
			}//inner_for3
	
			System.out.println(); //줄바꿈
		}//out_for1
		
		//아래
		for(row=max-1;row>=0;row--){
			for(column=0;column<max-row;column++){
				System.out.print("*");
			}//inner_for1
			
			for(column=0;column<(row*2)+1;column++){
				System.out.print(" ");
			}//inner_for2
			
			for(column=0;column<max-row;column++){
				System.out.print("*");
			}//inner_for3
			
			System.out.println(); //줄바꿈
		}//out_for2

 

▶ 출력 결과

***** *****
****   ****
***     ***
**       **
*         *
*         *
**       **
***     ***
****   ****
***** *****

 

 

 

728x90
반응형
728x90
반응형

1. if문 이용

2. switch-case문 이용

 

문제

<입력값:출력>
90~100:A
80~89:B
70~79:C
60~69:D
0~59:F
  • 점수를 입력 받아서 학점을 구하시오.
  • 사용자가 직접 점수를 입력한다. (import java.util.Scanner; 이용)
  • 입력한 값이 100보다 크거나 0보다 작을 때는 결과가 출력되지 않는다.
  • 90을 입력하면 A값이 출력된다. 
  • 경곗값 분석을 이용해 테스트를 해 보아라.

 

 

1. if문 이용

		Scanner scan = new Scanner(System.in);
		int num=0;
		char grade=' '; //변수선언 및 초기화. 학점을 넣을 변수

		System.out.print("점수를 입력하세요 >> ");
		num = scan.nextInt();

		//grade 값 삽입
		if(num>100 || num<0) //100보다 크거나 0보다 작은 숫자를 입력했을 때
			System.out.println("점수를 잘못 입력하셨습니다.\n0~100 사이의 점수를 다시 입력해주세요.");
		else{	//100~1 사이의 숫자
			if(num >= 90){	//이미 100이하의 값임을 확인했기 때문에 90이상인 값을 구한다.
				grade='A';
			}
			else if(num >= 80){	//위의 조건을 만족하지 못해서 다음 조건문으로 내려왔기 때문에 이미 90이상이 아닌 것을 확인했다. 즉, 89~80까지의 값
				grade='B';
			}
			else if(num >= 70){	//79~70
				grade='C';
			}
			else if(num >= 60){	//69~60
				grade='D';
			}
			else{	//나머지 값. 59~0
				grade='F';
			}
			System.out.printf("학점 : %c",grade);	//출력
		}//else_end
		

		scan.close(); //close를 해주지 않아도 오류가 나지는 않으나, OS 자원을 되돌리기 위해 close()

 

 

 

2. switch-case문 이용

		Scanner scan = new Scanner(System.in);
		int score=0;
		char grade=' ';

		System.out.printf("점수를 입력하시오 >> ");
		score = scan.nextInt();

		if(score>100 || score<0)
			System.out.println("점수를 잘못 입력하셨습니다.\n0~100 사이의 점수를 다시 입력해주세요.");
		else{
			switch(score/10){ //몫을 구하는 switch문
			case 10:	//100 (100/10 = 10)
			case 9:		//99~90 (99/9 = 9)
				grade='A';	//100~90을 입력받았을 때 출력
				break;	//switch문 탈출
			case 8:
				grade='B';
				break;
			case 7:
				grade='C';
				break;
			case 6: 
				grade='D';
				break;
			default:
				grade='F';
			}
			System.out.printf("학점 : %c", grade); //출력
		}//else_end

		scan.close();

 

 

 

출력 결과

점수를 입력하세요 >> 101
점수를 잘못 입력하셨습니다.
0~100 사이의 점수를 다시 입력해주세요.
점수를 입력하세요 >> -1
점수를 잘못 입력하셨습니다.
0~100 사이의 점수를 다시 입력해주세요.
점수를 입력하시오 >> 100
학점 : A
점수를 입력하세요 >> 90
학점 : A
점수를 입력하세요 >> 59
학점 : F
점수를 입력하세요 >> 0
학점 : F

 

 

 

 

 

 

 

728x90
반응형
728x90
반응형

<오늘의 학습>

1. 배열

2. 이차원 배열

3. 삼차원 배열

4. Random

 

 

1. 배열

자료형이 같은 자료 여러 개를 한 번에 관리할 수 있으며, 자료가 연속으로 나열된 자료 구조이다. 즉, 동일 자료형의 기억장소 집합체를 표현한다.

  1. int a=10; //변수(단독 주택에 비유)
    int b=20;
    int c=30;
  2. int arr[] = new int[3]; //배열(아파트에 비유)
    arr[0]=10;
    arr[1]=20;
    arr[2]=30;

 


1) 배열의 특징

  1. 배열의 장점 : 자료를 일괄 처리할 수 있다.
  2. 배열 순서는 0번부터 시작한다.
  3. 지역변수라도 자동 초기화가 된다.
  4. 배열은 new 연산자를 사용하여 생성한다. ex) int arr[]=new int[3];
  5. new연산자는 heap영역에 메모리를 할당받는다.
  6. cf(일반변수) : stack영역에 변수를 할당한다.
  7. 배열,클래스:new 연산자를 사용하여 heap 영역에 메모리를 할당받기 때문에 레퍼런스 자료형이라고 한다.
        ex) Test01 test01=new Test01[];
               └레퍼런스 변수(클래스 변수)&인스턴스&객체
  8. Garbage Collection(가비지 컬렌션) : 쓰레기 수집기
       - JVM에는 Garbage Collector가 존재한다.
       - 가비지 컬렉터는 더 이상 참조되지 않는 Garbage라고 불리는 불필요한 메모리를 알아서 정리해주는 역할을 한다.

 

  • stack영역 : 정적변수가 할당 됨(일반변수 선언,메서드가 포함됨)
  • heap영역 : 동적변수가 할당 됨(new 객체생성, new 배열생성)
  • 가비지 컬렉션 : JVM의 RunTime Data Area에서 사용하지 않은 heap메모리의 내용을 삭제하는 것.

 

 


2) 배열 선언 형식

  • 자료형[] 배열명;
  • 자료형 배열명[];
     배열명 = new 자료형[요소 갯수]; //위에서 선언 후 요소 갯수 넣기
    ex) int arr[];
           arr=new int[3];

  • 자료형[] 배열명 = new 자료형[요소갯수]; //선언과 동시에 생성
    ex) int arr[]=new int[3];

  • 자료형 배열명[]={초기값,초기값,,,}; //선언과 동시에 초기값을 준다
    ex) int a[]={10,20,30};

 

 


 예제) 배열 선언 및 값 초기화

		int a[]={10,20,30};
		for(int i=0;i<a.length;i++){
			System.out.printf("a[%d]:%d\n",i,a[i]);
		}
a[0]:10
a[1]:20
a[2]:30

 

 


 예제) 배열의 자동 초기화

	int max=1000;
	int hi=3;
	static int a;

	public static void main(String[] args) {
		//main()메서드가 static되어 있기 때문에 main()안에서는 static이 붙은 전역변수만 사용 가능함
		//main()안에서 객체 생성하면 static으로 선언하지 않아도 사용이 가능함

		int max=100;
		Practice p=new Practice();

		System.out.println(p.max);	//전역 변수 1000
		System.out.println(max);	//지역 변수 100
        
		System.out.println(a);	//0 출력. 전역 변수 a는 자동 초기화된다.
		int b; //지역 변수 b는 자동초기화가 되지 않는다.
		System.out.println(b); //오류. 지역 변수는 자동초기화가 되지 않는다.

		int c[]=new int[3];
		System.out.println(c[0]);	//0 출력. 배열은 자동으로 초기화된다.
		
	}//main_end
1000
100
0
0
  1. 전역변수:메서드 밖에서 선언된 변수로 자동으로 값이 초기화된다.
  2. 지역변수:자동으로 값이 초기화되지 않는다.
  3. 배열:지역변수일지라도 자동으로 초기화가 된다.
     

 


 예제) 배열끼리의 값 할당

		int a[]={10,20,30};
		int b[];//선언
		b=a;//a값을 b에 할당
		
		for(int i=0;i<a.length;i++){
			System.out.printf("a[%d]:%d, b[%d]:%d\n",i,a[i],i,b[i]);
		}
a[0]:10, b[0]:10
a[1]:20, b[1]:20
a[2]:30, b[2]:30

 

 

 

2. 이차원 배열

  • 행렬을 이용하여 평면을 구현하기 위한 배열
  • 이차원 이상으로 구현한 배열을 다차원 배열이라고 한다.
		int a[][]={{10,20},{30,40,50}};
		System.out.println("배열 a의 행 갯수:"+a.length);
		System.out.println("a[0] 열 갯수:"+a[0].length);
		System.out.println("a[1] 열 갯수:"+a[1].length);
배열 a의 행 갯수:2
a[0] 열 갯수:2
a[1] 열 갯수:3

 

 


 예제) 이차원 배열 출력

		int row,column;
		for(row=0;row<a.length;row++){
			for(column=0;column<a[row].length;column++){
				System.out.print(a[row][column]+" ");
			}//inner_for_end
			System.out.println();//줄바꿈
		}//for_end
10 20 
30 40 50

 

▷ 위 예제에서 행렬 표시

		for(row=0;row<a.length;row++){
			for(column=0;column<a[row].length;column++){
				System.out.printf("a[%d][%d]:%d\n",row,column,a[row][column]);
			}//inner_for_end
			System.out.println();//줄바꿈
		}//out_for_end
a[0][0]:10
a[0][1]:20

a[1][0]:30
a[1][1]:40
a[1][2]:50
a[0] 10 20  
a[1] 30 40 50

 

 


 예제) 이차원 배열 내용 출력

		double ki[][]={{162.5,175.5},{163.7,188.8}};

		for(int i=0;i<ki.length;i++){
			for(int j=0;j<ki[i].length;j++){
				System.out.print(ki[i][j]+"\t");
			}//inner_for_end
			System.out.println();
		}//out_for_end
162.5	175.5	
163.7	188.8

 

 

 

3. 삼차원 배열

 예제) 삼차원 배열 출력

		/*삼차원 배열 출력
		abc
		def

		ghi 
		jkl
		 */
		
		char c[][][]={
				{{'a','b','c'},{'d','e','f'}},
				{{'g','h','i'},{'j','k','l'}}
		};
        
		//출력
		for(int i=0;i<c.length;i++){
			for(int j=0;j<c[i].length;j++){
				for(int k=0;k<c[i][j].length;k++){
					System.out.print(c[i][j][k]);;

				}
				System.out.println();
			}
			System.out.println();
		}
abc
def

ghi
jkl

 

위 예제에서 선언할 때 값을 넣지 않고 'a'부터 'l'까지 초기 값을 넣어서 출력

		char arr[][][]=new char[2][2][3];
        
		//abc/def/ghi/jkl 초기값 넣기
		char ch='a';
		for(int i=0;i<arr.length;i++){
			for(int j=0;j<arr[i].length;j++){
				for(int k=0;k<arr[i][j].length;k++){
					arr[i][j][k]=ch;
					ch++;
				}
			}
		}
        
		//출력
		for(int i=0;i<arr.length;i++){
			for(int j=0;j<arr[i].length;j++){
				for(int k=0;k<arr[i][j].length;k++){
					System.out.print(arr[i][j][k]);;

				}
				System.out.println();
			}
			System.out.println();
		}
abc
def

ghi
jkl

 

 

 

4. Random

  • Math 참고 사이트 : https://docs.oracle.com/javase/1.5.0/docs/api/
  • 0 < Math.random() < 1
  • Math.random()*갯수+나올 수 있는 가장 작은 수
  • Math.random()*(큰 수-작은 수+1) +1 : 1부터 값이 시작될 때 큰 수와 작은 수 값을 이용할 수도 있다.
  • Math.random() 은 double형으로 출력되기 때문에 정수형으로 받고 싶다면 정수형으로 강제 형변환을 해주어야 한다.

 

 


 예제) 주사위 값을 랜덤으로 5번 출력

		/*
		int a=(int)(Math.random()*가지수+나올 수 있는 가장 작은 수);

		주사위가 나올 수 있는 총 숫자:6개
		int a=(int)(Math.random()*6+1); // 1~6까지의 랜덤 숫자가 a에 저장된다.
		 */

		//주사위 5번 돌리기
		for(int i=0;i<5;i++){
			int random_num=(int)(Math.random()*6+1);
			System.out.println(random_num);
		}
5
1
5
3
1

 

 


 예제) 로또 번호를 랜덤으로 출력

		/*랜덤 로또 번호(1~45) 출력*/
		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;//inner_for_out
				}//if_end
			}//inner_for_end
		}//out_for_end

		//출력
		System.out.print("로또 번호:");
		for(int i=0;i<lotto.length;i++)
			System.out.print(lotto[i]+" ");
로또 번호:38 5 13 23 6 20

 

 

 

 

 


2023년 5월 18일 목요일

<5일차 수업 후기>

예전에 C언어를 배울 때, rand() 함수를 이용해서 랜덤 값을 받아왔던 적이 있었다. C언어에서는 srand 함수와 time 함수를 이용하지 않으면 랜덤 값이 매번 똑같이 출력됐는데 JAVA에서는 다른 함수를 추가로 사용하지 않아도 값이 계속 바뀌어서 신기했다.

이번주 주말에는 로또 번호를 입력하고, 로또 번호를 뽑아서 당첨됐는지 출력하는 코드를 만들어보고 싶다.

728x90
반응형

'HRD_훈련 > JAVA' 카테고리의 다른 글

[JAVA] 생성자와 상속 (7일차)  (0) 2023.05.22
[JAVA] 객체 지향 프로그래밍 (6일차)  (0) 2023.05.19
[JAVA] 반복문 (4일차)  (0) 2023.05.18
[JAVA] 조건문 (4일차)  (0) 2023.05.17
[JAVA] 연산자(Operation) (3일차)  (0) 2023.05.17

+ Recent posts