데이터융합 JAVA응용 SW개발자 기업 채용연계 연수과정 39일차 강의 정리

misung·2022년 5월 9일
0

JSP

실습

선언자 (declaration)

html 코드 파트 밖, 위에다 선언

<%!
	public int i;

	public int add(int n1, int n2) {
		return n1 + n2;
	}
%>

<%
	int j = 1;

	i++;
	j++;
	
	int result = add(7, 8);
	double rn = Math.random();
%>

html body 파트

i의 값 : <%= i %> <br>
j의 값 : <%= j %> <br>
result의 값 : <%= result %> <br>
난수값: <%=rn %>

페이지 요청을 새로 보낼때마다 i와 result, 난수값이 바뀌는 것을 볼 수 있다.

그리고 i의 경우 declaration에 선언되어 있어서 요청을 매번 보내더라도 값이 새로이 생성되지 않고 이전에 들고 있던 값이 유지된다.

실습 문제 1.

ArrayList를 생성해서 1 ~ 45범위의 난수 6개를 리스트에 저장하세요.
중복은 발생하면 안됩니다. 중복 방지 로직을 세워서 리스트에 난수를 삽입한 후
body태그에 리스트 내부의 값을 출력해 주세요.
난수 생성은 Random객체든, Math.random()이든 상관 없습니다.

<%@page import="java.util.Comparator"%>
<%@page import="java.util.ArrayList"%>
<%@page import="java.util.Random"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <%--
      - ArrayList를 생성해서 1 ~ 45범위의 난수 6개를 리스트에 저장하세요.
       중복은 발생하면 안됩니다. 중복 방지 로직을 세워서 리스트에 난수를 삽입한 후
       body태그에 리스트 내부의 값을 출력해 주세요.
       난수 생성은 Random객체든, Math.random()이든 상관 없습니다.
   --%>
   <%
   		Random rnd = new Random();
   		ArrayList<Integer> arr = new ArrayList<Integer>();
   		int count = 0;
   		
   		while (count < 5) {
   			if (arr.size() == 0) {
   				arr.add(rnd.nextInt(45) + 1);
   			} else {
   				boolean isDup = false;
   				
   				while (true) {
   					int pickedNum = rnd.nextInt(45) + 1;
   	   				
   					for (int i = 0; i < arr.size(); i++) {
   						if (pickedNum == arr.get(i)) {
   							isDup = true;
   							break;
   						}
   					}
   					
   					if (!isDup) {
   						arr.add(pickedNum);
   						break;	
   					}
   					else if (isDup)
   						isDup = false;
   				}
   				
   				count++;
   			}
   		}
   		
   		arr.sort(Comparator.naturalOrder());
   %>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>로또 번호 생성 결과!</h1>
	<p>이번 주 로또 번호는 이 번호다!!!<br>
	<%
		for (int i = 0; i < arr.size(); i++) {
			out.print(arr.get(i) + " ");		
		}
	%>
	</p>
</body>
</html>


실행 시 값이 계속 변경되는 것을 확인할 수 있다.

실습 문제 2.

사전 정보

<%@page import="java.util.ArrayList"%>
<%@page import="java.util.List"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
    
    <%!
       List<String> party = new ArrayList<>();
       //사진 파일명이 인덱스 번호로 되어 있기 때문에
       //따로 인덱스 번호만 모아놓은 리스트를 하나 더 생성하겠습니다.
       List<Integer> jobNumber = new ArrayList<>();
    %>
    
    <%
       String[] jobs = {"전사", "도적", "사냥꾼", "마법사", "사제"};
    
    /*
   - 직업 개수만큼의 정수 난수를 발생시켜 주세요. (0 ~ 4)
   - 발생된 난수의 번호대로 party라는 리스트를 선언하셔서 직업을 추가해 주세요.
    직업은 계속 누적되어야 합니다. (10명까지)
    
   - party라는 list에 현재 선택된 직업이 몇 개 존재하는지 확인하는 작업이
    필요합니다.
    
   - 반복문으로 list를 순회하여, 현재 선택된 직업의 문자열과, party라는 리스트에
   들어있는 문자열 중에 같은 문자열이 발견될 때마다 숫자를 세서
   브라우저에 표현해 주시면 되겠습니다.
   */
    
    
    %>
    
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>

   <%--
      <img>태그를 사용하여 각 직업에 맞는 사진을 띄워 주세요.
       당신의 역할: 가로 40px, 세로 40px
       
      파티원을 표시하는 사진 -> 가로 세로 20px
      
      현재 파티 구성에는 party라는 list를 반복문으로 순회하여 
      해당 직업의 인덱스 번호를 모아놓은 리스트를 따로 구성해 주세요.
      그 직업번호 리스트에 맞춰서 사진을 img태그로 반복해서 넣어주시면 됩니다.
      
      그리고, 파티원이 10명이 되었을 경우 리스트를 비워 주시면 되겠습니다.
    --%>
    
    
    


</body>
</html>

코드와 결과

<%@page import="java.util.ArrayList"%>
<%@page import="java.util.Random"%>
<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<!-- 요청이 여러 번 들어와도 유지할 값을 선언할 부분 -->
<%! 
	ArrayList<String> party = new ArrayList<>();
	ArrayList<Integer> jobIndex = new ArrayList<>();
	Random rnd = new Random();
	
	public int jobCompare(String jobName, ArrayList<String> party) {
		int jobCount = 0;
		
		for (int i = 0; i < party.size(); i++) {
			if (party.get(i).equals(jobName)) {
				jobCount++;
			}
		}
		return jobCount;
	}
%>
<!-- 요청이 들어올 때 마다 실행할 부분 -->
<%
	String[] jobs = {"전사", "도적", "사냥꾼", "마법사", "사제"};
	
	int job = rnd.nextInt(4);
	
	if (party.size() == 10) {
		party.clear();
		jobIndex.clear();
	}
	party.add(jobs[job]);
	jobIndex.add(job);
%>
<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>Insert title here</title>
</head>
<body>
	<h1>당신의 역할</h1>
	<%
		int jobCount = jobCompare(jobs[job], party);
	
		out.print("<p><img src=./img/" + job + ".png width=\"40px\" height=\"40px\">");
		out.print("당신에게 부여된 역할은 <b>" + jobs[job] + "</b> 입니다.<br>");
		out.print("현재 파티에 당신과 같은 역할을 가진 플레이어는 당신 포함 " + jobCount + "명 입니다.</p>");
	%>
	현재 파티 구성<br>
	<%
		for (int i = 0; i < jobIndex.size(); i++) {
			out.print("<img src=./img/" + jobIndex.get(i) + ".png width=\"20px\" height=\"20px\">");
		}
		out.print("(" + party.size() + "명 참가 중)");		
	%>
</body>
</html>


0개의 댓글