안녕하세요 블로거 워누입니다! 

어느새 Tistory 블로그를 버려둔지 꽤 시간이 지나버렸네요..ㅎ 

하지만 어떤 계기로 인해 이 블로그를 다시 살리게 되었습니다! 공부한 내용들을 조금씩 올리는 용도로 작성 예정이니 즐감하셨으면 좋겠습니다! 

오랜만에 java 공부하다가 java에 향상된 For문이라는 것이 있더라구요! 

그래서 간단한 예제를 만들어보고 이렇게 쓰는 거구나 싶어서 아래와 같이 작성해보았습니다. 

 

<소스코드>

향상된 For문 소스코드

 

<결과>

소스코드 결과

 

많은 자바 책에서 이미 소개되고 있어서 저만 너무 늦게 알았나 싶습니다.. ㅎㅎ 

기존의 for문은 소괄호 안에 (반복변수; 조건; 반복변수증감) 형태로 작성하고 중괄호에 {실행문}을 작성하였으나 

향상된 for문에서는 소괄호 안에 (타입 변수 : 배열) 이런 형태로 작성하고 중괄호에 {실행문}을 작성합니다.

 

즉, 향상된 for문의 형태는 아래 형태를 가지고 있는데, 

====================

for( 타입변수 : 배열 ) {

    실행문;

}

====================

for문이 처음 실행될 때 배열에서 가져올 첫번째 값이 있는지 판단한 후 값이 있으면 해당 값을 변수에 저장합니다.

그리고 실행문을 실행하며 이게 하나의 루프입니다. 

해당 루프는 배열 안에서 가져올 다음 값이 없을 때까지 실행되며, 배열안에 가져올 값이 없게 되면 해당 반복문을 종료합니다. 따라서, 향상된 for문의 반복 횟수는 배열의 항목 수(=배열.length)가 됩니다.  

 

배열은 어디서나 많이 쓰이니까 향상된 for문도 공부해둔다면 개발하다가 유용하게 쓸 수 있을것 같네요 ㅎㅎ

앞으로도 공부하다가 공유할 내용이 있다면 블로그에 소개하겠습니다! 오늘은 여기까지 작성할게요!!

블로거 워누입니다!

 

오늘은 Java를 html과 융합하여 JSP와 Servlet(서블릿)이라는 것들을 이용하여 웹 페이지를 만들어 보았는데요! 코드가 조금 기니까 자세히 보셔야 해요ㅎㅎ 총 세개의 파일로 구성되어 있구요!하나는 JSP, 하나는 서블릿, 하나는 자바스크립트 파일입니다!

 

아래 코드와 결과를 같이 봐주세요!

 

1) 11_testpage.jsp

<%@ 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>WebTest Page</title>
<script type="text/javascript" src="testScript.js"></script>
</head>
<body>
<form method="get" action="testServlet" name="frm">
<h2> 회원 가입 페이지 </h2>

 <label for="userName"> 이름 </label><span style="color:blue;"> * </span>
 <input type="text" id="userName" name="userName"> <br>
 
 <label> 주민등록번호 </label><span style="color:blue;"> * </span>
 <input type="text" id="userNoBir" name="userNoBir"> -
  <input type="password" id="userNoSec" name="userNoSec"> <br>

  <label for="userID"> 아이디 </label><span style="color:blue;"> * </span>
  <input type="text" id="userID" name="userID"> <br>

  <label for="userPwd"> 비밀번호 </label><span style="color:blue;"> * </span>
  <input type="password" id="userPwd" name="userPwd"> <br>

  <label for="userPwdchk"> 비밀번호확인 </label><span style="color:blue;"> * </span>
 <input type="password" id="userPwdchk" name="userPwdchk"> <br>
 
 <label for="userEmail"> 이메일 </label><span style="color:blue;"> * </span>
  <input type="text" name="userEmail" id="userEmail"> @
  <input type="text" name="Emailaddr" id="Emailaddr">

  <label for="EmailSelect" style="float: left;"> </label>
     <select id="EmailSelect" name="EmailSelect" size="1">
      <option value="직접입력">직접입력 </option>
      <option value="naver.com"> naver.com </option>
      <option value="nate.com"> nate.com </option>
      <option value="hanmail.net"> hanmail.net </option>
      <option value="gmail.com"> gmail.com </option>
    </select>
    <br>

 <label for="userHomeNo"> 우편번호 </label> &nbsp;
    <input type="text" id="userHomeNo" name="userHomeNo"> <br>
   
    <label for="userAddr1"> 주소 </label> &nbsp;
  <input type="text" id="userAddr1" name="userAddr1">
  <input type="text" id="userAddr2" name="userAddr2"> <br>
  
  <label for="userHP"> 전화번호 </label> &nbsp;
  <input type="text" name="userHP"> <br>
 
 <label for="job" style="float: left;"> 직업 </label>
    <select id="job" name="job" size="1">
      <option value="학생"> 학생 </option>
      <option value="공무원"> 공무원 </option>
      <option value="언론"> 언론 </option>
      <option value="컴퓨터/인터넷"> 컴퓨터/인터넷 </option>
   </select>
   <br>

  <label for="chkMailSMS"> 메일/SMS 정보 수신 여부 </label> &nbsp;
  <input type="radio" id="chkMailSMS" name="chkMailSMS" value="yes" checked> 수신
  <input type="radio" id="chkMailSMS" name="chkMailSMS" value="no"> 거부 <br><br>

 <label for="pl"> 개발언어 관심 분야 </label> &nbsp; <br>
 <input type="checkbox" name="pl" value="C"> C
 <input type="checkbox" name="pl" value="C++"> C++
  <input type="checkbox" name="pl" value="Java"> Java <br>
  <input type="checkbox" name="pl" value="C#"> C#
  <input type="checkbox" name="pl" value="JavaScript"> JavaScript
 <input type="checkbox" name="pl" value="python"> python <br>

 <br><br>
 <input type="submit" value="회원가입" style="float: center;" onclick="return check()">
 <input type="reset" value="취소" style="float: center;margin-right:50px">

</form>
</body>
</html>

 

2) testServlet.java <- 얘가 서블릿이에요!

package unit11;

import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

/**
 * Servlet implementation class testServlet
 */

@WebServlet("/testServlet")

public class testServlet extends HttpServlet {

 private static final long serialVersionUID = 1L;

 /**
  * @see HttpServlet#HttpServlet()
  */

 public testServlet() {
  super();
  // TODO Auto-generated constructor stub
 }

 /**
  * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse
  *      response)
  */

 protected void doGet(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {
  // TODO Auto-generated method stub
  response.setContentType("text/html; charset=UTF-8");

  String userName = request.getParameter("userName");
  int userNoBir = Integer.parseInt(request.getParameter("userNoBir"));
  int userNoSec = Integer.parseInt(request.getParameter("userNoSec"));
  String userID = request.getParameter("userID");
  String userPwd = request.getParameter("userPwd");
  String userPwdchk = request.getParameter("userPwdchk");
  String userEmail = request.getParameter("userEmail");
  String Emailaddr = request.getParameter("Emailaddr");
  String EmailSelect = request.getParameter("EmailSelect");
  int userHomeNo = Integer.parseInt(request.getParameter("userHomeNo"));
  String userAddr1 = request.getParameter("userAddr1");
  String userAddr2 = request.getParameter("userAddr2");
  String userHP = request.getParameter("userHP");
  String Job = request.getParameter("job");
  String chkMailSMS = request.getParameter("chkMailSMS");

  PrintWriter out = response.getWriter();

  out.print("<html><body>");
  out.print("<h1> 회원 정보 <h1> <br><hr>");
  out.println("이름 : <b>" + userName);
  out.print("<br>");
  out.println("</b>주민등록번호 : <b>" + userNoBir + "-" + userNoSec);
  out.print("<br>");
  out.println("</b>아이디 : <b>" + userID);
  out.print("<br>");
  out.println("</b>비밀번호 : <b>" + userPwd);
  out.print("<br>");
  

  if (Emailaddr.trim() == "")
   out.println("</b>이메일 : <b>" + userEmail + "@" + EmailSelect);
  else
   out.println("</b>이메일 : <b>" + userEmail + "@" + Emailaddr);  
  out.print("<br>");

  out.println("</b>우편번호 : <b>" + userHomeNo);
  out.print("<br>");
  out.println("</b>주소 : <b>" + userAddr1);
  out.print(userAddr2);
  out.print("<br>");
  out.println("</b>핸드폰번호 : <b>" + userHP);
  out.print("<br>");
  out.println("</b>직업 : <b>" + Job);
  out.print("<br>");
  out.println("</b>메일/문자 수신 여부 : <b>" + chkMailSMS);
  out.print("<br>");

  String pls[] = request.getParameterValues("pl");
  if (pls == null) {
   out.print("</b>선택한 항목이 없습니다. <b>");
  } else {
   out.println("</b>관심분야 : <b>");
   for (String pl : pls)
    out.print(pl + " ");
  }

  out.print("</b><br>");
  out.println("</b><br><br><a href='javascript:history.go(-1)'>다시</a>");
  out.print("</body></html>");
  out.close();
 }

 /**
  *
  * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse
  *      response)
  *
  */

 protected void doPost(HttpServletRequest request, HttpServletResponse response)
   throws ServletException, IOException {

  // TODO Auto-generated method stub

  doGet(request, response);

 }

}

 

3) testScript.js

/**
 *
 * 입력된 값에 대하여 유효성을 검사하는 자바스크립트입니다.
 *
 */

function check() {

 if (document.frm.userName.value == "") {
  alert("이름을 입력해주세요.");
  document.frm.userName.focus();
  return false;
 } else if (document.frm.userNoBir.value == "") {
  alert("주민번호 앞자리를 입력해주세요.");
  document.frm.userNoBir.focus();
  return false;
 } else if (isNaN(document.frm.userNoBir.value)) {
  alert("숫자로 입력해주세요.");
  document.frm.userNoBir.focus();
  return false;
 } else if (document.frm.userNoBir.length == 6) {
  alert("주민번호 앞자리는 6자리여야 합니다. 다시 입력해주세요.");
  document.frm.userNoBir.focus();
  return false;
 } else if (document.frm.userNoSec.value == "") {
  alert("주민번호 뒷자리를 입력해주세요.");
  document.frm.userNoSec.focus();
  return false;
 } else if (document.frm.userNoSec.length == 7) {
  alert("주민번호 앞자리는 7자리여야 합니다. 다시 입력해주세요.");
  document.frm.userNoSec.focus();
  return false;
 } else if (isNaN(document.frm.userNoSec.value)) {
  alert("숫자로 입력해주세요.");
  document.frm.userNoSec.focus();
  return false;
 } else if (document.frm.userID.value == "") {
  alert("아이디를 입력해주세요.");
  document.frm.userID.focus();
  return false;
 } else if (document.frm.userID.length < 4) {
  alert("아이디는 최소 4자리 이상이어야 합니다.");
  document.frm.userID.focus();
  return false;
 } else if (document.frm.userPwd.value == "") {
  alert("비밀번호를 입력해주세요.")
  document.frm.userPwd.focus();
  return false;
 } else if (document.frm.userPwdchk.value == "") {
  alert("비밀번호 확인란에 비밀번호를 재입력해주세요.");
  document.frm.userPwdchk.focus();
  return false;
 } else if (document.frm.userPwd.length < 6) {
  alert("비밀번호는 최소 6자리 이상이어야 합니다.");
  document.frm.userPwd.focus();
  return false;
 } else if (document.frm.userPwd.value != document.frm.userPwdchk.value) {
  alert("비밀번호가 일치하지 않습니다. 다시 확인해주세요.");
  document.frm.userPwd.focus();
  return false;
 } else if (document.frm.userEmail.value == "") {
  alert("이메일 계정을 입력해주세요.");
  document.frm.userEmail.focus();
  return false;
 } else
  return true;

}

---------------------------------------------------------------------------------------------

 

뭔가 좀 많죠..? ㅎㅎ 그럼 바로 아래 결과를 보겠습니다.

 

1. 출력 화면

.

.

2. 정보 입력

.

.

3. 결과 확인

.

.

나름 괜찮나요? 만약 이름이나 비밀번호 등 * 표시 된것들 중에서 하나 빼고 확인 누르거나 취소 버튼 눌러보거나 하는 액션을 취해주시면 흥미로운 결과도 발견됩니다. 확인해 보시고 이상이 있거나, 지적할 사항, 보충해야 되는 부분들 확인해 주시면 감사하겠습니다 ㅎㅎ 

 

아직 데이터베이스를 구축하지 않아 저장은 되지 않네요 ㅎㅎ 앞으로 데이터베이스를 빨리 익혀서 회원 정보를 구축하는 법도 익혀야겠어요! 그러면 하나의 웹 페이지를 제작할 수 있는 능력이 생기겠죠?? 얼른 제대로 된 웹개발자가 되어야 겠습니다! 그 전까지 같이 공부하고 응원합시다!

 

밤이 늦었으니 전 이만 자러 가볼께요! 다음 포스팅에서 봅시다!! 안녕!!

 

 

 

 

오랜만에 찾아뵙는 블로거 워누입니다.

 

오늘 포스팅은 심심해서 만들어본 자바 달력 프로그램입니다.

생각나는 대로 만들어본거라 조금은 어설플 수 있지만 도움이 될 것 같으신 분들은 참고하셔도 좋을 것 같네요! ㅎㅎ

 

 

[코드 참조]

package standard;

import java.util.Scanner;

public class Calendar {

 public static void main(String[] args) {
      // TODO Auto-generated method stub
  
      Scanner sc = new Scanner(System.in);
  
      /*
       * monthSet은 각 달에 대한 날짜들을 저장한 배열,
       * year은 연도, month는 달, week는 요일, day는 일, i는 반복문을 사용하기 위한 변수.
       */
      int year=0, month=0, week=0, day=0, i=0; 
      int monthSet[] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
  
  
      while(true) {
       System.out.println("원하는 연도를 입력하세요. (0을 누르면 프로그램을 종료합니다.)");
       year = sc.nextInt();
       if(year==0) {
        System.exit(0);
        break;
       }
       System.out.println("원하는 달을 입력하세요.");
       month = sc.nextInt();
       if(month<1 || month>12) {
        System.out.println("1월에서 12월 사이의 달을 입력해주세요.");
        return;
       }
       System.out.println("");
   
       if(year%4 == 0 && year%100 != 0 || year%400 == 0) // 윤년의 조건.
        monthSet[1] = 29; // 윤년이면 2월 (monthSet[1])은 29일,
       else
        monthSet[1] = 28; // 윤년이 아니면 2월은 28일이다.
   
       // 01년 1월 1일부터 계산.
       day = (year-1)*365 + (year-1)/4 - (year-1)/100 + (year-1)/400;
       for(i=0;i<month-1;i++) {
        day += monthSet[i];  
       }
       week=day%7; // 구하고자 하는 달의 시작일(1일)의 요일을 구함.
   
       System.out.printf("%s\t%s\t%s\t%s\t%s\t%s\t%s\t\n", "월", "화", "수", "목", "금", "토", "일");   
       for(i=0;i<week;i++) {
        System.out.print("\t"); // 1일이 시작하기 전 공백을 위한 반복문.
       }
       for(i=1;i<=monthSet[month-1];i++) {
        System.out.printf("%d\t", i); // i를 입력한 달의 일수만큼 찍음.
        week++;   
        if(week%7 == 0)        // 요일이 일요일이 지나면
         System.out.println(); // 줄을 바꿈.
    
       }
       if(week%7 != 0) {
        System.out.println();
       }
      }
  
 }

}

 

코드는 생각보다는 간단하더라구요.

윤년을 반영하는 부분이 초보자분들에게는 어려울 것 같습니다.ㅎㅎ 아래는 결과화면인데요, 코드를 작성한 날짜와, 가장 최근 윤달이었던 달, 그리고 제가 태어난 생년월일을 맞추어보았습니다. 0을 누르면 종료하게 되어 있습니다!

 

 

.

[결과 화면]

 

.

혹시 과제 때 필요해서 들어오신 분들이라면 참고하셔도 좋습니다만, Ctrl+C,V 가 아니라 직접 코딩해보는 것을 추천합니다! 그래야 실력이 늘겠죠?

.

 

시간이 늦었으니 저는 이만 자러갈게요~ 안녕! 

블로거 워누입니다!

최근에는 너무 SDN만 건드린거 같아요! 이제 자바와 HTML도 다시 업데이트 해야 겠습니다! (아무래도 SDN이 프로젝트이다 보니 힘들긴 합니다..)

그럼 바로 본론으로 넘어갈게요!

.

이번 포스팅에서는 자바 Swing에서 지원해주는 JComboBox와 ImageIcon을 활용해서 원하는 이미지를 불러오고자 합니다! 코드는 주석을 합쳐도 100줄이 안넘어가니 부담없이 봅시다!

 

<소스 코드>

import java.awt.*;    // java.awt의 모든 라이브러리 클래스들을 제공받습니다.
import java.awt.event.*; // java.awt.event의 모든 라이브러리 클래스들을 제공받습니다.
import javax.swing.*;  // javax.swing의 모든 라이브러리 클래스들을 제공받습니다.

/*
 * ComboActionEx 클래스를 선언합니다.
 * JFrame을 상속받습니다.
 */

public class ComboActionEx extends JFrame{

 String[] fruits = {"apple", "banana", "mango"}; // String 타입 배열 friuts를 선언합니다.
 // 안의 원소들은 apple, banana, mango입니다. (파일 명이기도 합니다.)
 
 /*
  *  Swing에서 지원해주는 ImageIcon 클래스입니다.
  *  이미지 경로를 저장한 후 화면에 출력하는 역할을 합니다.
  *  ImageIcon 객체를 생성할 때 이름은 일반적으로 이미지 경로의 상위폴더명과 동일하게 합니다.
  *  즉, images라는 폴더는 apple, banana, mango 파일을 가지고 있어야 합니다.
  */
 ImageIcon[] images = { // ImageIcon 클래스 객체 images를 배열로 선언합니다.
   new ImageIcon("images/apple.jpg"), // [0]
   new ImageIcon("images/banana.jpg"), // [1]
   new ImageIcon("images/mango.jpg"), // [2]
 };
 
 // JLabel 객체 imgLabel을 생성합니다. 초기값은 images[0]입니다.
 JLabel imgLabel = new JLabel(images[0]);

ComboActionEx(){ //ComboActionEx를 재정의합니다.
  
  setTitle("ComboBox 활용"); // 창의 이름은 ComboBox로 저장합니다.
  /*
   * Container는 Swing에서 제공하는 라이브러리 클래스입니다.
   * 자바에서 창의 역할을 담당하며 Component들이 올려질 영역입니다.
   * contentPane은 화면에 출력될 Component들이 부착될 공간입니다.
   */
  
  Container c = getContentPane();
  
  // Container 클래스 객체 C를 생성 후 contentPane을 가져옵니다.  
  c.setLayout(new FlowLayout()); // c의 레이아웃를 FlowLayout 클래스를 생성하여 잡아줍니다.
  JComboBox combo = new JComboBox(fruits); // ComboBox 클래스 객체 combo를 선언합니다. fruits[0]을 초기값으로 합니다.
  c.add(combo); // 컨테이너(창)에 combo를 더합니다.
  c.add(imgLabel); // 컨테이너에 imgLabel을 더합니다.
  
  /*
   * ActionListener는 보통 버튼에 이벤트가 발생하면 실행됩니다.
   * 아래 코드를 통해 콤보박스에서 선택한 것에 대한
   * 이벤트 처리입니다.
   */
  combo.addActionListener(new ActionListener(){ // combo에 ActionListner를 설정합니다.
   public void actionPerformed(ActionEvent e){ // actionPerformed 메서드를 통해 이벤트 처리에 대한 동작을 구현합니다.
    JComboBox cb = (JComboBox) e.getSource(); // 동작이 일어날 소스를 JComboBox 형태로 받습니다.
    int index = cb.getSelectedIndex(); // int 타입 index를 선언하고 콤보박스에서 선택된 번호 값으로 저장합니다.
    imgLabel.setIcon(images[index]); // imgLabel에 image[index]를 불러옵니다.
   } // end actionPerformed()
  }); // end combo.addActionListener
  
  setBounds(50, 50, 400, 400); // 윈도우 상에서 위치를 잡아 준 후(가로 50, 세로 50) 창의 크기를 설정합니다.(가로 400, 세로 400)
  setVisible(true); // 윈도우에서 클래스를 구현한 창이 보이게끔 합니다.
 } // end ComboActionEx()
 
 public static void main(String[] args) { // 프로그램의 실행지점인 main 메서드입니다.
  // TODO Auto-generated method stub
  new ComboActionEx(); // new 연산자를 이용하여 ComboActionEx()를 실행합니다.
 } // end main

} // end class

 

 

이클립스에서 보니 70줄도 안되네요ㅎㅎ 주석도 한줄마다 달아서 쉽게 이해하실 수 있을 겁니다!

.

여기서 주의하실 점!

(아래 그림을 참고하세요!!!)

.

 

.

이렇게 이미지 경로를 잡아주어야 합니다!

(이클립스 내에서 폴더 생성을 하고 이미지를 Ctrl+C / Ctrl + V로 밀어 넣으셔도 됩니다.)

이걸 안해주시면 당연히 이미지를 불러 올 수 없으므로 에러가 발생하겠죠?

자, 그럼 어떻게 빌드가 되었는지 한번 볼까요?

.

.

와아~ 이미지가 보여요!

이미지 중에 제일 작은 망고 이미지에 맞추다 보니 사과 사진이 좀 잘렸네요..ㅜ 나중에 업그레이드 시켜야겠습니다ㅎㅎ 그럼 다른 항목들은 괜찮은지 콤보박스를 이용해 목록을 바꿔보겠습니다.

.

.

오오.. 망고는 잘 맞고.. 바나나는 잘렸네요!ㅜㅜ 괜찮습니다!

지금은 GUI를 이용해 이미지를 가지고 놀아봤다는 거 자체로 만족할려고 합니다! 그리고 조금씩 실력을 키워서 저런 것들을 능숙하게 다룰 수 있도록 노력해봐야 겠습니다!

.

코드는 짧은데 포스팅이 길어지면 읽기도 지루하시겠죠?ㅋㅋ

(쓰는 저도 살짝 지루해질뻔...ㅎ)

그러므로 저는 이만 포스팅을 마무리하겠습니다. 다음 포스팅에서 만나요~

안녕~~~

블로거 워누입니다. 

 

중간고사 문제로 사칙연산이 가능한 계산기를 GUI로 간단하게 구현해 보는 문제가 출제되었습니다. 

배우기 쉬운거 같아서 여러분에게도 소개시켜드리고자 합니다.

 

그럼 바로 코드를 보겠습니다.

 

import java.awt.event.*; // awt의 이벤트처리에 관한 모든 클래스를 import합니다.
import javax.swing.*; // 자바에서 제공하는 swing의 모든 클래스를 import합니다.

/*
 * RadioButtonEvent 클래스는 JFrame을 상속받고,
 * ItemListener를 구현하기 위하여 implement를 걸어줍니다.
 */

public class RadioButtonEvent extends JFrame implements ItemListener{

	JLabel Lb; // JLabel 객체 Lb를 선언합니다.

	JPanel p1, p2; // JPanel 객체 p1, p2를 선언합니다.

	JTextField tf1, tf2; // JTextField 객체 tf1, tf2를 선언합니다.
	JRadioButton Rb1, Rb2, Rb3, Rb4; // JRadioButton 객체 Rb1, Rb2, Rb3, Rb4를 선언합니다
 	ButtonGroup grp; // ButtonGroup 객체 grp를 선언합니다.

 	public RadioButtonEvent(){ // RadioButtonEvent를 메서드로 재선언합니다.

		setTitle("라디오버튼 이벤트2"); // Title을 화면에서 출력된 대로 정합니다.

		Lb = new JLabel(""); // 라벨을 생성합니다. 연산의 결과를 출력할 라벨입니다.

		tf1 = new JTextField(10); // 텍스트필드를 두개 선언합니다.
		tf2 = new JTextField(10); // tf1, tf2 는 두 입력값을 받을 것입니다.

		Rb1 = new JRadioButton("더하기"); // 라디오버튼을 생성합니다.
		Rb2 = new JRadioButton("빼기"); // Rb1은 더하기, Rb2는 빼기
		Rb3 = new JRadioButton("곱하기"); // Rb3는 곱하기, Rb4는 나누기로 적어줍니다.
		Rb4 = new JRadioButton("나누기"); // 기능은 아래에서 구현합니다.

		Rb1.addItemListener(this);
		Rb2.addItemListener(this); 
		Rb3.addItemListener(this);
		Rb4.addItemListener(this);

		grp = new ButtonGroup(); // 버튼 그룹을 생성합니다.

		grp.add(Rb1); // 4개의 라디오버튼을
		grp.add(Rb2); // 그룹으로 묶어줍니다.
		grp.add(Rb3);
		grp.add(Rb4);

		p1 = new JPanel(); // 판넬을 두개 생성합니다.
		p2 = new JPanel(); 
 
		p1.add(tf1); // p1 판넬에는
		p1.add(tf2); // 텍스트필드 2개를 넣고

		p2.add(Rb1); // p2 판넬에는
		p2.add(Rb2); // 라디오버튼 4개를 넣어줍니다.
		p2.add(Rb3);
		p2.add(Rb4);
		
        add("North", p1); // p1 판넬은 위쪽에 배치하고
		add("Center", p2); // p2 판넬은 가운데에 배치하고
		add("South", Lb); // 라벨은 맨 아래쪽에 배치합니다.

		setSize(300, 300); // 프레임의 사이즈는 가로 300, 세로 300으로 합니다.
		setVisible(true); // 프레임을 보일수 있도록 setVisible을 true로 잡습니다.

	} // end RadioEvnet()

	public void itemStateChanged(ItemEvent e){ // 텍스트필드와 라디오버튼의 이벤트처리를 위한 메서드입니다.

 		double d1, d2, d3; // double 타입 변수 d1, d2, d3를 선언합니다.
        
		d1 = Double.parseDouble(tf1.getText()); // tf1에서 입력받은 값을 double 타입으로 형변환 후 d1에 대입합니다.
		d2 = Double.parseDouble(tf2.getText()); // tf2에서 입력받은 값을 double 타입으로 형변환 후 d2에 대입합니다.

 		if(Rb1.isSelected()){ // Rb1을 체크한 경우
 			d3 = d1 + d2; // 두 값에 대하여 덧셈 연산을 진행 후 결과를 d3에 저장합니다.
			Lb.setText(d1 + "+" + d2 + "=" + d3); // 라벨에 덧셈 연산 결과를 출력합니다.
		}
 
		if(Rb2.isSelected()){ // Rb2를 체크한 경우
 			d3 = d1 - d2; // 두 값에 대하여 뺄셈 연산을 진행 후 결과를 d3에 저장합니다.
 			Lb.setText(d1 + "-" + d2 + "=" + d3); // 라벨에 뺄셈 연산 결과를 출력합니다.
		}
        
 		if(Rb3.isSelected()){ // Rb3을 체크한 경우
 			d3 = d1 * d2; // 두 값에 대하여 곱셈 연산을 진행 후 결과를 d3에 저장합니다.
			Lb.setText(d1 + "*" + d2 + "=" + d3); // 라벨에 곱셈 연산 결과를 출력합니다.
 		}

 		if(Rb4.isSelected()){ // Rb4를 체크한 경우
			d3 = d1 / d2; // 두 값에 대하여 나눗셈 연산을 진행 후 결과를 d3에 저장합니다.
			Lb.setText(d1 + "/" + d2 + "=" + d3); // 라벨에 나눗셈 연산 결과를 출력합니다.
		}
        
	} // end itemStateChange

	// 프로그램 실행 지점입니다.
	public static void main(String[] args) {
		// TODO Auto-generated method stub
		RadioButtonEvent rbe = new RadioButtonEvent(); // RadioButtonEvent 클래스의 객체 rbe를 생성합니다.
	} // end main
    
} // end class

 

 

오.. 뭔가 코드가 간단하죠? Swing을 활용하면 코드가 그래도 간단하게 나옵니다, 

Swing은 자바에서 지원해주는 GUI중 하나구요!

사용하는 방법도 간단합니다, 

.

import javax.swing.*;

.

요렇게만 걸어주면 java에서 제공하는 Swing에 대한 모든 클래스를 다 쓸수 있어요!!! 

그리고 이벤트 처리에 관한 것들은 awt에서 제공하는 event로 처리하기 위하여 역시

.

import java.awt.event.*; 

.

이렇게 걸어줍니다! 이 두개만 import해도 계산기를 뚝딱 만들더라구요! 

다른 코드에는 주석이 달려있으므로 자세한 설명은 생략할게요!

그럼 실행화면을 볼까요?

.

.

연산할 값 두개를 입력할 TextField 2개와 

연산 기호 RadioButton 4개, 결과를 출력하는 Label 1개 모두 정상적으로 동작하네요~

 

혹시 질문 있으시거나 보완할 점이 보이시거든 언제든 댓글을 달아주세요! 

무조건 환영입니다! 

 

그럼 20000!

 

안녕하세요! 워누입니다. 

오늘은 과제 때문에 만들게 된 간단한 계산기를 포스팅하고자 합니다.

(이클립스 버전은 다음에 포스팅할게요ㅎㅎ)

바로 본론 고고!!

.

일단 디자인을 잡아줍시다.

.

이거에 따른 xml 코드가 이렇습니다.

<activity_main.xml>

---------------------------------------------------------------------------------------------

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/LinerLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context="com.example.user.calculator.MainActivity">

    <EditText
        android:id="@+id/edit1"
        android:background="#000000"
        android:layout_width="fill_parent"
        android:layout_height="200px"
        android:layout_marginTop="10dp"
        android:textColor="#ffffff"
        android:textSize="35dp"
        android:ems="20"/>

       <requestFocus/>
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dp"
        android:layout_marginLeft="20dp"
        android:layout_marginTop="20dp"
        android:orientation="vertical">

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:id="@+id/button1"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="1"
                android:textSize="20dp" />

            <Button
                android:id="@+id/button2"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="2"
                android:textSize="20dp" />

            <Button
                android:id="@+id/button3"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="3"
                android:textSize="20dp" />

            <Button
                android:id="@+id/buttonP"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="+"
                android:textSize="20dp" />

        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:id="@+id/button4"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="4"
                android:textSize="20dp"/>

            <Button
                android:id="@+id/button5"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="5"
                android:textSize="20dp"/>

            <Button
                android:id="@+id/button6"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="6"
                android:textSize="20dp"/>

            <Button
                android:id="@+id/buttonX"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="×"
                android:textSize="20dp"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:id="@+id/button7"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="7"
                android:textSize="20dp"/>

            <Button
                android:id="@+id/button8"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="8"
                android:textSize="20dp"/>

            <Button
                android:id="@+id/button9"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="9"
                android:textSize="20dp"/>

            <Button
                android:id="@+id/buttonD"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="÷"
                android:textSize="20dp"/>
        </LinearLayout>

        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="wrap_content">

            <Button
                android:id="@+id/button0"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="0"
                android:textSize="20dp"/>

            <Button
                android:id="@+id/buttonR"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="="
                android:textSize="20dp"/>

            <Button
                android:id="@+id/buttonC"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="C"
                android:textSize="20dp"/>

            <Button
                android:id="@+id/buttonM"
                android:layout_width="170px"
                android:layout_height="170px"
                android:text="-"
                android:textSize="20dp"/>
        </LinearLayout>


    </LinearLayout>
</LinearLayout>
---------------------------------------------------------------------------------------------

버튼 모양, 레이아웃을 잡아 주었다면 이제 동작을 구현해야겠죠? 자바 코드는 이렇게 작성하였습니다.

.

<MainActivity.java>

---------------------------------------------------------------------------------------------

package com.example.user.calculator;

import android.os.Bundle;
import android.support.v7.app.AppCompatActivity;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;

public class MainActivity extends AppCompatActivity {

    private Button button1, button2, button3, buttonP, button4, button5, button6, buttonX, button7, button8, button9, buttonD, button0, buttonR, buttonC, buttonM;


private EditText edit;
private int a;
private int where=0;

@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Toast.makeText(getApplicationContext(),"Calculator",Toast.LENGTH_SHORT).show();

button1=(Button)findViewById(R.id.button1);
button2=(Button)findViewById(R.id.button2);
button3=(Button)findViewById(R.id.button3);
buttonP=(Button)findViewById(R.id.buttonP);
button4=(Button)findViewById(R.id.button4);
button5=(Button)findViewById(R.id.button5);
button6=(Button)findViewById(R.id.button6);
buttonX=(Button)findViewById(R.id.buttonX);
button7=(Button)findViewById(R.id.button7);
button8=(Button)findViewById(R.id.button8);
button9=(Button)findViewById(R.id.button9);
buttonD=(Button)findViewById(R.id.buttonD);
button0=(Button)findViewById(R.id.button0);
buttonR=(Button)findViewById(R.id.buttonR);
buttonC=(Button)findViewById(R.id.buttonC);
buttonM=(Button)findViewById(R.id.buttonM);

edit=(EditText)findViewById(R.id.edit1);

View.OnClickListener cl = new View.OnClickListener() {
@Override
public void onClick(View v) {
if(v==button1){
edit.setText(edit.getText().toString()+1);
}
else if(v==button2){
edit.setText(edit.getText().toString()+2);
}
else if(v==button3){
edit.setText(edit.getText().toString()+3);
}
else if(v==buttonP){
a=Integer.valueOf(edit.getText().toString().trim());
edit.setText("");
where=1;
}
else if(v==button4){
edit.setText(edit.getText().toString()+4);
}
else if(v==button5){
edit.setText(edit.getText().toString()+5);
}
else if(v==button6){
edit.setText(edit.getText().toString()+6);
}
else if(v==buttonX){
a=Integer.valueOf(edit.getText().toString().trim());
edit.setText("");
where=2;
}
else if(v==button7){
edit.setText(edit.getText().toString()+7);
}
else if(v==button8){
edit.setText(edit.getText().toString()+8);
}
else if(v==button9){
edit.setText(edit.getText().toString()+9);
}
else if(v==buttonD){
a=Integer.valueOf(edit.getText().toString().trim());
edit.setText("");
where=3;
}
else if(v==button0){
edit.setText(edit.getText().toString()+0);
}
else if(v==buttonR) {
if (where == 1) {
a = a + Integer.valueOf(edit.getText().toString().trim());
edit.setText(Integer.toString(a));
}
else if(where==2){
a = a * Integer.valueOf(edit.getText().toString().trim());
edit.setText(Integer.toString(a));
}
else if(where==3){
a = a / Integer.valueOf(edit.getText().toString().trim());
edit.setText(Integer.toString(a));
}
else if(where==4){
a = a - Integer.valueOf(edit.getText().toString().trim());
edit.setText(Integer.toString(a));
}
}
else if(v==buttonC){
edit.setText("");
}
else if(v==buttonM){
a=Integer.valueOf(edit.getText().toString().trim());
edit.setText("");
where=4;
}
}

};
button1.setOnClickListener(cl);
button2.setOnClickListener(cl);
button3.setOnClickListener(cl);
buttonP.setOnClickListener(cl);
button4.setOnClickListener(cl);
button5.setOnClickListener(cl);
button6.setOnClickListener(cl);
buttonX.setOnClickListener(cl);
button7.setOnClickListener(cl);
button8.setOnClickListener(cl);
button9.setOnClickListener(cl);
buttonD.setOnClickListener(cl);
button0.setOnClickListener(cl);
buttonR.setOnClickListener(cl);
buttonC.setOnClickListener(cl);
buttonM.setOnClickListener(cl);
}
}

--------------------------------------------------------------------------------------------

 

코드를 이렇게 작성한 다음, 앱으로 추출해보니...

.

오오! 스스로 만든 간단한 계산기가 완성이 되었습니다! 

저는 이런식으로 간단하게 만들어서 보완해야 할 부분들이 좀 많아요..ㅎ 

조금더 익숙해지면 더 좋게 만들겠죠..?

그 날까지 공부 빠샤!! 그럼 20000~

 

'Java 공부하기 > Android' 카테고리의 다른 글

Mac에서 Android Studio 설치하기  (0) 2021.09.16

공대생 워누입니다!

자바는 하면 할수록 그래도 흥미가 조금씩 생기는 것 같습니다.

알면 알수록 빠져드네요ㅎㅎ

지금 포스팅할 것도 과제 중 하나입니다. 숫자로 삽입 수정 삭제 연산을 하고 나서 오름차순, 내림차순을 결정하면 그 순서대로 정렬시켜주는 프로그램입니다. 생각해보면 조금 더 개선할 수 있었을텐데, 과제할 당시에는 잘 생각이 안났나봐요.. (너그러이 이해를..) 어쨌든 포스팅 해보겠습니다.

.

.

[ArrayListProgram.java -> 프로그램 실행 지점, 삽입, 수정, 삭제 연산 기능 제공]

(2장입니다만, 60-61번줄이 겹치므로 주의하셔야 합니다.)

.

 

[Descending.java -> 내림차순으로 정렬하는 클래스]

.

 

[Ascending.java -> 오름차순으로 정렬하는 클래스]

.

[결과 화면]

 

흐음.. 이건 제가 어떻게 구상해서 작성했는 지 보여드리는 것이 제일 좋을 거 같네요. 어떤 과제였고, 어떻게 풀어나갔는지 오늘은 시나리오를 작성하여 보여드렸습니다.

 

[수행 과제]

1. 데이터를 화면으로 부터 입력 받는다.

(수치데이터, 문자 데이터 모두 가능)

2. 입력 데이터 : 10개 이상 20개 미만

3. 입력된 데이터 화면 출력

- (실행 화면상에서 입력처리)

4. 입력된 데이터에 수정 값 입력 :

5. 입력된 데이터에 삭제 기능 :

6. 입력된 데이터에 삽입 기능 :

-

7. 실행 화면에서 내림 차순과 오름 차순 선택

) 내림 차순 : 1/ 오름 차순 : 0

-

8. 입력된 데이터 정렬 출력

.

 

[수행 과제에 따른 시나리오]

1~3 : 데이터를 화면으로 입력받는다. 입력 데이터는 10~20, 입력된 데이터는 화면으로 출력해야 한다.

Scanner 클래스를 사용하여 입력을 받겠습니다. Java 1.5이상부터 사용하기 쉽고 편리한 메서드가 많은 이유입니다.

입력 데이터를 10개 이상 받아야 하기 때문에 ArrayList 클래스를 사용하여 배열을 선언하고 배열 공간 안에 데이터를 출력 화면상으로 입력하여 바로 출력해줘야 합니다. 저는 처음 배열의 공간을 15로 정하고 15개의 데이터를 받아 바로 출력하는 것을 만들 것입니다.

 

4~6 : 입력된 데이터에 수정 값 입력 후 삽입, 기능 추가

ArrayList 클래스에 소속된 메서드 중 add(삽입), set(수정), remove(삭제) 메서드를 이용해서 기능을 추가합니다.

위의 세 가지 기능과 기능을 사용하지 않을 경우를 생각하여 switch-case문을 활용하여 원하는 번호를 입력하고 그 번호에 따라서 삽입, 수정, 삭제, 사용하지 않음을 선택하도록 만듭니다.

 

7. 실행 화면에서 내림차순과 오름차순을 선택

if문을 사용해서 입력 값을 주었을 때 2를 나눈 나머지가 홀수일 경우 내림차순, 짝수일 경우 오름차순을 수행하도록 프로그램을 작성합니다. , 입력 값에 따라 배열의 결과를 오름차순이나 내림차순, 둘 중 하나로 선택할 수 있습니다.

 

8. 입력된 데이터를 정렬, 출력

7번 과정을 통해 수행된 정렬방식(오름차순 or 내림차순)을 출력합니다.

.

.

이런 시나리오를 이용해서 코딩을 했더니 생각없이 하게 되었어요..ㅎ 객체지향의 장점을 놨두고 죄다 저렇게 작성을 했으니ㅋㅋㅋ 어쨌든 참고하실 분들은 참고하시기를 바랍니다. 비판 지적 환영합니다! 그럼 다음 포스팅에 뵐게요! 아농~

공대생 워누입니다!

두 번째 포스팅이네요~ 두 개 블로그를 동시에 다룬다는 것은 조금 힘든 일인거 같아요 ㅎㅎ 게다가 블로그만 붙잡을 수 없는 노릇이기도 하구요..ㅜ 여튼! 힘내서 바로 진행하겠습니다.

.

학교 과제의 내용은 열개의 숫자를 입력받아서 정렬을 하는 프로그램을 작성하라고 하셨습니다. 정렬이라니.. 예전에 C언어로 정렬을 구현할 때 조금 어려웠던 기억이 있던지라 이번에도 어려울 것이라 생각했습니다만.. 이게 왠걸..? C언어로 작성했던 기억을 조금 살리니 자바는 훨씬 쉽더군요! 확실히 객체지향 언어가 쓸만합니다 ㅎㅎ

그럼 바로 코드를 올려볼게요~

.

[Bubble.java]

 

-> 숫자 열개를 버블 정렬 시켜주는 클래스입니다!

.

[BubbleSortProgram.java]

 

-> 메인 메서드가 포함되어 실행을 시켜줄 클래스입니다.

 

[결과화면]

 

 

버블 정렬이 수행되는 과정이 포함되어 있습니다. 10개의 숫자를 받았으므로

총 9단계에 걸처 진행이 되는 모습입니다. 

설명은 사진에 보시는 것처럼 코드 한줄마다 주석을 달았으므로 자세하게 하지는 않겠습니다.

.

이번 버블 정렬에서 핵심이 되는 코드는 말하지 않아도 [Bubble.java] 클래스에 안에 있는 중첩 for문들입니다. 저 프로그램을 설계하는 과정중 의사 코드를 공개합니다.

 

+ Pseudo Code

(버블 정렬, 인접한 두 원소를 교환하여 왼쪽의 값이 오른쪽보다 크다면 교환하고 그렇지 않으면 교환하지 않는다.)

 

bubbleSort(a[], size)

for(isize-1; i>0; i--){

for(j0;j<i;j++){

if(a[j]>a[j+1]){

temp a[j];

a[j] a[j+1];

a[j+1] temp;

}

}

}

end bubbleSort()

 

저는 순서도보다 이렇게 의사 코드로 뭔가를 작성하는게 더 좋은거 같아요.

여기서 사용된 핵심 변수를 설명하자면,

i는 버블 정렬의 단계와 1단계 당 수행되는 버블 정렬의 횟수도 나타냅니다.

j는 버블 정렬의 비교를 위한 변수입니다.

.

이 정도면 설명도 충분히 된거 같고, 제가 표현하고자 싶은 것도 잘 표현된 것 같습니다만, 혹시나 제가 틀린 부분이 있거나 보완하면 좋은 점은 가르쳐 주시면 더욱 감사하겠습니다.

 

 

 

+ Recent posts