MSM8994의 화룡점정 블로그

[JSP] 1부터 N까지의 자연수, 홀수, 짝수 합 구하기 본문

코딩

[JSP] 1부터 N까지의 자연수, 홀수, 짝수 합 구하기

msm8994 2018. 7. 30. 16:30

오늘은 1부터 N까지의 자연수, 홀수, 짝수 합을 구하는 방법을 알려드리겠습니다.


매개변수 전달방법

먼저 매개변수를 전달하려면 페이지 주소 뒤에 ?num=10 이렇게 전달하시면 GET 방식입니다.
여기서는 괜찮으니 이렇게 불러오도록 하죠. 

(파일이름).jsp?num=10

이렇게 주소칸에 적으시면 됩니다.



본격적인 코딩 시작

혹시나 모르니 UTF-8 인코딩으로 매개변수를 읽으시구요.

request.setCharacterEncoding("UTF-8");


num매개변수를 쓰겠다고 했으니 이것을 strNum으로 읽어온 다음 parseInt(strNum)한 수를 num에 기억합니다.
단, 못 읽어왔을때 진행해서는 안되므로 초기값은 -1로 설정해둡니다.

String strNum = request.getParameter("num"); // num이라는 매개변수를 strNum으로 가져옴
int num = -1;//누적시킬 값의 목적값을 -1로 초기화. 
if(strNum != null){ // null이 아닌 문자열로써 parseInt가 가능한 경우
	try{
		strNum = strNum.trim(); // 앞뒤 공백 제거
		num = Integer.parseInt(strNum); // strNum 문자열을 정수로 변환
	}catch (NumberFormatException nfe){
        //그래도 수가 아닌 문자열이 들어올 수 있으니 예외는 잡아주자.
		nfe.printStackTrace();
	}
}


반복하는 코드는 한 번만 설명할게요. 홀수는 1부터 2씩 더한 수, 짝수는 2부터 2씩 더한 수로 반복을 진행하면 됩니다.

%><h2>1부터 <%=num%>까지 자연수 합</h2><%
		int sum = 0;// 누계 초기화
		boolean sumPlus = false;// + 표시를 앞에 붙일지 말지 결정할 플래그
		for(int i = 1; i <= num; i++){
			// 더할값은 1부터 num까지 1씩 증가
			if(sumPlus){
				// 플래그가 올려져 있으면 +를 붙인다
				%>+<%
			}else{
				// 플래그가 내려가 플래그를 올린다.
				sumPlus = true;
			}
			// i 값 표시
			%><%=i %><%
			//sum에 i 누적
			sum += i;
		}
		// sum 값(누계) 표시
		%>=<%=sum%><br /><%
sumPlus는 수 앞에 + 기호를 붙일지 말지를 결정하는 플래그입니다. 이 값이 내려가있을 땐 플래그를 올리기만 하고, 올려져있으면 + 기호를 표시하도록 합니다. 처음에 왔을 땐 내려진 플래그를 올리기만 하므로 맨 처음에 +는 표시되지 않습니다.
i 값은 N(num)까지 계속해서 증가하면서 표시되고, 또한 누계(sum)와 더할 수입니다.
sum은 지금까지 더한 수들이 누적될 합계 변수입니다. 

JSP 하시는 분들은 <% /*자바코드*/ %> <%=변수 또는 반환값이 있는 함수() %> <%! /*멤버변수 또는 메소드() 선언 */ %> 이 무엇인지 알고 계실겁니다. 따로 설명은 하지 않겠습니다.

if를 통해 0보다 큰 경우에나 계산을 하도록 했으므로 아닌 경우엔 입력된 매개변수(num 매개변수가 strNum으로 가져왔으므로)가 잘못되었다고 전해줍니다.
else{
    %>잘못된 수가 입력되었습니다: <%=strNum %> <%
}


수고하셨습니다. 이제 실행해보시면 될 것 같네요.



결과

num으로 10 전달하면 나오는 결과



전체 소스코드
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>1부터 N까지 자연수 홀수 짝수 합</title>
</head>
<body>
<%
	request.setCharacterEncoding("UTF-8"); // utf-8 매개변수 인코딩
	
	String strNum = request.getParameter("num"); // num이라는 매개변수를 strNum으로 가져옴
	int num = -1;//누적시킬 값의 목적값을 -1로 초기화. 
	if(strNum != null){ // null이 아닌 문자열로써 parseInt가 가능한 경우
		try{
			strNum = strNum.trim(); // 앞뒤 공백 제거
			num = Integer.parseInt(strNum); // strNum 문자열을 정수로 변환
		}catch (NumberFormatException nfe){
			nfe.printStackTrace();
		}
	}
	
	if(num > 0){
		%><h2>1부터 <%=num%>까지 자연수 합</h2><%
		int sum = 0;// 누계 초기화
		boolean sumPlus = false;// + 표시를 앞에 붙일지 말지 결정할 플래그
		for(int i = 1; i <= num; i++){
			// 더할값은 1부터 num까지 1씩 증가
			if(sumPlus){
				// 플래그가 올려져 있으면 +를 붙인다
				%>+<%
			}else{
				// 플래그가 내려가 플래그를 올린다.
				sumPlus = true;
			}
			// i 값 표시
			%><%=i %><%
			//sum에 i 누적
			sum += i;
		}
		// sum 값(누계) 표시
		%>=<%=sum%><br /><%
				
				
				
		%><h2>1부터 <%=num%>까지 홀수 합</h2><%
		int sumOdd = 0;
		boolean sumOddPlus = false;
		for(int i = 1; i <= num; i+=2){
			// 더할 값은 1부터 num까지 2씩 증가
			if(sumOddPlus){
				%>+<%
			}else{
				sumOddPlus = true;
			}
			%><%=i %><%
			sumOdd += i;
		}
		%>=<%=sumOdd%><br /><%
				
				
				
		%><h2>1부터 <%=num%>까지 짝수 합</h2><%
		int sumEven = 0;
		boolean sumEvenPlus = false;
		for(int i = 2; i <= num; i+=2){
			// 더할 값은 2부터 num까지 2씩 증가
			if(sumEvenPlus){
				%>+<%
			}else{
				sumEvenPlus = true;
			}
			%><%=i %><%
			sumEven += i;
		}
		%>=<%=sumEven%><br /><%
	}else{
		%>잘못된 수가 입력되었습니다: <%=strNum %> <%
	}
%>
</body>
</html>


Comments