728x90

 

얕은 복사(shallow copy) & 깊은 복사(deep copy) 개념

https://rise-up.tistory.com/640

 

 

package confidence;

import java.util.Arrays;

public class D_array {

	public void shallowCopy() {

		int[] baseArr = {1,2,3,4,5};
		int[] copyArr = baseArr;

		System.out.println(baseArr); // [I@677327b6
		System.out.println(copyArr); // [I@677327b6
		
		// 원본 배열값 변경 후 주소값 확인해보기
		baseArr[4] = 10;
		for(int i=0; i<baseArr.length;i++) {
			System.out.print(baseArr[i] + " "); // 1 2 3 4 10
		}
		System.out.println();
		System.out.println(baseArr); // [I@677327b6
		System.out.println(copyArr); // [I@677327b6
		
		// 배열 값 출력하는 방법
		//  1)for문
		//  2)Arrays.toString()
		
		// 1)for문
//		int[] baseArr = {1,2,3,4,5};
//		for(int i=0; i<baseArr.length;i++) {
//			System.out.print(baseArr[i] + " "); // 1 2 3 4 5
//		}
		//  2)Arrays.toString()
		System.out.println(Arrays.toString(baseArr)); // [1, 2, 3, 4, 10]
		
		
		
	}
	
}

 

 

728x90
반응형
728x90

 

배열 선언 
배열 할당
배열 초기화 : 인덱스,중괄호,for문
배열 삭제 : null
배열 값 출력하는 방법 2가지 : for문, Arrays.toString()
배열 복사 : shallow copy & deep copy

 

코드 익히기 & 배운 것들


배열 크기 변경 불가(삭제하고 새로 만들기에 주소값이 변경됨)
배열 안 값이 최대길이보다 짧으면 값만큼만 출력되서 나옴(여분공간에 다른값x)
dArr[3] = 3; // 3.0으로 출력 -> 자동형변환(int to double) 
초기화 for문 방법은 int만 가능하나, 실수로 형변환 가능한 int면 for문 가능 -> int인 i가 실수로 변환 가능한 수이기에 

 

public void arrayPractice() {
    // 배열 선언 
    // 배열 할당
    // 배열 초기화 : 인덱스,중괄호,for문
    // 배열 삭제 : null
    // 배열 값 출력하는 방법 2가지 : for문, Arrays.toString()
    // 배열 복사 : shallow copy & deep copy
    //
    // 		배열 크기 변경 불가(삭제하고 새로 만들기에 주소값이 변경됨)
    //		배열 안 값이 최대길이보다 짧으면 값만큼만 출력되서 나옴(여분공간에 다른값x)
    //		dArr[3] = 3;	// 3.0으로 출력 -> 자동형변환(int to double) 
    // 		초기화 for문 방법은 int만 가능하나, 실수로 형변환 가능한 int면 for문 가능 -> int인 i가 실수로 변환 가능한 수이기에 
    // 		null인 배열값 확인 시, for문방법은 널포인트익셉션 쓰므로 Arrays.toString() 사용해야함

    //배열 선언
    String[] arr; // Stack 영역에 공간 생성

    //배열 할당
    String[] sArr1 = new String[3];
    String sArr2[] = new String[3];

    // 배열 초기화
    // 방법1 : 인덱스
    sArr1[0] = "a";
    sArr1[1] = "b";
    sArr1[2] = "c";

    // 방법2 : 중괄호 {} 이용
    // 선언과 동시에 초기화
//		sArr2 = {"a","b","c"}; // error : 중괄호 타입은 자료형부터 풀로 적어주는 형태에만 가능
    String[] sArr3 = {"a","b","c"};

    // 방법3 : for문
    // 배열이 int타입인 경우만 사용가능
    // 		double로 형변환 가능한 int면 for문 가능할까?  
    // 		가능. int인 i가 실수로 변환 가능한 수이기에
    int[] intArr = new int[5];
    for(int i=0; i < intArr.length;i++) {
        intArr[i] = i + 1;
    }
    for(int i=0; i < intArr.length; i++) {
        System.out.print(intArr[i]+" "); 	// 1 2 3 4 5
    }

    // 배열 삭제
    intArr = null;
    System.out.println(Arrays.toString(intArr)); // null

    // 배열 값 출력하는 방법
    //  1)for문
    //  2)Arrays.toString()

    // 1)for문
//		int[] baseArr = {1,2,3,4,5};
//		for(int i=0; i<baseArr.length;i++) {
//			System.out.print(baseArr[i] + " "); // 1 2 3 4 5
//		}
    //  2)Arrays.toString()
//		System.out.println(Arrays.toString(baseArr)); // [1, 2, 3, 4, 10]


/******************************practice 2nd ************************************/

    // 배열 선언
    char[] cArr;

    // 배열 할당
    char[] cArr1 = new char[3];
    char[] cArr2 = new char[3];

    // 배열 초기화(추가)
    // 방법1 : 인덱스
    cArr1[0] = 'a';
    cArr1[1] = 'b';
    cArr1[2] = 'c';
//		cArr1[3] = 'd';
//		System.out.println(Arrays.toString(cArr1));
    // 방법2 : 중괄호
    char[] cArr11 = {'a','b','c'};
    char[] cArr22 = {'ㄱ','ㄴ','다'};
    char[] cArr3 = {'a','b','c'};
    // 방법3 : for문
    // int배열만 사용가능
//		char[] cArr4 = new char[4];
//		for(int i=0; i < cArr4.length; i++) {
//			cArr4[i] = i + 1; // int배열만 사용가능하기에 error : Type mismatch: cannot convert from int to char
//			System.out.print(cArr4[i] + " ");
//		}

    int[] cArr4 = new int[4];
    for(int i=0; i < cArr4.length; i++) {
        cArr4[i] = i + 1;
        System.out.print(Arrays.toString(cArr4)+'\n'); // [1, 0, 0, 0][1, 2, 0, 0][1, 2, 3, 0][1, 2, 3, 4]
    }
    System.out.println(Arrays.toString(cArr4)); // [1, 2, 3, 4]

    // 배열 삭제
    cArr4 = null; 
    System.out.println(Arrays.toString(cArr4));
    System.out.println(Arrays.toString(cArr3));
    cArr3 = null;
    System.out.println(Arrays.toString(cArr3));


System.out.println("===practice 3rd===");		


/******************************practice 3rd ************************************/
    // 배열 선언
    float[] fArr;
    float[] floatArr;	// Stack 영역에 공간 생성

    // 배열 할당
    float[] fArr1 = new float[5];
    double[] dArr = new double[5];

    // 배열 초기화
    // 방법 1 : 인덱스
    dArr[0] = 0.1;
    dArr[1] = 0.2;
    dArr[2] = 3.0;
    dArr[3] = 3;	// 3.0으로 출력 -> 자동형변환
    System.out.println(Arrays.toString(dArr));

    // 방법2 : 중괄호
    double[] dArr2 = {0.1,0.2,0.3};
    System.out.println(Arrays.toString(dArr2)); // [0.1, 0.2, 0.3] -> 배열 안 값이 최대길이보다 짧으면 값만큼만 출력되서 나옴(여분공간에 다른값x)
    // 방법3 : for문
    double[] dArr3 = new double[3];
    // double로 형변환 가능한 int면 for문 가능할까?  
    // 가능. int인 i가 실수로 변환 가능한 수이기에
    for(int i=0; i < dArr3.length; i++) {
        dArr3[i] = i + 1;
        System.out.print(dArr3[i]+" "); // 1.0 2.0 3.0 
    }
    System.out.println();


    dArr3 = null;
//		for(int i = 0; i < dArr3.length; i++) {
//			System.out.println(dArr3); // null인 배열값 확인 시, for문방법은 널포인트익셉션 쓰므로 Arrays.toString() 사용해야함
//		}
    System.out.println(Arrays.toString(dArr3)); // null


}
728x90
반응형
728x90

 

주말이라 시간이 좀 나서 만져봤는데

런이 여전히 안된다

jdk가 없다는데 run의 configuration에 가서 jdk는 설정이 되는데

메인클래스 설정할려고 해도 안먹히고 빨간글씨가 떠서 안된다고 나온다

또한 아래그림 표시처럼 가운데 코드가 이클립스랑 애초에 다르게 나온다. 주석도 안나오고

 

구글링해서 프로젝트 세팅에 들어가서  프로젝트랑 모듈의 jdk 설정도 해보고

invalid cache restart도 해보고 했는데 안된다

뭐가 문제일까....

또 시간 되는데로 만져보자

 

728x90
반응형
728x90

 

학원에서는 대부분 이클립스로 코딩을 시작하는데

스프링 때 STS사용해야하니 마냥 나쁘지는 않은데, 요새 대부분 인텔리제이를 IDE로 사용하니까

조금씩 UI부터 익숙해지고자 가볍게 사용 시작!!

 

너무 스트레스 받지 말고 새로운 곳을 탐험한다는 느낌으로 둘러본다는 느낌으로 여유있게 가자!!

 

 

Alt + 1: 프로젝트창 열고 닫기

Ctrl + Tab : 옆 파일로 이동하기

 

 

728x90
반응형
728x90

 

스캐너로 1-9 사이 양수를 받아

해당 수의 구구단을 출력하기

 

1-9외에 입력이 들어오면 1-9사이 정수만 입력하라는 문자를 출력하고

1-9가 들어오면 num1 변수를 가지고 for문 반복으로 구구단 출력

public void while_03() {
    // 1-9 사이 수를 입력 받아 구구단 출력
    Scanner sc = new Scanner(System.in);
    System.out.println("1-9 정수입력 : ");
    int num1 = sc.nextInt();

    if(num1 < 1 || num1 > 9 ) {
        System.out.println("1-9 정수입력만 입력가능");
    }else {
        for(int i=1; i < 10; i++) {
            System.out.println(num1+" x "+i+" = "+num1*i);
        }
    }
}
728x90
반응형
728x90

 

 

파일첨부 프론트단 로직 부분

반복해서 써봐야겠다

또한 백단으로 보내는 줄바꿈 내용도 손으로 자동으로 나오게끔

코딩 반복 ㄱㄱ!!

 

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>
<%@ taglib prefix="fn" uri="http://java.sun.com/jsp/jstl/functions" %>

<!DOCTYPE html>
<html>
<head>
<meta charset="UTF-8">
<title>prac</title>

<style type="text/css">
	#boardDetailTable{ width:800px; margin:auto; border-collapse:collapse; border-left:hidden; border-right:hidden;}
	#boardDetailTable tr td{ padding: 5px;}
	.replyTable{margin: auto; width:500px;}
</style>

</head>
<body>
	<c:import url="../common/menubar.jsp"/>
	
	<h1 align="center">${board.boardId }글의 상세보기</h1>
	<form action="bupView.bo" method="post">
		<table border="1" id="boardDetailTable">
			<tr>
				<th>번호</th>
				<td>
					${board.boardId }
					<input type="hidden" value="${ board.boardId }" name="boardId">
					<input type="hidden" value="${ page }" name="page">
				</td>
			</tr>
			<tr>
				<th>제목</th>
				<td>
					${ board.boardTitle }
					<input type="hidden" name="boardTitle" value="${ board.boardTitle }">
				</td>
			</tr>
			<tr>
				<th>작성자</th>
				<td>
					${ board.nickName }
					<input type="hidden" name="nickName" value="${ board.nickName }">
				</td>
			</tr>
			<tr>
				<th>작성날짜</th>
				<td>
					${ board.boardCreateDate }
				</td>
			</tr>
			<tr>
				<th>내용</th>
				<% pageContext.setAttribute("newLineChar","\r\n"); %>
				<td>
					${ fn:replace(board.boardContent, newLineChar, "<br>") }
					<input type="hidden" value="${ board.boardContent }" name="boardContent">
				</td>
			</tr>
			
			<c:if test="${ !empty board.originalFileName }">
				<tr>
					<th>첨부파일</th>
					<td>
						<a href="${pageContext.servletContext.contextPath }/resources/buploadFiles/${board.renameFileName}" download="${ board.originalFileName }">${ board.originalFileName }</a>
						<input type="hidden" name="originalFileName" value="${board.originalFileName }">
						<input type="hidden" name="renameFileName" value="${board.renameFileName }">
					</td>		
				</tr>
			</c:if>
			
			
		</table>
	</form>
	
	<p align="center">
		<button onclick="location.href='home.do'">시작 페이지 이동</button>
		<button onclick="location.href='${ blist }'">목록 보기로 이동</button>
	</p>



</body>
</html>
728x90
반응형
728x90

 

현재 페이지가 보이는 않는 번호 때문에

<c:if test="${ pn ne pi.currentPage }"> 조건을 추가한 코드가 추가 됐는데

음.. 알 듯 말 듯

현재페이지번호랑 시작 끝 번호로 만들어지는 인덱스번호랑 연관 관계가 아직 잘 몰르겠다

왜 같이 않으면 조건인지

 

<!-- 페이징 처리 -->
<tr align="center" height="20" id="buttonTab">
<td colspan="6">
    <!-- [이전] -->
    <c:if test="${pi.currentPage <= 1 }">
        [이전] &nbsp;
    </c:if>

    <c:if test="${ pi.currentPage > 1 }">
        <c:url var="before" value="blist.bo">
            <c:param name="page" value="${ pi.currentPage - 1 }"/>
        </c:url>
        <a href="${ before }">[이전]</a> &nbsp;
    </c:if>

    <!-- 페이지 번호 -->
    <c:forEach var="pn" begin="${pi.startPage }" end="${ pi.endPage }">
        <c:if test="${ pn eq pi.currentPage }">
            <font color="red" size="4"><b>[${ pn }]</b></font>
        </c:if>

        <c:if test="${ pn ne pi.currentPage }">
            <c:url var="paging" value="blist.bo">
                <c:param name="page" value="${ pn }"></c:param>
            </c:url>
            <a href="${ paging }">${ pn }</a>&nbsp;
        </c:if>
    </c:forEach>

 

728x90
반응형
728x90

 

이제 좀 페이지네이션 프론트코드를 좀 이해가 가는 듯

일단 첫수랑 끝수가 해당 조건 만족해야 나오는 다음 이전 버튼 하나 만들고

이전이면 1보다 현재번호가 크면 c:url과 c:param으로 페이지번호를 보내주면서 url주소이동시키는 c:if하나인 식

근데 아직 끝번호 쪽이랑 페이지번호 쪽 test속성 조건쪽이 잘 이해가 안간다

 

반복이 살 길이다!!

 

<tr align="center" height="20" id="buttonTab">
    <td colspan="6">
        <!-- [이전] -->
        <c:if test="${ pi.currentPage <= 1 }">
            [이전]
        </c:if>
        <c:if test="${ pi.currentPage > 1 }">
            <c:url var="before" value="blist.bo">
                <c:param name="page" value="${ pi.currentPage - 1 }"/>
            </c:url>
            <a href="${ before }">[이전]</a> &nbsp;
        </c:if>



        <!-- 페이지 번호 -->
        <c:forEach var="p" begin="${ pi.startPage }" end="${ pi.endPage }">
            <c:if test="${ p == pi.currentPage }">
                <font color="red" size="4"><b>[${ p }]</b></font>
            </c:if>

            <c:if test="${ p != pi.currentPage }">
                <c:url var="pagination" value="blist.bo">
                    <c:param name="page" value="${ p }"/>
                </c:url>
                <a href="${ pagination }">[${ p }]</a> &nbsp;
            </c:if>
        </c:forEach>

        <!-- [다음] -->
        <c:if test="${ pi.currentPage >= maxPage }">
            [다음]
        </c:if>
        <c:if test="${ pi.currentPage <= maxPage }">
            <c:url var="after" value="blist.bo">
                <c:param name="page" value="${ pi.currentPage + 1 }"/>
            </c:url>	
            <a href="${after }">[다음]</a>
        </c:if>
    </td>
</tr>

 

728x90
반응형
728x90

 

지난 번 했던 

브랜치 생성

브랜치 변경

브랜치 생성 및 변경 한번에 하기

브랜치 삭제

add, commit, push 하기

 

 

 

728x90
반응형
728x90

 

 

페이징 처리(페이지네이션)

중간에 보고 있는 현재 번호(currentPage) 외에 이전(prev), 다음(next) 버튼이 따로 있고

이들은 currentPage번호보다 작거나 커야함

그리고 각각 1과 마지막 번호(maxPage)의 경우가 있어서 따로 <c:if>로 작성 해야하는 구조임. 구조파악 완료

 

<!-- 페이징 처리 -->
<tr align="center" height="20" id="buttonTab">
    <td colspan="6">
        <!-- [이전] -->
        <c:if test="${ pi.currentPage <= 1 }">
            [이전] &nbsp; <!-- 1페이지에서만 나오는 기호 설정. 마찬가지로 마지막페이지에서 나오는 기호도 따로 지정해줘야함 -->
        </c:if>
        <c:if test="${ pi.currentPage > 1 }">
            <c:url var="before" value="blist.bo">
                <c:param name="page" value="${ pi.currentPage - 1 }"/>
            </c:url>
            <a href="${ before }">[이전]</a>
        </c:if>

        <!-- 페이지 번호 -->
        <c:forEach var="p" begin="${ pi.startPage }" end="${ pi.endPage }">
            <c:if test="${ p eq pi.currentPage }">
                <font color="red" size="4"><b>[${ p }]</b></font>
            </c:if>
            <c:if test="${ p ne pi.currentPage }">
                <c:url var="pagination" value="blist.bo">
                    <c:param name="page" value="${ p }"/>
                </c:url>
                <a href="${ pagination }">${ p }</a> &nbsp;
            </c:if>
        </c:forEach>

        <!-- [다음] -->
        <c:if test="${ pi.currentPage >= pi.maxPage }">
            [다음]		<!-- 마지막 페이지에서만 나오는 기호 설정. 마찬가지로 첫페이지에서 나오는 기호도 따로 지정해줘야함 -->
        </c:if>
        <c:if test="${ pi.currentPage < pi.maxPage }">
            <c:url var="after" value="blist.bo">
                <c:param name="page" value="${ pi.currentPage + 1 }"/>
            </c:url>
            <a href="${ after }">[다음]</a>
        </c:if>

    </td>
</tr>
728x90
반응형

+ Recent posts