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번째 만에 맞췄습니다.
//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;
}
}
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까지의 수가 아닙니다.");
}
}
}