티스토리 뷰

반응형

목표: 마지막 페이지 구하기

JavaConsole 전체 코드

/* NoticeConsole.java */
package com.newlecture.app.console;

import java.sql.SQLException;
import java.util.List;
import java.util.Scanner;

import com.newlecture.app.entity.Notice;
import com.newlecture.app.service.NoticeService;

public class NoticeConsole {
	
	private NoticeService service;
	/* page를 가질 수있는 상태변수 page추가*/
	private int page;
	/* page내의 개시글 개수 - 계속해서 변하기 때문에 전역변수로 구하는 것은 바람직하지 X*/
	//private int count;
	
	public NoticeConsole() {
		service = new NoticeService();
		page=1;
		//count=0;
	}
	
	/* 내용 UI*/
	public void printNoticeList() throws ClassNotFoundException, SQLException {
		List<Notice> list = service.getList(page);
		int count = service.getCount();	//현제 대이터베이스의 테이블에 몇개의 개시글이 있는지
		int lastPage = count/10;	//100 -> 10, 90 -> 9, 93 -> 9
		lastPage = count%10 == 0?lastPage:lastPage+1;	//나머지가 0이면 그대로, 아니면 +1
		
		System.out.println("──────────────────────────────────────");
		System.out.printf("<공지사항> 총 %d 게시글\n", count);	//게시글수
		System.out.println("──────────────────────────────────────");
		
		for(Notice n : list) {
		System.out.printf("%d. %s / %s / %s\n",
							n.getId(),
							n.getTitle(),
							n.getWriterId(),
							n.getRegDate());
		
		}
		System.out.println("──────────────────────────────────────");
		System.out.printf("         %d/%d pages \n", page, lastPage);
		
		
	}

	/* 메뉴 UI*/
	public int inputNoticeMenu() {
		Scanner scan = new Scanner(System.in);
		
		System.out.printf("1. 상세조회/ 2.이전/ 3.다음/ 4.글쓰기 / 5.종료 >");
		String menu_ = scan.nextLine();
		int menu = Integer.parseInt(menu_);
		
		return menu;
		
	}
	
	/*이전목록으로 돌아가는 함수 구현*/
	public void movePrevList() {
		if(page == 1) {	//1페이지 일경우 이전페이지없음 조건검사
			System.out.println("==================");
			System.out.println("[이전 페이지가 없습니다.]");
			System.out.println("==================");
			return;
		}
		page--;
	}

	/*다음목록으로 돌아가는 함수 구현*/
	public void moveNextList() throws ClassNotFoundException, SQLException {
		/* 전역변수로 쓰는게 아니라 여기서 값을 다시 호출해서 받아와야한다. 그사이에 값이 또 변경될 수도 있다.*/
		int count = service.getCount();	//현제 대이터베이스의 테이블에 몇개의 개시글이 있는지
		int lastPage = count/10;	//100 -> 10, 90 -> 9, 93 -> 9
		lastPage = count%10 == 0?lastPage:lastPage+1;	//나머지가 0이면 그대로, 아니면 +1
		
		
		if(page == lastPage) {	//현제 페이지가 마지막 페이지인지 조건검사
			System.out.println("==================");
			System.out.println(" [마지막 페이지입니다.]");
			System.out.println("==================");
			page = lastPage;
		}
		
		else page++;
	}
}

 

NoticeConsole 코드 수정 부분

public class NoticeConsole {
	
	private NoticeService service;
	/* page를 가질 수있는 상태변수 page추가*/
	private int page;
	/* page내의 개시글 개수 - 계속해서 변하기 때문에 전역변수로 구하는 것은 바람직하지 X*/
	//private int count;
	
	public NoticeConsole() {
		service = new NoticeService();
		page=1;
		//count=0;
	}
	
	/* 내용 UI*/
	public void printNoticeList() throws ClassNotFoundException, SQLException {
		List<Notice> list = service.getList(page);
		int count = service.getCount();	//현제 대이터베이스의 테이블에 몇개의 개시글이 있는지
		int lastPage = count/10;	//100 -> 10, 90 -> 9, 93 -> 9
		lastPage = count%10 == 0?lastPage:lastPage+1;	//나머지가 0이면 그대로, 아니면 +1
		
		System.out.println("──────────────────────────────────────");
		System.out.printf("<공지사항> 총 %d 게시글\n", count);	//게시글수
		System.out.println("──────────────────────────────────────");
		
		for(Notice n : list) {
		System.out.printf("%d. %s / %s / %s\n",
							n.getId(),
							n.getTitle(),
							n.getWriterId(),
							n.getRegDate());
		
		}
		System.out.println("──────────────────────────────────────");
		System.out.printf("         %d/%d pages \n", page, lastPage);
		
		
	}

전역변수로 선언했던 count를 없애고 지역변수로 추가
-> 계속해서 변하는 값이기 때문에 전역변수로 사용하면 안됨.
lastPage의 값을 두줄의 알고리즘을 이용해서 구현

 

/*다음목록으로 돌아가는 함수 구현*/
	public void moveNextList() throws ClassNotFoundException, SQLException {
		/* 전역변수로 쓰는게 아니라 여기서 값을 다시 호출해서 받아와야한다. 그사이에 값이 또 변경될 수도 있다.*/
		int count = service.getCount();	//현제 대이터베이스의 테이블에 몇개의 개시글이 있는지
		int lastPage = count/10;	//100 -> 10, 90 -> 9, 93 -> 9
		lastPage = count%10 == 0?lastPage:lastPage+1;	//나머지가 0이면 그대로, 아니면 +1
		
		
		if(page == lastPage) {	//현제 페이지가 마지막 페이지인지 조건검사
			System.out.println("==================");
			System.out.println(" [마지막 페이지입니다.]");
			System.out.println("==================");
			page = lastPage;
		}
		
		else page++;
		
	}

전역변수가  없고, 계속해서 변하는 값이기 때문에 count 다시 지역변수로 선언하고 lastPage를 구하는 함수 구현
마지막 페이지일 경우 오류 호출 및 페이지 고정, 아니면 다음 페이지로 

 

마지막 페이지 구현 후

총 게시글 15개로 -> 전체 2페이지
1페이지 10개 , 2페이지 5개
마지막 페이지에서 다음 페이지 전달시 오류 발생 및 페이지 고정

반응형
댓글
공지사항