먼저 전에 올렸던 행렬의 곱은 한페이지내에서 사용자한테 ㅁxㅁ 행렬 인지만 받아와서 배열을 생성하고 각 배열마다 cnt로 값을 넣어 주어서 출력을 했었습니다.
오늘 수업시간에 한 것을 토대로 jsp-jsp 를 보내는 식으로 만들었습니다.
first.jsp |
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!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=EUC-KR">
<title>행렬 값받기-1</title>
</head>
<body>
<form name="inputHang" method="get" action="sec.jsp">
<table bordr=1 width=500 cellpadding=5>
<tr><td><input type="text" name="inpNum1">*<input type="text" name="inpNum2">행렬</td></tr>
<tr><td><input type="text" name="inpNum3">*<input type="text" name="inpNum4">행렬</td></tr>
<tr><td><input type="submit" value="행렬 값집어넣기"></td></tr>
</table>
</form>
</body>
</html>
먼저 사용자한테 행렬의 크기를 받아와서 sec.jsp 페이지로 보내주었습니다.
sec.jsp |
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!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=EUC-KR">
<title>행렬 값 넣기-2</title>
</head>
<body>
<%!public void makeHang(String name, int q, int r, JspWriter out) throws Exception {
out.println("<table>");
for (int i = 0; i < q; i++) {
out.println("<tr>");
for (int j = 0; j < r; j++) {
out.println("<td>");
out.println("<input type='text' name='" + name + "[" + i + "][" + j + "]'>");
}
out.println("</tr>");
}
out.println("</table>");
}%>
<%
try {
if (request.getParameter("inpNum1") != "" && request.getParameter("inpNum1") != null
&& request.getParameter("inpNum2") != "" && request.getParameter("inpNum2") != null
&& request.getParameter("inpNum3") != "" && request.getParameter("inpNum3") != null
&& request.getParameter("inpNum4") != "" && request.getParameter("inpNum4") != null) {
int a = Integer.parseInt(request.getParameter("inpNum1"));
int b = Integer.parseInt(request.getParameter("inpNum2"));
int c = Integer.parseInt(request.getParameter("inpNum3"));
int d = Integer.parseInt(request.getParameter("inpNum4"));
if (b != c) {
out.println("<script>alert('b와 c의 값이 다릅니다.');history.back();</script>");
} else {
%>
<form name="inputNumber" method="get" action="third.jsp">
A행렬
<%
makeHang("A", a, b, out);
%>
B행렬
<%
makeHang("B", c, d, out);
%>
<input type="hidden" name="a" value="<%=a%>"> <input
type="hidden" name="b" value="<%=b%>"> <input type="hidden"
name="c" value="<%=c%>"> <input type="hidden" name="d"
value="<%=d%>"> <input type="submit" value="곱하기">
</form>
<%
}
} else {
out.println("<script>alert('빈 칸이 있습니다. 숫자를 입력하세요.');history.back();</script>");
}
} catch (Exception e) {
out.println("<script>alert('숫자 이외의 것을 입력했습니다.');history.back();</script>");
}
%>
</body>
</html>
두번째 페이지 에서는 먼저 makeHang라는 함수에서 앞에서 받아온 값인 inpNum1~inpNum4을 사용해 각 행렬 마다 테이블 형식으로 만들어주고 텍스트 박스를 만들어 각각의 name을 반복문으로 넣어줬습니다.
이후 예외 처리와 if ~ else 문을 사용하여 숫자가 아닐 경우에는 전페이지로
숫자일 경우에는 inpNum1~inpNum4을 int형 변수 a~d에 넣어주었습니다
그리고 다중if 를 사용해 b와 c가 같지 않을경우에도 전페이지로 돌려보내주었습니다.
form을 만들어 makeHang 함수를 실행시키고 hidden으로 전페이지에서 받아온 값을 third.jsp로 보내 주었습니다.
third.jsp |
<%@ page language="java" contentType="text/html; charset=EUC-KR"
pageEncoding="EUC-KR"%>
<!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=EUC-KR">
<title>행렬 곱</title>
</head>
<body>
<%!
public void getHang(int a[][], String name, int p, int q, HttpServletRequest request) {
for (int i = 0; i < p; i++) {
for (int j = 0; j < q; j++) {
a[i][j] = Integer.parseInt(request.getParameter(name+"["+i+"]["+j+"]"));
}
}
}
public void calculate(int a[][], int b[][], int c[][], int p, int q, int r, JspWriter out) throws Exception {
out.println("<table>");
for (int i = 0; i < p; i++) {
out.println("<tr>");
for (int j = 0; j < q; j++) {
out.println("<td>");
for (int k = 0; k < r; k++) {
c[i][j] += a[i][k] * b[k][j];
}
out.println(c[i][j]);
out.println("</td>");
}
out.println("</tr>");
}
out.println("</table>");
}
public void showHang(int a[][], int p, int q, String hangName, JspWriter out) throws Exception {
out.println(hangName);
out.println("<table>");
for (int i = 0; i < p; i++) {
out.println("<tr>");
for (int j = 0; j < q; j++) {
out.println("<td>");
out.println(a[i][j]);
out.println("</td>");
}
out.println("</tr>");
}
out.println("</table>");
}%>
<%
int a = Integer.parseInt(request.getParameter("a"));
int b = Integer.parseInt(request.getParameter("b"));
int c = Integer.parseInt(request.getParameter("c"));
int d = Integer.parseInt(request.getParameter("d"));
int[][] hangA = new int[a][b];
int[][] hangB = new int[c][d];
int[][] hangC = new int[a][d];
getHang(hangA, "A", a, b, request);
getHang(hangB, "B", c, d, request);
%>
<form>
<%
showHang(hangA, a, b, "hangA", out);
showHang(hangB, c, d, "hangB", out);
%>
hangC(hangA*hangB)
<%
calculate(hangA, hangB, hangC, a, d, b, out);
%>
</form>
</body>
</html>
마지막 페이지에서는 getHang함수로 sec페이지에서 만들어논 배열을 불러와 이페이지에서 만든 hangA,hangB에 넣어주었습니다.
calculate 함수는 hangA와 hangB의 곱 을 hangC에다 넣어주고 출력까지 해주는 함수입니다.
showHang함수는 사용자가 만든 hangA와 hangB를 출력시켜주기 위해 만들었습니다
댓글