728x90
반응형

문제

알파벳 소문자값을 저장하고, 소문자를 대문자로 변경하는 코드를 작성하라.

abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ
  • char형 배열 alphabets에 소문자 값을 저장하라.
  • 아스키 코드표를 참고해라.

 

 

1. char형 배열 이용

▶ 코드

		//알파벳 문자와 아스키 코드를 이용한 출력
		char[] alphabets=new char[26];
		char a='a';

		//소문자 값을 배열에저장
		for(int row=0;row<alphabets.length;row++,a++)
			alphabets[row]=a;

		//저장된 a~z 출력
		for(int row=0;row<alphabets.length;row++)
			System.out.print(alphabets[row]);;
		System.out.println(); //줄바꿈


		//저장된 소문자를 대문자로 변경
		for(int row=0;row<alphabets.length;row++)
			for(int i=0;i<32;i++)//alphabets[row]-=32;는 오류가 나서 반복문을 사용함
				alphabets[row]--;
        
		//출력
		for(int row=0;row<alphabets.length;row++)
			System.out.print(alphabets[row]);;

 

▶ 출력 결과

abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ

 

 

 

2. 문자열과 함수 이용

▶ 코드

		String s = new String();
		char ch2='A';

		for(int row=0;row<26;row++,ch2++)
			s= s+ch2;
		
		System.out.println(s);//저장된 문자열 출력
		
		s=s.toLowerCase(); //소문자로 변환
		System.out.println(s);
		
		s=s.toUpperCase(); //대문자로 변환
		System.out.println(s);

 

▶ 출력 결과

ABCDEFGHIJKLMNOPQRSTUVWXYZ
abcdefghijklmnopqrstuvwxyz
ABCDEFGHIJKLMNOPQRSTUVWXYZ

 

728x90
반응형
728x90
반응형

문제

로또 번호를 입력 받아 로또 당첨 여부를 확인하시오.

6개를 다 맞추면 1등, 5개를 맞추고 보너스 번호까지 맞추면 2등, 5개만 맞추면 3등, 4개를 맞추면 4등, 3개를 맞추면 5등이다.

 

▶ 제한사항

  • 로또 번호는 1부터 45까지의 값에서만 나온다.
  • 로또는 직접 입력하거나, 랜덤으로 입력받을 수 있다.
  • 로또 번호는 중복된 번호가 나올 수 없다.
  • random() 함수를 이용한다.

 

 

코드

1. 로또 번호를 수동으로 선택할지, 자동으로 선택할지 선택

		int num[]=new int[6]; //로또 번호 6개 선택
		Scanner scan=new Scanner(System.in);

		System.out.println("★★★★★★★★★★★로또 당첨을 기원합니다★★★★★★★★★★★");
		System.out.println("----------------------------------------");

		int automatic=2;
		//로또 번호 수동/자동 출력 선택
		while(true){
			System.out.print("수동을 원하시면 0, 자동을 원하시면 1을 입력하세요 >> ");
			automatic=scan.nextInt();

			if(automatic==0 || automatic==1)
				break; //무한 루프 종료
			else
				System.out.println("잘못 입력하셨습니다.다시 입력해주세요.");
		}

 

 

2-1. 수동으로 로또 번호 입력

		if(automatic==0){
			System.out.println("----------------------------------------");
			for(int i=0;i<num.length;i++){
				System.out.printf("%d번 로또 번호를 입력하세요:",i+1);
				num[i]=scan.nextInt();
				if(num[i]<=0 || num[i]>45){ //잘못 입력했을 때
					System.out.println("\n1부터 45까지의 숫자를 입력해주세요.");
					i--;
				}
				else{
					for(int j=0;j<i;j++){
						if(num[i]==num[j]){ //같은 값이 들어가면 무효화
							System.out.printf("\n%d는 이미 입력하셨습니다.다시 입력해주세요.\n",num[j]);
							i--;
							break;//inner_for_out
						}
					}//inner_for_end
				}
			}//out_for_end
		}

 

2-2. 자동으로 로또 번호 입력

		else{
			for(int i=0;i<num.length;i++){
				num[i]=(int)(Math.random()*45+1);
				for(int j=0;j<i;j++){
					if(num[i]==num[j]){ //같은 값이 들어가면 무효화
						i--;
						break;//inner_for_out
					}
				}//inner_for_end
			}//out_for_end
		}

 

 

3. 로또 번호와 보너스 번호를 랜덤으로 저장

		//랜덤 로또 번호
		int lotto[]=new int[7]; //마지막은 보너스 번호

		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
				}
			}//inner_for_end
		}//out_for_end

 

 

4. 로또 번호 출력

		//출력
		System.out.println("----------------------------------------");
		System.out.print("당신의 로또 번호:");
		for(int i=0;i<num.length;i++){
			System.out.print(num[i]+" ");
		}
		System.out.println(); //줄바꿈
		
		System.out.print("로또번호:");
		for(int i=0;i<lotto.length-1;i++)
			System.out.print(lotto[i]+" ");

		System.out.println("\n보너스번호:"+lotto[lotto.length-1]);
		System.out.println("----------------------------------------");

 

 

5. 로또 당첨 여부 확인

		int count=0; //맞춘 번호 숫자 카운트
		int bonus=0; //보너스 번호를 맞추지 못하면 0. 보너스 번호를 맞추면 1
		
		System.out.print("맞추신 번호:");
		for(int i=0;i<num.length;i++){
			//보너스 번호 빼고 6개의 번호 확인
			for(int j=0;j<lotto.length-1;j++){ 
				if(num[i]==lotto[j]){
					System.out.print(num[i]+" ");//맞춘 번호 출력
					count++;
				}
			}//inner_for_end
            
			//보너스 번호 일치 여부 확인
			if(num[i]==lotto[lotto.length-1])
				bonus=1;
		}//out_for_end
		
		if(count==0) //당첨된 번호가 하나도 없으면 "없음" 출력
			System.out.print("없음");
		System.out.println(); //줄바꿈

 

 

6. 로또 등수 출력

		//당첨 여부 출력
		switch(count){
		case 6:
			System.out.printf("%d개를 맞추셨습니다.1등입니다!!!\n", count);
			break;
		case 5:
			if(bonus==1)
				System.out.printf("%d개와 보너스 번호를 맞추셨습니다.2등입니다!!\n", count);
			else
				System.out.printf("%d개를 맞추셨습니다.3등입니다!!\n", count);
			break;
		case 4:
			System.out.printf("%d개를 맞추셨습니다.4등입니다!!\n", count);
			break;
		case 3:
			System.out.printf("%d개를 맞추셨습니다.5등입니다!!\n", count);
			break;
		default:
			System.out.printf("%d개를 맞추셨습니다.다음에 다시 도전해보세요^^",count);
		}

 

 

 

출력 결과

1. 수동 입력

★★★★★★★★★★★로또 당첨을 기원합니다★★★★★★★★★★★
------------------------------------------------------------
수동을 원하시면 0, 자동을 원하시면 1을 입력하세요 >> 0
------------------------------------------------------------
1번 로또 번호를 입력하세요:5
2번 로또 번호를 입력하세요:5

5는 이미 입력하셨습니다.다시 입력해주세요.
2번 로또 번호를 입력하세요:46

1부터 45까지의 숫자를 입력해주세요.
2번 로또 번호를 입력하세요:43
3번 로또 번호를 입력하세요:22
4번 로또 번호를 입력하세요:13
5번 로또 번호를 입력하세요:39
6번 로또 번호를 입력하세요:7
------------------------------------------------------------
당신의 로또 번호:5 43 22 13 39 7 
로또번호:14 16 15 27 28 21 
보너스번호:19
------------------------------------------------------------
맞추신 번호:없음
0개를 맞추셨습니다.다음에 다시 도전해보세요^^

 

2. 자동 입력

★★★★★★★★★★★로또 당첨을 기원합니다★★★★★★★★★★★
------------------------------------------------------------
수동을 원하시면 0, 자동을 원하시면 1을 입력하세요 >> 1
------------------------------------------------------------
당신의 로또 번호:14 10 19 35 43 9 
로또번호:30 14 10 45 12 21 
보너스번호:44
------------------------------------------------------------
맞추신 번호:14 10 
2개를 맞추셨습니다.다음에 다시 도전해보세요^^

 

728x90
반응형
728x90
반응형

<오늘의 학습>

1. 인터페이스

2. 추상 클래스

 

 

1. 인터페이스(interface)

레퍼런스 자료형 : 클래스, 인터페이스, 배열


1.인터페이스는 추상클래스의 일종이다.
2.인터페이스의 모든 메서드는 추상메서드이다. (내용 없는 메서드=추상메서드)
3.인터페이스의 메서드 접근 제한자는 public. 생략해도 public
4.인터페이스 변수는 static final이다. 변수를 상수화하는 것으로 값 변경을 할 수 없다.
static final을 생략해도 static final이다.

ex) static final int MAX=100;//클래스
int MAX=100;//인터페이스
값 변경 불가능

5.생성자, static메서드, private메서드는 추상화될 수 없다.
6.추상메서드는 상속 받아서 오버라이딩 해야 한다.



2. 추상 클래스와의 비교

interface Abstract class(추상클래스)

 

일반 클래스:내용있는 메서드만 존재한다.
추상 클래스:내용있는 메서드도 있고, 추상메서드도 함께 존재한다.
인터페이스:모든 메서드가 추상메서드이다.

interface 형식

interface 인터페이스 이름{
//변수
//static final 변수
public void aa();//추상 메서드

}

class 클래스이름 implements 인터페이스이름{
//오버라이딩
public void aa(){//내용;}
}



/*게시판 실습*/
interface Board{
//추상메서드
}

class BoardImplements implements Board{
//오버라이딩
}

 



키워드 interface       abstract class
메서드 추상메서드 추상메서드,일반메서드 둘 다 존재 가능
다중상속 가능            불가능
변수 static final          프로그래머 마음대로 사용이 가능



 - 추상 클래스의 추상 메서드도 무조건 상속 받아 오버라이딩 해야 한다.
 - 추상 클래스에는 추상 메서드가 하나 이상 존재해야 한다.
 - 추상 클래스로는 객체 생성을 할 수 없다. 내용이 없는 추상 메서드를 호출할 수도 있기 때문이다.(내용이 없는 추상 메서드 호출시 에러남)
ex) Graphics, Calendar

 


2023년 5월 23일 화요일

<8일차 수업 후기>

추상클래스와 인터페이스가 거의 비슷하다고 생각했는데 오늘 수업으로 차이점이 많다는 것을 알게 되었다. 두 개를 사용하는 이유가 헷갈렸기 때문에 복습을 더 꼼꼼하게 해보자.

728x90
반응형
728x90
반응형

문제

  • 정수형 값의 단위를 표시하시오.
  • 배열에 값을 저장하여 출력하시오.

 

 

1. 콤마로 단위 표시

▶ 코드

		int iNum=Integer.MAX_VALUE; //int형의 최댓값을 저장. 2147483648부터는 오류
		
		int arr[] = new int[50];
		int i; //배열의 맨 끝을 알기 위해 전역 변수로 선언
		
		System.out.print(iNum+" -> ");
		
		//숫자를 읽어 배열에 넣음. 배열에는 값이 거꾸로 넣어짐(2147483647 -> 7463847412)
		for(i=0;iNum!=0;i++){
			arr[i]=iNum%10;
			iNum=iNum/10;
		}
        
		//3번 출력할 때 마다 콤마를 출력. 맨 끝의 배열 값부터 0번째까지 출력
		for(int k=i-1;k>0;k--){
			System.out.print(arr[k]);
			if(k%3 == 0)
				System.out.print(",");
		}

 

▶ 출력 결과

2147483647 -> 2,147,483,647

 

 

2. 원 단위로 표시

▶ 코드

		String money[]=new String[]{"원","만","억","경","해","자"}; //돈 단위 출력
		int count=0; //몇 번째 money부터 출력할지 카운트하는 변수
        
		//거꾸로 출력하기 때문에 돈 단위의 끝 값을 구함	
		for(int k=i-1;k >= 0;k--){
			if(k%4==0&& k!=0)	//4번마다 단위가 바뀜. 예를 들어 10000이면 money[1]부터 [0]까지 출력.
				count++;
		}

		//출력
		for(int k=i-1;k>0;k--){
			System.out.print(arr[k]);
			if(k%4 == 0){
				System.out.print(money[count]+" ");
				count--;
			}
		}

 

▶ 출력 결과

2,147,483,647 -> 21억 4748만 3647원

 

728x90
반응형
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
반응형

+ Recent posts