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에 선언되어 있어서 요청을 매번 보내더라도 값이 새로이 생성되지 않고 이전에 들고 있던 값이 유지된다.
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>
실행 시 값이 계속 변경되는 것을 확인할 수 있다.
사전 정보
<%@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>