반응형
1~5 사이에 있는 임의의 수를 키보드로 부터 입력해서 몇 번만에 맞추는 지알아보는 프로그램을 작성하시오.
import java.util.Arrays;
import java.util.Scanner;

public class Sample1 {
	public static void main(String[] args) {
		// 1~5 사이에 있는 임의의 수를 키보드로 부터 입력해서 몇 번만에 맞추는 지알아보는 프로그램을 작성하시오.
		System.out.print("1~5 사이의 수를 입력하세요: ");
		int com = (int)(Math.random()*5+1);
		
		Scanner sc = new Scanner(System.in);
		int i = 1;
		
		while(sc.hasNext()) {
			
			int input = sc.nextInt();
			if(input == com) {
				System.out.println(i + "번째 만에 맞췄습니다.");
				break;
			}else {
				System.out.println("틀렸습니다. 다시 입력해주세요");
			}
			i++;			
		}
	}
}
1~5 사이의 수를 입력하세요: 1
틀렸습니다. 다시 입력해주세요
2
틀렸습니다. 다시 입력해주세요
3
틀렸습니다. 다시 입력해주세요
4
틀렸습니다. 다시 입력해주세요
5
5번째 만에 맞췄습니다.

'Study > JAVA' 카테고리의 다른 글

[Java] 접근제어자  (0) 2020.06.18
[JAVA] 재귀함수  (0) 2020.06.15
[JAVA] 조건문 문제풀기  (0) 2020.06.15
[Java] 조건문  (0) 2020.06.10
[Java] Arrays 클래스  (0) 2020.06.08
반응형
1. 로또 추첨 번호를 예상하는 프로그램을 작성하세요
-임의의 숫자를 1에서 45까지의 수를 총 6개 추첨하여 당첨번호를 구한다. 
-중복된 숫자는 있으면 안된다. 
import java.util.Arrays;
import java.util.Scanner;

public class Sample1 {
	public static void main(String[] args) {
			
		int[] target = new int[6];
		for(int i = 0; i<6; i++) {
			target[i] = (int)(Math.random()*45)+1;
			if(i > 0) {
				//중복된 번호가 있는지 확인
				for(int j = 0; j < i; j++) {
					if(target[i] == target[j]) {
						i--; //중복일 겨웅 배열 번호를 이전으로 되돌려서 다시 번호 선택하도록 처리
						
						break;
					}				
				}
			}
		}
		//추첨번화 출력
		System.out.print(Arrays.toString(target));
[42, 18, 24, 22, 43, 8]

 

'Study > JAVA' 카테고리의 다른 글

[JAVA] 재귀함수  (0) 2020.06.15
[Java] 조건문 문제풀기-2  (0) 2020.06.15
[Java] 조건문  (0) 2020.06.10
[Java] Arrays 클래스  (0) 2020.06.08
[Java] splite()메소드  (0) 2020.06.07
반응형
	//Notice페이지 호출하는 메소드
	public Notice getNotice(int id) {
		String sql = "SELECT * FROM NOTICE WHERE ID =?";
		return null;
	}
	public Notice getNextNotice(int id) {
		return null;
	}
	public Notice getPrevNotice(int id) {
		return null;
	}	

NOTICE 페이지를 호출하는 메소드들을 구해보자>

먼저 Notice의 전체 내용을 출력하는 sql문은 어렵지 않으므로 바로 구현했다. 
이번 시간에는 현재 주어진id로 다음 글을 달라고 요구하는 sql문을 작성해보자 

 

->게시글은 언제든 삭제될 수 있기에 ID값은 항상 연속되지 않음을 인지해야한다. 
다음 글을 얻기 위해서는 다음글에 해당하는ID를 얻어야 한다. 
그 ID를 얻기 위해서는 3번(임의의 기준)에 해당되는 게시글의 REGDATE보다 큰 REGDATE을 갖고 있는 게시글을 한정해서 ID 리스트를 뽑아야 하겠다.

 

-> 5번 ID는 구해진 목록의 첫번째에 해당해야 할 텐데 그 방법은 ROWNUM을 활용하면 된다.
그러기 위해선 구해진 목록을 뒤집어야한다. (기존 역정렬을 순차정렬로) 

->3번 ID의 REDGATE보다 큰 REGDATE를 가진 ID(여기선 4번) 을 가져오는 식을 만들어보자.

->이를 통해 다음 ID값을 구하게 됐다. 이 식을 서브쿼리로 쓰는, ID 4의 모든 정보를 출력하는 쿼리문을 작성하자

 

===NoticeService.java===

	public Notice getNextNotice(int id) {
		String sql ="SELECT * FROM NOTICE " + 
				"    WHERE ID = (  " + 
				"        SELECT ID FROM NOTICE " + 
				"        WHERE REGDATE >(SELECT REGDATE FROM NOTICE WHERE ID = 3) " + 
				"        AND ROWNUM =1 " + 
				"        )";		
		return null;
	}

 

===NoticeService.java 전체코드===

package com.mybulletin.web.service;

import java.util.List;

import com.mybulletin.web.entity.Notice;

public class NoticeService {
	
	//페이지 요청 메소드
	public List<Notice> getNoticeList(){
		return getNoticeList("title", "", 1);
	}
	public List<Notice> getNoticeList(int page){
		return getNoticeList("title", "", page);
	}
	public List<Notice> getNoticeList(String field, String query, int page){
		String sql = "SELECT * FROM ( " + 
				"    SELECT ROWNUM NUM, NOTICE.* " + 
				"    FROM NOTICE ORDER BY REGDATE DESC " + 
				"    ) " + 
				"WHERE NUM BETWEEN 6 AND 10" ;
		
		return null;
	}

	//Notice수 구하는 메소드
	public int getNoticeCount() {
		return getNoticeCount("title", "");	
	}
	
	public int getNoticeCount(String field, String query) {
		return 0;	
	}
	
	//Notice페이지 호출하는 메소드
	public Notice getNotice(int id) {
		String sql = "SELECT * FROM NOTICE WHERE ID =?";
		return null;
	}
	public Notice getNextNotice(int id) {
		String sql ="SELECT * FROM NOTICE " + 
				"    WHERE ID = (  " + 
				"        SELECT ID FROM NOTICE " + 
				"        WHERE REGDATE >(SELECT REGDATE FROM NOTICE WHERE ID = 3) " + 
				"        AND ROWNUM =1 " + 
				"        )";		
		return null;
	}
	public Notice getPrevNotice(int id) {
		return null;
	}	
}

 

반응형


전체
 레코드에서 순차적으로 5개를 꺼내려하는데 기준이 필요하다.
오라클에선 테이블에서 조회를   결과집합을 만들면서 ROWNUM 추가해준다.

->이게 ROWNUM이다!

1-5 사이의 ROWNUM을 구한다면?

6-10 사이의 ROWNUM을 구한다면?

->아무 데이터도 뜨지 않는다. 

2부터 시작해도 역시 것도 뜨지 않는다. 
ROWNUM은 결과집합을 만들때 먼저 생성되므로 1이 아닌 값이 들어가면 조건에 맞지 않는다고 판단해서 빼버리기 때문이다. 
때문에 ROWNUM을 활용하려면 ROWNUMDL 원래 존재한 녀석인것 처럼 미리 만들어서 활용해야 한다. 

 

*는 모든것을 출력하는 것을 의미하기에 다른것과 함께 쓸 수 없다. 

하지만 NOTICE.* 라고 쓰면 NOTICE의 모든것 이라고 한정할 수 있기에 다른 녀석이 들어갈 수 있는 여지가 생긴다. 

 

->여기서 첫번째 *은 더이상 NOTICE를 가르키지 않는다. NOTICE를 활용한 새로운 결과집합인 것이다. 

->1-5 의 결과는 나오지만 6-10의 결과는 안나온다. 그 이유는 두번째 ROWNUM은 첫번째 SELECT이 실항될 때 만들어지는 ROWNUM이기 때문이다. 

-> 그래서 안쪽 SELECT절의 ROWNUM 구분하기 위한 별칭이 필요하다.
이렇게 하면 6-10사이의 ROWNUM을 구할 수 있다.

반응형

1.if~else
홀짝을 구분하는 소스코드

import java.util.Arrays;
import java.util.Scanner;

public class Sample1 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.println("숫자를 입력하세요: ");
		while(sc.hasNext()) {
			int input = sc.nextInt();
			if(input %2 ==0) {
				System.out.println("짝수입니다.");
			}else {
				System.out.println("홀수입니다.");				
			}			
		}
	}
}
숫자를 입력하세요: 
3
홀수입니다.
4
짝수입니다.

2. if~else if
else if 문을 이용해서 홀짝 구분하고 break문으로 반복문 종료해보자

import java.util.Arrays;
import java.util.Scanner;

public class Sample1 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		System.out.println("숫자를 입력하세요: ");
		while(sc.hasNext()) {
			int input = sc.nextInt();
			if(input ==0 ) {
				System.out.println("프로그램을 종료합니다.");
				break;
			}else if(input %2 ==0) {
				System.out.println("짝수입니다.");
				break;
			}else{
				System.out.println("홀수입니다.");
				break;
			}			
		}
	}
}

3. switch ~ case
switch ~case문은 변수의 값이나 연산식이 비교값과 정학하게 일치하면 break문을 만나기 전까지 계속해서 실행문을 처리함. 어떤 조건의 결과와 case문의 비교값이 일치하여 실행문이 실행되면 break문을 만나기 전까지는 끝까지 실행됨. 그래서 case문 끝에는 꼭 break문을 적어줘야한다. 
또한 값이 없다면 default문의 실행문이 실행됨.

import java.util.Arrays;
import java.util.Scanner;

public class Sample1 {
	public static void main(String[] args) {
		int in = 5;
		
		switch(in) {
		case 10 :  System.out.println(10);
		case 9 :  System.out.println(9);
		case 8 :  System.out.println(8);
		case 7 :  System.out.println(7);
		case 6 :  System.out.println(6);
		case 5 :  System.out.println(5);
		case 4 :  System.out.println(4);
		case 3 :  System.out.println(3);
		case 2 :  System.out.println(2);
		case 1 :  System.out.println(1);
				break;
		default : System.out.println("1에서 10까지의 수가 아닙니다.");
		}
	}
}
5
4
3
2
1

case문에 값을 2개 이상 넣는 방법을 살펴보자

import java.util.Arrays;
import java.util.Scanner;

public class Sample1 {
	public static void main(String[] args) {
		int in = 5;
		
		switch(in) {
		case 10 :  
		case 9 :  
		case 8 :  
		case 7 : 
		case 6 :  
		case 5 :  System.out.println("홀수입니다.");
				  break;
		case 4 : 
		case 3 : 
		case 2 : 
		case 1 :  
				System.out.println(1);
				break;
		default : System.out.println("1에서 10까지의 수가 아닙니다.");
		}
	}
}
1에서 10까지의 수가 아닙니다.

자바 14에서 multi-label case문이 추가되어 여러개의 비교값ㅇ르 넣을 수 있게 됐다.

import java.util.Arrays;
import java.util.Scanner;

public class Sample1 {
	public static void main(String[] args) {
		int in = 5;
		
		switch(in) {
		case 1,3,5,7,9:
				System.out.println("홀수입니다.");
				break;
		case 2,4,6,8,10:
				System.out.println("짝수입니다.");
		        break;		
		default : System.out.println("1에서 10까지의 수가 아닙니다.");
		}
	}
}
홀수입니다.

 

'Study > JAVA' 카테고리의 다른 글

[Java] 조건문 문제풀기-2  (0) 2020.06.15
[JAVA] 조건문 문제풀기  (0) 2020.06.15
[Java] Arrays 클래스  (0) 2020.06.08
[Java] splite()메소드  (0) 2020.06.07
[Java] 반복문 - 문제풀이  (0) 2020.06.07

+ Recent posts