728x90
728x90

제이쿼리(jQuery)란?

 

오픈 소스 기반의 자바스크립트 라이브러리로 웹 사이트에 자바스크립트를 더욱 손쉽게 활용할 수 있게 해 주는 것. 또한, 제이쿼리를 사용하면 짧고 단순한 코드로도 웹 페이지에 다양한 효과나 연출을 적용할 수 있어서 제이쿼리는 오늘날 가장 인기 있는 자바스크립트 라이브러리 중 하나이다.

 

 

 

 

 

제이쿼리의 역사

 

제이쿼리는 2006년 미국의 존 레식(John Resig)이 뉴욕시 바캠프(Barcamp)에서 처음으로 소개하였다.

현재는 jQuery Team이라는 개발자 그룹이 jQuery Foundation을 통해 개발과 유지 보수를 담당하고 있다.

 

 

jQuery

What is jQuery? jQuery is a fast, small, and feature-rich JavaScript library. It makes things like HTML document traversal and manipulation, event handling, animation, and Ajax much simpler with an easy-to-use API that works across a multitude of browsers.

jquery.com

 

 

 

 

 

 

CDN을 사용한 jQuery 활용

 

jQuery 공식 홈페이지에서는 발표된 모든 버전의 jQuery 스크립트 CDN 서버를 제공하며 사용자는 jQuery CDN 서버로 연결되는 외부 링크만으로 jQuery 스크립트를 불러와서 제이쿼리의 모든 기능을 사용할 수 있다. 이 방법은 사이트 트래픽량을 감소시킬 수 있다. jQuery는 한 개의 스크립트로 이루어져 있음과 동시에 한 개의  jQuery() 함수로 구성되어 있다.  

 

 

 

jQuery CDN

The integrity and crossorigin attributes are used for Subresource Integrity (SRI) checking. This allows browsers to ensure that resources hosted on third-party servers have not been tampered with. Use of SRI is recommended as a best-practice, whenever libr

code.jquery.com

 

 

인터넷만 연결되어있으면 제이쿼리 라이브러리를 가져다 사용 가능하다. 여기에서는 구글 개발 라이브러리를 사용했다. 사용 방법은 매우 간단! 위의 코드를 긁어와서 html 헤더 부분에 복사 + 붙여넣기해서 사용하면 된다.

 

 

 

Hosted Libraries  |  Hosted Libraries  |  Google Developers

A stable, reliable, high-speed, globally available content distribution network for the most popular open-source JavaScript libraries.

developers.google.com

<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>

 

 

 

 

 

 

 

 

제이쿼리 셀렉터 문법과 간단한 실습 (선택자)

 

jQuery() 함수는 HTML의 DOM 객체를 선택하는 함수이고 반환되는 오브젝트는 선택된 객체의 핸들러이다. 그리고 jQuery라는 함수명을 계속 사용하는 것은 번거롭기 때문에 이 함수명을 대체할 수 있는 식별자($)를 사용한다.

 

※ 기존의 홈페이지에서 prototype과 같은 다른 자바스크립트 프레임워크를 사용하고 있는 경우에는 식별자 $를 사용했을 때 프레임워크끼리의 충돌로 인해 오류가 발생할 수 있는데, 이 때에는 $가 아닌 원래의 함수인 jQuery를 사용한다.

 

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>jquery - 셀렉터</title>
    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script>
    <style>
        body{
            font-size: 17px;
            font-family: Arial, Helvetica, sans-serif;
            background: #f4f4f4;
            line-height: 1.5em;
        }
        header {
			background: #333;
			color: white;
			padding: 20px;
			text-align: center;
			border-bottom: 4px solid black;
			margin-bottom: 10px;
		}
		#container {
			width: 90%;
			margin: auto;
			padding: 10px;
		}
    </style>

</head>
<body>
    <header>
        <h1>jquery시작하기</h1>
    </header>

    <div class="container">
        <h1 class="heading1">첫 번째 제목</h1>
        <p id="para1">Lorem ipsum dolor sit, amet consectetur adipisicing elit. Et saepe, accusamus labore laudantium debitis tenetur commodi, doloribus enim quas, iure odio aliquid! <span>Officia nemo accusantium</span> veritatis aliquam labore beatae enim!</p>

		<h1 class="heading2">두 번째 제목</h1>
        <p class="para2">Lorem ipsum dolor sit, amet consectetur adipisicing elit. Et saepe, accusamus labore laudantium debitis tenetur commodi, doloribus enim quas, iure odio aliquid! <span>Officia nemo accusantium</span> veritatis aliquam labore beatae enim!</p>
        
        <ul id="list">
                <li>List Item</li>
                <li>List Item</li>
                <li>List Item</li>
                <li>List Item</li>
                <li>List Item</li>
                <li>List Item</li>
                <li>List Item</li>
                <li>List Item</li>
        </ul>
        
        <input type="button" value="Button">
        <input type="submit" value="Submit">
        <input type="text">
        <a href="https://www.google.co.kr/">Google</a>
        <a href="https://www.naver.com/">Naver</a>
    </div>
    
    <script>
        // $('h1').hide();
        $('h1.heading2').hide(); 
        $('p span').css('color', 'red');
        $('ul#list li:first').css('color', 'red');
        $('ul#list li:last').css('color', 'blue');

        $('ul#list li:even').css('background-color', 'yellowgreen');
	    $('ul#list li:odd').css('background-color', 'pink');
        $('ul#list li:nth-child(3)').css('list-style', 'none');
        //$('ul#list li:nth-child(3n)').css('list-style', 'none'); 3의 배수로 선택가능

        $(':button').hide();

        $('[href]').css('color', 'red');
        $('a[href="https://www.naver.com/"]').css('color', 'gray');
        //$('*').hide();

    </script>

</body>
</html>

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

타입 data type

 

프로그램에서 다룰 수 있는 값의 종류.

자바스크립트에서 여러 가지 형태의 타입을 기본타입으로 미리 정의하여 제공하며
자바스크립트의 기본 타입은 크게 원시 타입과 객체 타입으로 구분한다. 

 

 

 

 

원시 타입 primitive type : 1~5

 

 

1. 숫자(number) 

 

정수/실수를 구분않고 실수 하나로만 표현.
매우 큰 수나 매우 작은 수를 표현할 경우에는 e 표기법을 사용.

 

var firstNum = 10;     // 소수점을 사용하지 않은 표현
var secondNum = 10.00; // 소수점을 사용한 표현
var thirdNum = 10e6;   // 10000000
var fourthNum = 10e-6; // 0.00001

 

 

 

2. 문자열(string)

 

큰따옴표("")나 작은따옴표('')로 둘러싸인 문자의 집합. 
큰따옴표는 작은따옴표로 둘러싸인 문자열에만 포함될 수 있으며, 작은따옴표는 큰따옴표로 둘러싸인 문자열에만 포함될 수 있다.

 

var num = 10;
var str = "JavaScript";
document.getElementById("result").innerHTML = (num + str); // 10JavaScript

 

자바스크립트에서는 숫자와 문자열을 더할 수도 있는데,
자바스크립트는 숫자를 문자열로 자동 변환하여, 두 문자열을 연결하는 연산을 수행한다.

 

 

 

3. 불리언(boolean)

 

참(true)과 거짓(false)을 표현

 

 

 

 

4. 심볼(symbol) 

 

유일하고 변경할 수 없는 타입으로, 객체의 프로퍼티를 위한 식별자로 사용
ECMAScript 6부터 제공되며 심볼 타입은 익스플로러에서 지원하지 않는다.

 

var sym = Symbol("javascript");  // symbol 타입
var symObj = Object(sym);        // object 타입

 

* 프로퍼티는 object를 위해서 데이터를 저장하며 메소드는 object가 요청 받을 수 있는 액션이다. 

 

 

 

 

5. typeof 연산자

 

피연산자의 타입을 반환하는 피연산자가 단 하나뿐인 연산자

 

typeof 10;        // number 타입

typeof "문자열";  // string 타입

typeof true;      // boolean 타입

typeof undefined; // undefined 타입

typeof null;      // object 타입

 

 

 

 

6. null, undefined

 

null : 객체 타입이며 아직 값이 안정해진 것.
undefined : '타입'이 정해지지 않은 것. => 초기화되지 않은 변수나 존재하지 않는 값에 접근할 때 반환된다.

* null과 undefined는 동등 연산자(==)와 일치 연산자(===)로 비교할 때 그 결과가 다르므로 주의

(타입을 제외하면 같은 의미지만, 타입이 다르므로 일치하지는 않는다.)

 

 

 

 

6. 객체 (object)

 

자바스크립트의 기본 타입은 객체.
객체는 여러 프로퍼티(property)나 메소드(method)를 같은 이름으로 묶어놓은 일종의 집합체

* 자바스크립트 프로퍼티 : 어떤 값이 다른값과 연관을 갖고 있는 것. 보통 데이터 구조와 연관된 속성을 나타내며
종류로는 인스턴트 프로퍼티, static property가 있다.

인스턴트 프로퍼티 : 특정 object 인스턴스의 특정한 데이터
Static Property : 모든 object 인스턴스들에게 공유된 데이터

보통 "프로퍼티가 object를 가지고 있다"라고 말하는 것은 "property가 object reference"를 가지고 있다는 것을 줄여서 말한 것
property의 값이 변한 후에도 object는 그대로 남아있기 때문에 이걸 구분하는 것은 중요합니다.

 

 

 

 

타입 변환(type conversion)

 

 

자바스크립트의 변수는 타입이 정해져 있지 않으며, 같은 변수에 다른 타입의 값을 다시 대입할 수도 있다.

한 변수에 여러 번 대입할 수는 있지만, 변수의 재선언은 할 수 없어서 재선언문은 무시된다.

 

var num = 20; // Number 타입의 20
num = "이십"; // String 타입의 "이십"

var num;     //무시

 

 

 

 

묵시적 타입 변환(implicit type conversion)

 

자바스크립트는 특정 타입의 값을 기대하는 곳에 다른 타입의 값이 오면, 자동으로 타입을 변환하여 사용한다.

+ : 문자열 값이 오길 기대하는 곳에 숫자가 오더라도 자바스크립트는 알아서 숫자를 문자열로 변환하여 사용

-  : 뺄셈 연산을 위해 문자열이 숫자로 변환되어야 하나, 해당 문자열은 두 번째 예제의 문자열과는 달리 숫자로 변환될 수 없는 문자열이며 의미에 맞게 자동으로 타입을 변환할 수 없으므로, 자바스크립트는 NaN 값을 반환한다.

10 + "문자열"; // 문자열 연결을 위해 숫자 10이 문자열로 변환됨.

"3" * "5";     // 곱셈 연산을 위해 두 문자열이 모두 숫자로 변환됨.

1 - "문자열";  // NaN


* NAN :  Not a Number의 축약형으로, 정의되지 않은 값이나 표현할 수 없는 값. 0으로 나누거나 위 같은 경우.

 

 

 

 

 

명시적 타입 변환(explicit type conversion)

 

자바스크립트에서는 묵시적 타입 변환을 많이 사용하지만, 명시적으로 타입을 변환할 방법도 제공한다.

명시적 타입 변환을 위해 자바스크립트가 제공하는 전역 함수 종류를 알아보자.

 

1. Number()

2. String()

3. Boolean()

4. Object()

5. parseInt()

6. parseFloat()

 

Number("10"); // 숫자 10
String(true); // 문자열 "true"
Boolean(0);   // 불리언 false
Object(3);  // 숫자 3

 

 

 

 

 

숫자를 문자열로 변환

 

숫자를 문자열로 변환하는 가장 간단한 방법은 String() 함수를 사용하는 것이다.

null과 undefined를 제외한 모든 타입의 값이 가지고 있는 toString() 메소드를 사용할 수도 있다. 

숫자(Number) 객체는 숫자를 문자열로 변환하는 다음과 같은 메소드를 별도로 제공한다.

 

* 메소드(method) :  객체의 프로퍼티 값으로 함수를 갖는 프로퍼티

 

메소드 설명
toExponential() 정수 부분은 1자리, 소수 부분은 입력받은 수만큼 e 표기법을 사용하여 숫자를 문자열로 변환함.
toFixed() 소수 부분을 입력받은 수만큼 사용하여 숫자를 문자열로 변환함.
toPrecision() 입력받은 수만큼 유효 자릿수를 사용하여 숫자를 문자열로 변환함.

 

 

 

 

불리언 값을 문자열로 변환

 

1) String() 함수를 사용하거나 2) toString() 메소드를 사용하는 방법이 있다

 

String(apple);     // 문자열 "apple"
grape.toString(); // 문자열 "grape"

 

 

 

 

 

날짜를 문자열이나 숫자로 변환

 

날짜를 문자열로 변환하려면 String() 함수와 toString() 메소드를 사용하는 방법이 있다.

자바스크립트에서 날짜(Date) 객체는 문자열과 숫자로 모두 변환할 수 있는 유일한 타입

날짜(Date) 객체는 날짜를 숫자로 변환하는 다음과 같은 메소드를 별도로 제공한다.

 

 

메소드 설명
getDate() 날짜 중 일자를 숫자로 반환함. (1 ~ 31)
getDay() 날짜 중 요일을 숫자로 반환함. (일요일 : 0 ~ 토요일 : 6)
getFullYear() 날짜 중 연도를 4자리 숫자로 반환함. (yyyy년)
getMonth() 날짜 중 월을 숫자로 반환함. (1월 : 0 ~ 12월 : 11)
getTime() 1970년 1월 1일부터 현재까지의 시간을 millisecond 단위의 숫자로 반환함.
getHours() 시간 중 시를 숫자로 반환함. (0 ~ 23)
getMinutes() 시간 중 분을 숫자로 반환함. (0 ~ 59)
getSeconds() 시간 중 초를 숫자로 반환함. (0 ~ 59)
getMilliseconds() 시간 중 초를 밀리초(millisecond) 단위의 숫자로 반환함. (0 ~ 999)

 

 

 

 

문자열을 숫자로 변환

 

문자열을 숫자로 변환하는 가장 간단한 방법은 Number() 함수를 사용하는 것이다.

자바스크립트는 문자열을 숫자로 변환해 주는 두 개의 전역 함수를 별도로 제공한다.

 

 

함수 설명
parseInt() 문자열을 파싱하여 특정 진법의 정수를 반환함.
parseFloat() 문자열을 파싱하여 부동 소수점 수를 반환함.

 

 

 

불리언 값을 숫자로 변환

 

Number() 함수를 사용

 

Number(true);  // 숫자 1

Number(false); // 숫자 0
728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

자바스크립트를 배우기 전에 필요한 사전지식

- HTML
- CSS

 


 

자바스크립트

 

JavaScript객체(object) 기반의 스크립트 언어이다. 웹 브라우저 내에서 주로 사용하며, 다른 응용 프로그램의 내장 객체에도 접근할 수 있는 기능을 가지고 있다. HTML로는 웹의 틀을 작성하고, CSS로는 웹을 디자인하며, 자바스크립트로는 웹의 동작을 구현한다. 자바스크립트는 주로 웹 브라우저에서 사용되나, Node.js와 같은 프레임워크를 사용하면 서버 측 프로그래밍에서도 사용할 수 있다. 현재 컴퓨터나 스마트폰 등에 포함된 대부분의 웹 브라우저에는 자바스크립트 인터프리터가 내장되어 있다.

 

클라이언트  서버
html  JSP JAva(빈)
css html  
javascript JSON - 안드로이드, 애플, pc 다 됨  

 

 

자바스크립트의 역사

 

자바스크립트는 1995년에 Netscape의 브렌던 아이크(Brendan Eich)에 의해 만들어졌다. 처음에는 Mocha라는 이름으로 개발되었으나 이후 LiveScript, 최종적으로는 JavaScript라는 이름으로 변경.

 

 

 

 

자바스크립트의 언어적 특징

 

1. 자바스크립트는 객체 기반의 스크립트 언어

2. 자바스크립트는 동적이며, 타입을 명시할 필요가 없는 인터프리터 언어

3. 자바스크립트는 객체 지향형 프로그래밍과 함수형 프로그래밍을 모두 표현할 수 있다.

 

 

 

자바스크립트로 할 수 있는 것

 

1. HTML의 '내용'을 변경

2. HTML의 '속성'을 변경

3. HTML의 '스타일'을 변경

 

출처 : 생활코딩

 

 

 

자바스크립트 문법

자바스크립트의 실행문은 세미콜론(;)으로 구분되며 대소문자를 구분한다.
마찬가지로 리터럴은 작은 따옴표를 사용.

 

 

 

식별자

변수나 함수의 이름을 작성할 때 사용하는 이름. 식별자는 영문자(대소문자), 숫자, 언더스코어(_) 또는 달러($)만을 사용한다. 식별자는 숫자와 식별자의 구별을 빠르게 할 수 있도록 숫자로는 시작할 수 없으며 유니코드를 사용한다.
식별자는 다음 두 가지 방법으로 사용할 수 있는데 1번 방식을 많이 이용한다.

1. Camel Case 방식

2. Underscore Case 방식

 

 

 

주석(comment)

 

// 주석문

 

위와 같이 사용하며 여러 줄 주석은 절대로 중첩해서 사용해서는 안 됩니다. 
중간에 끊길 수도 있는데 오류로 뜨지 않는 경우도 있기 때문.

 

 

 

 

자바스크립트에서 사용할 수 있는 출력 방법

 

1. window.alert() 메소드

자바스크립트에서 가장 간단하게 데이터를 출력할 수 있는 방법.
브라우저 위에 alert 대화상자(창)를 띄워 데이터를 전달한다.

2. HTML DOM 요소를 이용한 innerHTML 프로퍼티

가장 많이 사용되는 방법.
getElementByID()나 getElementsByTagName() 등의 메소드를 사용하여 HTML 요소를 선택하고서 
innerHTML 프로퍼티를 이용하면 선택된 HTML 요소의 내용(content)이나 속성(attribute)값 등을 손쉽게 변경할 수 있다.

3. document.write() 메소드

웹 페이지가 로딩될 때 실행되면, 웹 페이지에 가장 먼저 데이터를 출력한다.
대부분 테스트나 디버깅을 위해 사용된다.
웹 페이지의 모든 내용이 로딩된 후에 document.write() 메소드가 실행되면,
웹 페이지 내에 먼저 로딩된 모든 데이터를 지우고 자신의 데이터를 출력하게 되어
테스트 이외의 용도로 사용할 때에는 충분히 주의해서 사용해야 한다.

4. console.log() 메소드

웹 브라우저의 콘솔을 통해 데이터를 출력한다.
대부분의 주요 웹 브라우저에서는 F12를 누른 후, 메뉴에서 콘솔을 클릭하면 콘솔 화면을 사용할 수 있다.

 

 

 

 

HTML 문서에 자바스크립트 코드를 적용하는 방법

 

1. 내부 자바스크립트 코드로 적용 : 주로 body 태그 끝부분이나 head 태그에 삽입

<script>

    document.getElementById("text").innerHTML = "환영합니다!";

</script>

 

2. 외부 자바스크립트 파일로 적용

 <script src="/examples/media/example.js"></script>

* 장점 : 유지보수가 편해지고 웹 브라우저가 외부 자바스크립트 파일을 미리 읽을 수 있어 페이지 로딩 속도가 빨라진다.

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

 

9장. GUI 기초, AWT와 Swing

9장. GUI 기초, AWT와 Swing 요약

 

GUI : Graphical User Interface. 이미지나 그래픽을 이용하여 화면을 구성하고 (키보드 등) 입력도구를 이용하여 편리하게 작성된 사용자 인터페이스다. 자바에서 GUI를 구성하는 기본 패키지는 AWT와 스윙이 있다.

AWT : 자바가 처음 나왔을 때 함께 배포된 GUI 라이브러리, 중량 컴포넌트로 native 운영체제의 gui 컴포넌트의 도움을 받아 작동. 운영체제에 부담을 주지만 처리속도는 빠름. java.awt 패키지에 있다.

SWING : 순수 자바 언어로 만들어진 라이브러리, 경량 컴포넌트. java.swing 패키지에 구현되어 있다. AWT컴포넌트 외 많은 고급 컴포넌트를 갖고 있다.

[ JFrame > 컨텐트팬 > 컴포넌트 ]

 

컨테이너 : 여러 컴포넌트를 포함할 수 있는 특별한 GUI 컴포넌트다. 내부에 반드시 하나의 배치관리자를 가진다.
- AWT 컨테이너 : Panel, Frame, Applet, Dialog, Window
- Swing 컨테이너 : JPanel, JFrame, JApplet, JDialog, JWindow

최상위컨테이너 : 다른 컨테이너에 속하지 않고 독립적으로 화면에 출력될 수 있는 컨테이너. JFrame, JDialog, JApplet

컴포넌트 : 컴포넌트 포함 불가. 컨테이너에 포함되어야 화면에 출력될 수 있는 GUI 객체. JComponent에는 스윙 컴포넌트의 공통적인 기능이 작성되어 있다.

System.exit(0); 응용프로그램 내에서 스스로 종료
main()종료 뒤에도 이벤트 분배 스레드가 살아 있어 프레임이 살아있다. 테스트 시 이 구문을 안쓰면 메모리에 계속 쌓이는 것을 볼 수 있음.* 종료했을때 메모리상에서도 사라지게 하기 : frame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);

배치관리자 : 컨테이너 내부에 있는 배치관리자 Layout Manager가 컨테이너에 부착되는 컴포넌트의 위치와 크기를 부착 시점에 결정해줌
- FlowLayout : 왼 -> 오로 적당한 크기로 배치
- BoderLayout : 가운데정렬되어 5개 영역의 크기에 맞추어 배열. 동서남북
- GridLayout : 2차원 격자로 나누고 셀의 크기와 동일하게 배열. 바둑판
- CardLayout : 겹쳐놓은 듯 배열. 잘 안씀

 

contentPane.add(okBtn);
		contentPane.add(cancelBtn,BorderLayout.SOUTH);
		contentPane.add(ignoreBtn,BorderLayout.NORTH);
		contentPane.add(okBtn1,BorderLayout.WEST);
		contentPane.add(cancelBtn1,BorderLayout.EAST);

 

 

 

9장. GUI 기초, AWT와 Swing 예제

| 예제 9-1 | 300x300 크기의 스윙 프레임을 작성하라. (setDefaultCloseOperation이 없으면 메모리에 계속적으로 쌓입니다.)

package test09;

import javax.swing.JFrame;

public class MyFrame extends JFrame {
	MyFrame(){
		super("MyFrame");
		// setTitle("MyFrame");
		setDefaultCloseOperation(EXIT_ON_CLOSE);  //종료했을때 메모리상에서도 사라지게 하기
		setSize(300,300);   // 프레임크기 
		setVisible(true);  // 프레임출력
	}
	
	public static void main(String[] args) {
		// 자동명령어 완성 : ctrl+space
		new MyFrame();
	}
}

작업관리자 : ctrl + alt + delete

 

 

| 예제 9-2 | 컨탠트팬의 배경색을 삽입하고, 이곳에 OK, Cancel, Ignore 버튼을 부착한 스윙 프로그램을 작성하라.

package test09;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class MyFrame extends JFrame {
	MyFrame(){
		super("MyFrame");
		// setTitle("MyFrame");
		setDefaultCloseOperation(EXIT_ON_CLOSE);  //종료했을때 메모리상에서도 사라지게 하기
		setSize(300,200);   // 프레임크기 
		Container contentPane=this.getContentPane();
		contentPane.setLayout(new FlowLayout());  // 버튼을 순서대로 (안쓰면 쌓임)
		contentPane.setBackground(Color.DARK_GRAY);  // 색상은 static
		
		JButton okBtn=new JButton("OK");
		JButton cancelBtn=new JButton("Cancel");
		JButton ignoreBtn=new JButton("Ignore");  // ctrl+shift+o : import		
		
		contentPane.add(okBtn);
		contentPane.add(cancelBtn);
		contentPane.add(ignoreBtn);
				
		setVisible(true);  // 프레임출력 (명령문 다 쓰고 아래쪽에 두기)
	}
	
	public static void main(String[] args) {
		// 자동명령어 완성 : ctrl+space
		new MyFrame();
	}
}

 

package test09;

import java.awt.Color;
import java.awt.Container;
import java.awt.FlowLayout;
import javax.swing.JButton;
import javax.swing.JFrame;

public class MyFrame extends JFrame {
	MyFrame(){
		super("MyFrame");
		// setTitle("MyFrame");
		setDefaultCloseOperation(EXIT_ON_CLOSE);  //종료했을때 메모리상에서도 사라지게 하기
		setSize(300,200);   // 프레임크기 
		Container contentPane=this.getContentPane();
		contentPane.setBackground(Color.RED); // 색상은 static
		 	
		JButton okBtn=new JButton("OK");
		JButton cancelBtn=new JButton("Cancel");
		JButton ignoreBtn=new JButton("Ignore");  // ctrl+shift+o : import		
		// this.setBackground(Color.GREEN); 색상은 contentPane 없으면 안됨
		this.setLayout(new FlowLayout());
		add(okBtn); add(cancelBtn);
		add(ignoreBtn);
		
		setVisible(true);  // 프레임출력 (명령문 다 쓰고 아래쪽에 두기)
	}
	
	public static void main(String[] args) {
		// 자동명령어 완성 : ctrl+space
		new MyFrame();
	}
}

 

 

 

| 예제 9-3 | 수평 간격이 30, 수직 간격이 40픽셀이고 LEFT로 정렬 배치하는 FlowLayout 배치관리자를 가진 컨텐트팬에 5ㄱ0의 버튼 컴포넌트를 부착한 스윙 응용프로그램을 작성하라.

package test09;

import java.awt.*;
import javax.swing.*;

public class p0904 extends JFrame {
	public p0904(){
		setTitle("BorderLayout Sample");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container c=getContentPane();
		
		c.setLayout(new BorderLayout(30,40));
		c.add(new JButton("Calculate"), BorderLayout.CENTER);
		c.add(new JButton("add"), BorderLayout.NORTH);
		c.add(new JButton("sub"), BorderLayout.SOUTH);
		c.add(new JButton("mul"), BorderLayout.EAST);
		c.add(new JButton("div"), BorderLayout.WEST);
		
		setSize(300,200);
		setVisible(true);
	}
	public static void main(String[] args) {
		new p0904();
	}
}

 

 

 

| 예제 9-4 | BoderLayout 배치관리자를 사용하여 컨텐트팬에 다음과 같이 5개의 버튼 컴포넌트를 삽입하라.

package test09;

import java.awt.*;
import javax.swing.*;

public class p0904 extends JFrame {
	public p0904(){
		setTitle("BorderLayout Sample");
		setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
		Container c=getContentPane();
		
		c.setLayout(new BorderLayout(30,20));
		c.add(new JButton("Calculate"), BorderLayout.CENTER);
		c.add(new JButton("add"), BorderLayout.NORTH);
		c.add(new JButton("sub"), BorderLayout.SOUTH);
		c.add(new JButton("mul"), BorderLayout.EAST);
		c.add(new JButton("div"), BorderLayout.WEST);
		
		setSize(300,200);
		setVisible(true);
	}
	public static void main(String[] args) {
		new p0904();
	}
}

 

 

 

| 예제 9-5 | GridLayout을 사용하여 스윙프로그램을 만들되 콘탠트팬을 4*2그리드로 분할하고 JLabel 컴포넌트와 JTextField 컴포넌트를 부착하여 만들어라. 두 행 사이의 수직 간격은 5픽셀로 하라.

*grid.setVgap(5); 간격을 나타내는 명령어

package test09;

import java.awt.Container;
import java.awt.GridLayout;

import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JTextField;

public class GridLayoutTest02 extends JFrame {
	String[] str= {"이름", "학번", "학과", "과목"};
	GridLayoutTest02(){
		setTitle("GridLayout Test02");
		setSize(300,300);
		setDefaultCloseOperation(EXIT_ON_CLOSE);
		Container c=getContentPane();
		c.setLayout(new GridLayout(4,2,5,5));
		for(int i=0; i<8; i++) {  // 항목이 여러개일 경우 라벨은 짝수에만 들어가는 것에 주목.
			if(i%2==0) {
				JLabel l=new JLabel(str[i/2]);
				c.add(l);
		}else {
			JTextField tf=new JTextField("");  //폭  
			c.add(tf);
		}
		}
	setVisible(true);
	}
	public static void main(String[] args) {
		new GridLayoutTest02();
	}
}

 

 

 

| 예제 9-6 | 컨텐트팬에 배치관리자를 삭제하고 9개의 버튼과 하나의 문자열을 출력하는 프로그램을 작성하라. "Hello, Press Buttons!" 문자열은 JLabel 컴포넌트를 이용하고, 그 위치를 130,50에 크기는 200*20으로 한다. 버튼의 크기는 50*20로 한다.

* 배치관리자 없는 컨테이너에 컴포넌트를 절대 위치와 크기로 지정

import javax.swing.*; 
import java.awt.*;

public class NullContainerEx extends JFrame { 
   public NullContainerEx() {
     setTitle("Null Container Sample"); 
     setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
     Container c = getContentPane();
     c.setLayout(null);
     JLabel la = new JLabel("Hello, Press Buttons!");
     la.setLocation(130, 50); 
     la.setSize(200, 20); 
     c.add(la);
        for(int i=1; i<=9; i++) {
        JButton b = new JButton(Integer.toString(i)); // 버튼 생성 
        b.setLocation(i*15, i*15);
        b.setSize(50, 20);
        c.add(b); // 버튼을 컨텐트팬에 부착
        }
     setSize(300, 200); 
     setVisible(true);
     }
 public static void main(String[] args) {
    new NullContainerEx(); 
  }
}
728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

 

 

 

 

 

 

명품자바프로그래밍 1장 요약, 예제

명품자바프로그래밍 2장 요약, 예제

명품자바프로그래밍 3장 요약, 예제

명품자바프로그래밍 4장 요약, 예제

 


 

 

명품자바프로그래밍 5장 요약

 

 

상속

 

상속이란?

 

부모 클래스에서 만들어진 필드와 메소드자식 클래스가 물려받는 것. 상속의 선언은 extend 키워드와 함께 사용한다.

 

public class Person{}
public class Student extends Person{}

장점 : 같은 속성의 수정이 필요할 경우 부모 클래스만 수정하고 여러 개의 클래스를 모두 수정할 필요가 없어 유지보수가 쉽다. 

--> 코드 중복을 제거하여 클래스를 간결하게 구현한다.

 

1. 클래스 간결화 - 멤버 중복작성 불필요

2. 클래스 관리 용이 - 클래스의 계층적 분류

3. 소프트웨어의 생산성 향상 - 클래스 재사용, 확장이 쉬움

 

 

상속의 특징 

 

1. 자바에서는 클래스 다중 상속 (multiple inheritance)를 지원하지 않는다. (C++은 지원한다)

--- 다중상속은 부모 클래스들이 같은 이름의 함수를 가진 경우 모호성으로 문제 유발 가능성이 있다. 자바는 이를 원천봉쇄.

 

2. 상속의 횟수에 제한이 없다.

 

3. 계층 구조의 최상위에 java.lang.Object 클래스가 있어서 자동으로 상속받도록 컴파일된다.

--- Object 클래스만이 유일하게 슈퍼클래스를 가지지 않는다.(이하 6장에서 추가 설명)​. 클래스의 최고조상님이다.

 

 

 

 

 

서브 클래스 객체 생성

 

서브 클래스는 슈퍼클래스의 private 멤버를 제외하고 모든 멤버를 접근할 수 있다.

 

 

 

슈퍼클래스 멤버의 접근 지정자

 

슈퍼클래스 멤버에 선언한 4가지 접근 지정에 대해 다른 클래스에서 어디까지 접근이 허용될까? (O : 접근가능)

Protected의 경우 같은 패키지의 모든 클래스, 그리고 패키지 상관없이 상속받는 서브 클래스에 접근이 가능하다.

 

슈퍼클래스 멤버에 접근하는
클래스 종류

 슈퍼 클래스 멤버의 접근 지정자
private default protected public
같은 패키지에 있는 클래스 X O O O
다른 패키지에 있는 클래스 X X X O
같은 패키지에 있는 서브 클래스 X O O O
다른 패키지에 있는 서브 클래스 X X O O

 

 

 

 

생성자

 

Q. 서브 클래스의 생성자와 슈퍼 클래스의 생성자 중 누가 먼저 실행될까? (슈퍼클래스의 생성자)

Q. 서브 클래스 객체가 생성될 때 서브클래스의 생성자와 슈퍼 클래스의 생성자가 모두 실행될까? (0)

 

답의 이유는 아래 그림 '슈퍼 클래스와 서브 클래스의 생성자 간 호출 및 실행 관계도를 보면서 이해해보자.

 

 

 

 

 

 

 

서브 클래스에서 슈퍼 클래스 생성자 선택

 

슈퍼 클래스에 여러 생성자가 있을 때 서브 클래스의 생성자와 함께 실행될 슈퍼클래스의 생성자는 원칙적으로 서브 클래스의 개발자가 각 생성자에 대해 함께 실행될 슈퍼클래스의 생성자를 지정한다. 그러나 명시하지 않았을 경우 컴파일러가 자동으로 슈퍼클래스의 기본 생성자를 호출하도록 자바 컴파일러가 작동한다.

 

슈퍼 클래스에 기본 생성자가 없을 경우 컴파일 오류 메세지를 출력한다. (Implicit super constructor A() is undefined. Must explicitly invoke another constructor

 

 

서브클래스의 생성자에서 super()를 이용하면 서브클래스에서 명시적으로 슈퍼클래스의 생성자를 선택할 수 있다. 괄호 안에 인자를 넣을 수도 있다. 요점은 super()가 반드시 생성자의 첫 줄에 사용되어야 한다는 것! (예제 5-3 참고)

 

* super() : 슈퍼 클래스 생성자를 호출하는 코드

 

 

 

 

 

 

캐스팅 Casting  :  타입 변환. 자바에서 클래스에 대한 캐스팅은 업캐스팅, 다운캐스팅이 있다.

 

 

업캐스팅 : 업캐스팅은 슈퍼 클래스의 레퍼런스로 서브 클래스의 객체를 가리키게 한다. 서브 클래스의 객체에 대한 레퍼런스를 슈퍼 클래스 타입으로 변환하는 것. 

 

Person p;
Student s = new Student();
p = s; //upcasting

 

 

다운캐스팅 : 업캐스팅의 반대이며 타입 변환을 명시적 지정해야 한다. 원래의 자기 자신으로 돌린다는 의미.

 

Student s = (Student)p; //downcasting, (student)의 타입 변환을 반드시 표시해야 됨

 

 

 

instance of 연산자 : 객체가 어떤 클래스를 상속받아 업캐스팅되어 넘어오는 지 구별하는 방법. 이항 연산자이며 레퍼런스가 가리키는 객체가 해당 클래스 타입의 객체이면 true, 아니면 false 로 계산하기 때문에 결과값은 boolean 값이다. 

 

 

* 래퍼런스 instanceof 클래스명

 

Person jee = new Student();
Person kii = new Professor();
if (jee instanceof Person) //true
if (jee instanceof Student) //true
if (kii instanceof Student) //false

// if(3 instanceof int) 객체에 대한 레퍼런스만 사용해서 문법 오류.
if ("java" instanceof String) //true

 

 

 

 

메소드 오버라이딩 method overriding : 슈퍼클래스에서 선언된 메소드와 같은 이름, 같은 리턴 타입, 같은 매개 변수 리스트를 갖는 메소드를 서브 클래스에서 재작성하는 것. 슈퍼클래스에 있는 메소드로 기능을 구현하지 못할 때 동일한 이름의 메소드를 서브클래스에 다시 작성한다. 실행 역시 서브클래스 내의 메소드만 실행된다. (= 슈퍼클래스메소드 무시, 혹은 덮어쓰기라고도 하며 동적바인딩이라고 한다.)

어떻게 호출되든 객체 안의 오버라이딩된 메소드의 호출이 무조건 보장된다. 

 

--- 메소드 오버로딩과 오버라이딩의 차이에 대해 정리해보고 넘어가기. (타 블로그 참조)

 

오버라이딩의 목적 : 다형성 실현

 

오버라이딩 제약 조건

슈퍼클래스 메소드와 동일한 원형으로 작성 (동일 이름, 동일 매개변수 타입, 동일 개수, 동일한 리턴타입의 메소드)

슈퍼클래스 메소드의 접근 지정자보다 접근의 범위를 좁혀 오버라이딩 불가 (키우는 건 가능)

static, private, final 메소드는 서브클래스에서 오버라이딩 할 수 없다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

명품자바프로그래밍 클래스와 객체 5장 예제

 

| 예제 5-1 | 클래스 상속 만들기

x, y의 한 점을 표현하는 Point 클래스와 이를 상속받아 색을 가진 점을 표현하는 ColorPoint 클래스를 만들고 활용해보자.

 

(1,2)

red(3,4)

 

package Luxuryjava05;

class Point {
	private int x, y;

	// 좌표
	public void set(int x, int y) {
		this.x = x;
		this.y = y;
	}

	// 좌표 출력
	public void showPoint() {
		System.out.println("(" + x + "," + y + ")");
	}
}

class ColorPoint extends Point {
	private String color;
	// 점의 색 
	public void setColor(String color) {
		this.color = color;
	}
	public void showColorPoint() {
		// 컬러 점의 좌표 
		System.out.print(color);
		showPoint();
	}
}

public class ColorPointEx {

	public static void main(String[] args) {
		Point p = new Point();
		p.set(1, 2);
		p.showPoint();

		ColorPoint cp = new ColorPoint();
		cp.set(3, 4);
		cp.setColor("red");
		cp.showColorPoint();
	}
}

 

 

 

 

| 예제 5-2 | 상속 관계에 있는 클래스 간 멤버 접근

클래스 Person을 아래와 같은 필드를 갖도록 선언하고, 클래스 Student는 Person을 상속받아 각 멤버 필드에 값을 저장하라.

 

클래스Person의 private필드 weight는 클래스Student에서 접근 불가능해 슈퍼클래스Person의 get, set 메소드를 통해서만 조작이 가능

 

private int weight;
int age;
protected int height;
public String name;
package Luxuryjava05;

class Person {
	private int weight;  // *** student 클래스 접근불가
	int age;           // 디폴트. student 클래스 접근가능
	protected int height;    // student 클래스 접근가능
	public String name;      // student 클래스 접근가능

	public void setWeight(int weight) {
		this.weight = weight;
	}

	public int getWeight() {
		return weight;
	}
}

class Student extends Person {
	public void set() {
		age = 30;
		name = "gildong";
		height = 180;
		setWeight(99);   // 간접접근
		// weight = 99; 슈퍼 클래스의 멤버 접근불가
	}
}

public class InheritanceEx {

	public static void main(String[] args) {
		Student s = new Student();
		s.set();

	}

}

 

 

 

 

| 예제 5-3 | super()를 활용한 Colorpoint 작성

 super()를 이용하여 Colorpoint 클래스 생성자에서 슈퍼 클래스 Point의 생성자를 호출하는 예를 보인다.

 

blue(5,6)

 

package Luxuryjava05;

class Point {
	private int x, y;

	public Point() {
		this.x = this.y = 0;
	}

	public Point(int x, int y) {
		this.x = x;
		this.y = y;
	}

	public void showPoint() {
		System.out.println("(" + x + "," + y + ")");
	}
}

class ColorPoint extends Point {
	private String color;

	public ColorPoint(int x, int y, String color) {
		super(x, y);
		this.color = color;
	}

	public void showColorPoint() {
		System.out.println(color);
		showPoint();
	}
}

public class SuperEx {

	public static void main(String[] args) {
		ColorPoint cp = new ColorPoint(5, 6, "blue");
		cp.showColorPoint();

	}
}

 

 

 

 

| 예제 5-4 | instanceof 연산자 활용

instanceof 연산자 활용하여 상속 관계에 따라 레퍼런스가 가리키는 객체의 타입을 알아본다. 실행 결과는 무엇인가?

 

new Student() -> Person Student 

new Researcher() -> Person Researcher 

new Professor() -> Person Researcher Professor 

 

package Luxuryjava05;

class Person{}
class Student extends Person {}
class Researcher extends Person {}
class Professor extends Researcher {}

public class InstanceOfEx {
	
	static void print(Person p) {
		if(p instanceof Person)
			System.out.print("Person ");
		if(p instanceof Student)
			System.out.print("Student ");
		if(p instanceof Researcher)
			System.out.print("Researcher ");
		if(p instanceof Professor)
			System.out.print("Professor ");
		System.out.println();
		
	}

	public static void main(String[] args) {
		System.out.print("new Student() -> \t");
		print(new Student());
		System.out.print("new Researcher() -> \t");
		print(new Researcher());
		System.out.print("new Professor() -> \t");
		print(new Professor());
	}

}

 

 

 

 

 

| 예제 5-5 | 메소드 오버라이딩으로 다형성 실현

Shape의 draw() 메소드를 Line, Circle, Rect 클래스에서 목적에 맞게 오버라이딩하는 다형성의 사례

 

Line

Shape

Line
Rect

Circle

 

package Luxuryjava05;

class Shape {
	protected Shape next;
	protected Shape() { next = null; }
	
	protected void draw() {
		System.out.println("Shape");
	}
}

class Line extends Shape {
	protected void draw() {
		System.out.println("Line");
	}
}

class Rect extends Shape {
	protected void draw() {
		System.out.println("Rect");
	}
}

class Circle extends Shape {
	protected void draw() {
		System.out.println("Circle");
	}
}

public class MethodOverridingEx {
	static void paint(Shape p) {
		p.draw();
	}

	public static void main(String[] args) {
		Line line=new Line();
		
		paint(line);
		paint(new Shape());
		paint(new Line());
		paint(new Rect());
		paint(new Circle());

	}

}

 

 

 

 

| 예제 5-6 | 

 

 

 

 

| 예제 5-7 | 

 

 

 

 

| 예제 5-8 | 

 

 

 

 

| 예제 5-9 | 

 

 

 

 

 

5. 상속.pdf
4.06MB

 

 

 

 

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

 

 

 

 

 

 

 

명품자바프로그래밍 1장 요약, 예제

명품자바프로그래밍 2장 요약, 예제

명품자바프로그래밍 3장 요약, 예제

명품자바프로그래밍 4장 요약, 예제

 


 

 

명품자바프로그래밍 4장 연습문제

 

 

클래스와 객체

 

1. 자바의 클래스와 객체에 대한 설명 중 틀린 것은?

 

1. 클래스 바깥에 전역 변수는 선언할 수 없다.

2. 클래스는 객체를 생성하기 위한 틀이다.

3. 클래스의 멤버 변수를 필드라고 부르며, 클래스는 필드와 메소드로 이루어진다..

4. 필드는 클래스 내에서 private 보다 public으로 선언하는 것이 바람직하다. --> private

 

 

 

 

2. 생성자에 대한 설명 중 틀린 것은?

 

1. 생성자가 작성되어 있지 않으면, 컴파일러가 자동으로 기본 생성자를 추가해준다.

2. 생성자의 이름은 클래스의 이름과 반드시 같아야 한다.

3. this()는 생성자 내에서 다른 생성자를 호출하는 코드이다.

4. 생성자에서는 아무 값도 리턴하지 않기 때문에 return문을 사용할 수 없다. --> 실행을 끝낼 때 생성자 코드 내 return; 문 사용

 

 

 

 

3. 다음 코드 중 오류가 있는 것은? (배열생성문법)

 

1. Power []p = new Power[10];   

2. Power p[] = new Power[10];   

3. Power p[10] = new Power[10];   

4. Power[] p;

 

 

 

 

4. 다음 코드에 대해 설명하는 문항 중 틀린 것은?

 

Book[] book = new Book[10];

 

1. book은 배열에 대한 레퍼런스이다.

2. Book 객체가 10개 만들어진다.

3. for(int i=0; i<book.size; i++) book[i] = new Book();로 객체들을 만들어야 비로소 배열이 완성된다.

4. book[0], book[1], ... , book[9] 모두 Book 객체에 대한 레퍼런스이다.

 

 

 

 

5. 다음 중 메소드 오버로딩에 실패한 사례는?

 

1번.

--> 메소드 명과 매개변수의 개수와 타입이 달라 메소드 오버로딩에 실패한 사례이다. 

※ 리턴 타입이 다른 것은 오버로딩과 연관이 없다. 

 

(1) class A {
            int x;
            void f(int a) { x = a; }
            int f(int b) { return x+b; }
}

(2) class A {
            int x;
            void f(int a ) { x = a; }
            void f() { x = 0; }
}

(3) class A {
            int x;
            inf f() { return x; }
            int f(int a, int b) { return a+b; }
}

(4) class A {
            static int x=0;
            static int f(int a) { return a+x; }
            static int f() { return 3; }
}

 

 

 

 

6. 다음 코드를 보고 물음에 답해라.

 

class TV {
   private int size;
   private String manufacturer;
   
   public TV() {
      size = 32;
      manufacturer = "LG";
      
      System.out.println(size+"인치 "+ manufacturer);
   }
   public TV(String manufacturer) {
      this.size = 32;
      this.manufacturer = "LG";
      
      System.out.println(size+"인치 "+manufacturer);
   }
   public TV(int size, String manufacturer) {
      this.size = 32;
      this.manufacturer = "LG";
      
      System.out.println(size+"인치 "+manufacturer);
   }
}

 

 

(1) this()를 이용하여 생성자를 수정하라.

 

class TV {
   int size;
   String manufacturer;
   
   public TV() {
      this(32, "LG");
   }
   public TV(String manufacturer) {
      this(32, manufacturer);
   }
   public TV(int size, String manufacturer) {
      this.size=size;
      this.manufacturer=manufacturer;
      
      System.out.println(size+"인치 "+manufacturer);
   }
}

 

 

(2) new TV(); 와 new TV("삼성"); 를 실행하면 실행 결과는 각각 무엇인가?  --> 32인치 LG, 32인치 삼성

 

(3) 65인치 "삼성" TV 객체를 생성하는 코드를 적어라.  

 

new TV(65,"삼성");

 

 

(4) this()를 이용하는 장점은?  --> 같은 클래스 내의 다른 생성자를 호출하여 사용할 수 있다.

 

 

 

 

7. 다음 클래스에는 컴파일 오류가 있다. 오류 부분을 지적하고 오류를 수정할 수 있는 방법을 모두 제시하라. 그리고 그 중 객체 지향 프로그래밍에 가장 적합한 방법을 설명하라.

 

class Person {
    private int age;
}
public class Example {
    public static void main (String args[]) {
        Person aPerson = new Person();
        aPerson.age = 17;
    }
}

 

객체 지향 프로그래밍에 가장 적합한 방법으로는 클래스의 주요 필드는 private로 해두고, 별도로 public 속성의 set, get 메소드를 만들어서 이 메소드를 통해 필드를 접근하게끔 하여 필드의 무결성을 유지하는 것이 좋다. 아래는 컴파일 오류가 나는 부분이다.

 

private int age;
// age가 private로 선언되어 있기 때문에, Person 클래스 밖에서 접근이 불가능

 

 

 

 

8. 다음 코드를 객체 지향 프로그래밍 관점에서 바람직한 코드로 수정하라.

 

class Power {
    public int kick;
    public int punch;
}
public class Example {
    public static void main (String args[]) {
        Power robot = new Power();
        robot.kick = 10;
        robot.punch = 20;
    }
}

 

<답>

 

class Power{
   private int kick;
   private int punch;
   
   public void setKick(int kick) {
      this.kick = kick;
   }
   public void setPunch(int punch) {
      this.punch = punch;
   }
}

 

 

 

 

9. 다음은 객체 소멸에 대한 설명이다. 보기에서 빈칸에 적절한 말을 삽입하라.

 

자바에서는 객체를 임의로  소멸시킬 수 없으며, 이것은 개발자에게 매우 다행한 일이다. 참조하는  레퍼런스 가 하나도 없는 객체를  가비지 라고 판단하고, 이를 가용 메모리로 자동 수집하는  가비지 컬렉션 을 진행시킨다. 응용프로그램에서 자바 플랫폼에게 이 과정을 지시하고자 하면  System.gc() 코드를 호출하면 된다.

 

 

 

 

10. 다음 코드가 실행될 때 가비지가 발생하는가? 만일 발생한다면 발생하는 위치와 과정을 설명하라.

 

(1) String s = null;
      for(int n=0; n<10; n++) {
            s = new String("Hello"+n);
            System.out.println(s); 
      }
      
(2) String a = new String("aa");
      String b = a;
      String c = b;
      a = null;
      b = null;      

 

(1) 에서 s가 가리키던 new String("Hello"+n); 부분이 반복문을 실행할수록 가비지가 발생한다.

(2) 에서는 가비지가 발생하지 않는다. (결국은 c가 String("aa")를 가리키기 때문)

 

 

 

 

11. 다음 클래스에서 멤버 함수의 사용이 잘못된 것은?  -->  (4) static 메소드에서 non-static 멤버를 접근할 수 없다.

 

class StaticTest {
    static int a;
    static int getA() { return a; } //(1)
    
    int b;
    int getB() { return b; } //(2)
    
    int f() { return getA(); } //(3)
    static int g() { return getB(); } //(4)
}

 

 

 

 

12. 다음 코드에서 잘못된 문장은? --> (1)번.  

 

class StaticSample {
    public int x;
    public static int y;
    public static int f() { return y; }
}
public class UsingStatic {

    public static void main (String[] args) {
        StaticSample.x = 5; //(1)
        StaticSample.y = 10; //(2)
        
        int tmp = StaticSample.f(); //(3)
        StaticSample a = new StaticSample();
        
        tmp = a.y; //(4)
    }
}

 

StaticSample StaticSample = new StaticSample();를 main 안에 써야 한다.

static 멤버는 new에 의해 객체가 생성되기 전에 사용이 가능하다.

 

 

 

 

13. 다음 소스에 틀린 부분이 있는지 판단하라. 만일 있다면 수정하라.

 

class Test {
    public int f(int a, int b) {
        return a + b;
    }
    public static void main (String[] args) {
        int sum = f(2,4);
    }
}

 

--> main이 static 타입이므로, f()를 호출하기 위해서는 f()도 static 타입이어야한다.

즉 static public int f(int a, int b) { return a + b; }로 변경해야 한다.

 

 

 

 

14. 다음 코드에는 final과 관련하여 3가지 잘못된 것이 있다. 잘못된 내용을 설명하라.

 

final class Rect {
    final protected int x = 5;
    final public void f() {
        x++;
        System.out.pring(x);
    }
}
class SpecialRect extends Rect { // Rect 상속
    public void f() {
        System.out.print(super.x); // super.x는 Rect의 x
    }
}

 

x++; ------ final 붙은 변수는 상수기에 변수처럼 변경할 수 없다.

class SpecialRect extends Rect {}  ------  final 붙은 클래스는 상속받지 못한다.

System.out.print(super.x);  ------  final 붙은 메소드는 오버라이딩을 사용할 수 없다.

 

 

 

 

15. 가비지와 가비지 컬렉션은 표준 C나 C++에는 없는 자바 언어의 독특한 특성이다. 가비지란 무엇인지, 자바에서는 왜 가비지 컬렉션이 필요한지, 가비지 컬렉션이 개발자에게 주는 장점과 단점은 무엇인지 설명하라.

 

- 가비지란 new 연산자를 이용하여 시스템으로부터 할당받아 사용되다가 더 이상 사용하지 않는 객체나 배열 메모리를 말한다.

- 가비지가 많아지면 상대적으로 자바 가상 기계에서 으용프로그램에게 할당 해줄 수 있는 가용 메모리의 양이 줄어들어 자바 응용 프로그램의 실행에 영향을 줄 수 있으므로 가비지 컬렉션이 필요.

- 자바 가상 기계는 가용 공간이 일정 크기 이하로 줄어들게 되면 자동으로 가비지를 회수하여 가용 메모리 공간을 늘려 개발자는 할당받은 메모리를 반환하는 코딩 부담을 덜게 된다.

 

 

 

 

16. 다음 표를 완성하라. 멤버가 4가지 접근 지정자로 각각 선언되었을 때, 같은 패키지의 클래스와 다른 패키지의 클래스에서 이 멤버를 접근할 수 있는지 O, X로 표기하라.

 

  default public protected private
같은 패키지 클래스 o o o x
다른 패키지 클래스 x o x x

 

 

 

 

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

 

 

 

 

 

 

 

명품자바프로그래밍 1장 요약, 예제

명품자바프로그래밍 2장 요약, 예제

명품자바프로그래밍 3장 요약, 예제

 

 


 

 

명품자바프로그래밍 4장 요약

 

 

클래스와 객체

 

객체 지향 언어의 특징 3가지

 

캡슐화 : 클래스라는 캡슐을 사용하며 필드(멤버변수)와 메소드(멤버함수)로 구성된다.

상속 : 자식클래스(sub class)가 부모 클래스(super class)의 속성을 물려받아 사용하고 기능을 추가(extends) 하는 것.

다형성 : 같은 이름의 메소드가 클래스나 객체에 따라 다르게 동작하도록 구현되는 것.

- overriding 오버라이딩 : 슈퍼클래스를 서브클래스에서 동일한 이름으로 자신의 특징에 맞게 재구현하는 것

- overloading 오버로딩 : 클래스 내에서 이름이 같지만 서로 다르게 동작하는 메소드를 여러개 만드는 것

 

 

객체 지향 언어의 목적

 

소프트웨어의 생산성 향상, 실세계에 대한 쉬운 모델링

객체 : 클래스 모양대로 생성된 실체. 클래스의 인스턴스 instance. 사례

클래스 : 객체를 만들기 위한 설계도.

멤버 : 클래스의 구성 요소. 필드와 메소드 두 종류가 있다.

필드 : 객체 내 값을 저장할 멤버 변수

메소드 : 함수이며 객체의 행동을 구현

 

 

접근 지정자 access specifier

 

접근의 범위 지정. public, private, protected, default.

 

 

생성자 constructor

 

- new를 통해 객체가 생성될 때 자동으로 한번만 호출.

- 객체 초기화를 위해 실행되는 클래스의 이름과 동일한 메소드.

- 오버로딩 : 매개변수의 개수와 타입만 다르다면 클래스 내에 생성자를 여러 개 둘 수 있다.

- 리턴 타입을 지정할 수 없다. public Circle() {...} (x) void(x) return;(0)

 

 

디폴트 생성자 default constructor 

 

매개변수와 실행코드가 없어 아무 일도 하지 않고 단순리턴하는 생성자

 

* 객체가 생성될 때 반드시 실행되기에 생성자가 없는 클래스는 없다.

-> 생성자가 하나도 없으면 컴파일러가 생성자를 자동 생성하여 컴파일러 오류가 호출되지 않음

* 생성자가 하나라도 존재하면 기본생성자가 자동으로 삽입되지 않음

-> 컴파일오류 발생

 

class Circle{
    public Circle(){}  //기본생성자(디폴트생성자). 단순 리턴만 함
}

 

 

 

레퍼런스 변수 선언 : null로 초기화된다.

Circle 타입 크기의 메모리 할당 -> Circle() 생성자 코드 실행

Circle pizza=new Circle();

 

Circle pizza;   //레퍼런스를 가지는 변수일 뿐 아직 객체가 생성된 것이 아니다. 
pizza=new Circle();  //객체 생성은 new 연산자를 사용해서 객체를 생성한다.

 

 

객체 멤버 접근 : 레퍼런스 변수 뒤 점 연산자를 붙인다.

 

pizza.radius=10;   //pizza 객체의 radius 필드에 10 대입
int r=pizza.radius; //pizza 객체의 radius 필드값 읽을 때

 

 

 

this 레퍼런스 : 객체 자신을 가리키는 레퍼런스. 메소드에서 사용되며 현재 실행되고 있는 메소드가 속한 객체에 대한 참조로 컴파일러에 의해 자동 관리된다. static에서는 사용될 수 없다.

 

public Circle(int radius) {this.radius=radius;}  
                            // 멤버,     매개변수
public Circle getMe() {return this;} //객체 자신의 레퍼런스 리턴

 

 

 

this() : 클래스 내에서 생성자가 다른 생성자를 호출할 때 사용되는 자바코드.

반드시 생성자 코드에서만 호출, 같은 클래스 내 다른 생성자 호출 시 사용, 생성자의 첫 번째 문장

 

 

 

객체 배열 : 기본 타입 데이터 외 객체에 대한 레퍼런스를 원소로 갖는 배열

 

Circle[] c;    //배열에 대한 레퍼런스 선언
c=new Circle[5];    //Circle 객체에 대한 레퍼런스 생성
for(int i=0; i<c.length; i++)    //c.length는 배열 c의 크기(5)  
   c[i]=new Circle(i);    //i번째 Circle 객체 생성

 

 

 

 

명품자바프로그래밍 클래스와 객체 4장 예제

 

| 예제 4-1 | 반지름과 이름을 가진 Circle 클래스를 작성하고, Circle 클래스의 객체를 생성하라. 그리고 객체가 생성된 모습을 그려보라.

 

* No enclosing instance of type ... is accessible 컴파일 오류 : 보통 내부에 있는 클래스를 static 함수를 참조할 때 에러
>> 자바피자의 면적은 314.0, 등킨드나쓰의 면적은 12.56

 

package Luxuryjava04;

	public class Circle {
    
		int radius;   //원의 반지름필드 
		String name;  //원의 이름필드 

		public Circle() { }  //생성
        
		public double getArea() {
			return 3.14*radius*radius;
		}

	public static void main(String[] args) {
    
		Circle pizza; //참조변수 피자 선언 
        
		pizza=new Circle(); //원 객체 생성 
		pizza.radius=10; //피자 반지름 설정 
        
		pizza.name="자바피자"; // 피자 이름설정 
		double area=pizza.getArea(); //피자 면적알기 
        
		System.out.println(pizza.name+"의면적은"+area);
		
		Circle donut=new Circle(); //원 객체 생성 
        
		donut.radius=2; //도넛 반지름 설정
		donut.name="등킨드나쓰"; //도넛 이름설정
        
		area=donut.getArea();  //도넛 면적알기
        
		System.out.println(donut.name+"의면적은"+area);			
	}
}

 

 

 

 

| 예제 4-2 | 너비와 높이를 입력받아 사각형의 합을 출력하는 프로그램을 작성하라. 너비와 높이 필드, 그리고 면적 값을 제공하는 getArea() 메소드를 가진 Rectangle 클래스를 만들어 활용하라. *객체는 new 연산자로 생성하고, .쩜 연산자로 멤버를 접근한다.

 

>> 4 5

사각형의 면적은 20

 

package Luxuryjava04;

import java.util.Scanner;

class Rectangle{

	int width, height;
    
	public int getArea() {
    
		return width*height;
	}
}
public class RectApp {

	public static void main(String[] args) {
    
		Rectangle rect=new Rectangle();  //객체 생성
        
		Scanner s=new Scanner(System.in);
		System.out.print(">>");
        
		rect.width=s.nextInt();
		rect.height=s.nextInt();
        
		System.out.println("사각형의 면적은 "+rect.getArea());
        
		s.close();
	}
}

 

 

 

 

| 예제 4-3 | 다음 코드는 2개의 생성자를 가진 CircleA 클래스다. 실행 결과는?

 

>> javapizza의 면적은 314.0

oraclepizza의 면적은 3.14

 

package Luxuryjava04;

public class CircleA {
	int radius;
	String name;
    //생성자는 클래스 이름과 동일 
    
	public CircleA() { //매개변수 없는 생성자 
		radius=1; name="";  // field 초기화 
	}
	//생성자는 리턴타입 없음 
    
	public CircleA(int r, String n) {  //매개변수를 가진 생성자 
		radius=r; name=n; //매개변수로 필드 초기화 
	}
	public double getArea() {
		return 3.14*radius*radius;
	}
	
	public static void main(String[] args) {
    
		CircleA pizza=new CircleA(10, "javapizza"); 
		//객체 생성,반지름과 이름 초기화
        
		double area=pizza.getArea();
        
		System.out.println(pizza.name+"의 면적은 "+area);
		
		CircleA donut=new CircleA(); //객체 생성,반지름과 이름 초기화
		donut.name="oraclepizza";  //이름변경
        
		area=donut.getArea();
        
		System.out.println(donut.name+"의 면적은 "+area);
	}
}

 

 

 

 

| 예제 4-4 | 제목과 저자를 나타내는 title과 author필드를 가진 Book 클래스를 작성하고, 생성자를 작성하여 필드를 초기화하라.

 

>> 어린왕자 생텍쥐페리

춘향뎐 작자미상

 

package Luxuryjava04;

public class Book {
	String title, author;
	
	public Book(String t) {  //생성자로 오버로딩. 
		title=t;
		author="작자미상";
	}
	public Book(String t, String a) { //생성자로 오버로딩. 매개변수의 개수가 다름.
		title=t;
		author=a;
	}
	
	public static void main(String[] args) {
    
		Book littlePrince=new Book("어린왕자", "생텍쥐페리");
		Book llovestory=new Book("춘향뎐");
        
		System.out.println(littlePrince.title+" "+littlePrince.author);
		System.out.println(llovestory.title+" "+llovestory.author);
	}
}

 

 

 

 

| 예제 4-5 | 4-4에서 작성한 Book클래스의 생성자를 this()를 이용하여 수정하라. 

 

>> 생성자 호출됨

춘향뎐 작자미상

 

package Luxuryjava04;

public class Book {
	String title, author;
	
	void show() {
		System.out.println(title+" "+author);
	}
	
	public Book() {
		this("","");
		System.out.println("생성자 호출됨");
	}
	
	public Book(String title) {   
		this(title,"작자미상");
	}
	public Book(String title, String author) { 
		this.title=title;
		this.author=author;
	}
	
	public static void main(String[] args) {
    
		Book littlePrince=new Book("어린왕자", "생텍쥐페리");
		Book llovestory=new Book("춘향뎐");
        
		Book emptyBook=new Book();
		llovestory.show();
	}
}

 

 

 

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

 

 

 

 

명품자바프로그래밍 1장 요약, 예제

명품자바프로그래밍 2장 요약, 예제

명품자바프로그래밍 3장 요약, 예제

명품자바프로그래밍 3장 연습문제

 

 


 

 

명품자바프로그래밍 3장 실습문제

 

반복문과 배열 그리고 예외 처리

 

1. 다음 프로그램에 대해 물음에 답하라. #명품자바프로그래밍3장1번실습문제

int sum=0, i=0; 

while (i<100){
   sum=sum+i;
   i+=2;
}

System.out.println(sum);

 

(1) 무엇을 계산하는 코드이며 실행 결과 출력되는 내용은?

100보다 작은 짝수의 합. 2450

(2) 위의 코드를 main()메소드로 만들고 WhileTest 클래스로 완성하라.

package Luxuryjava03;

public class WhileTest {

	public static void main(String[] args) {
    
		int sum=0, i=0;
        
		while(i<100) {
			sum=sum+i;
			i+=2;
		}
		System.out.println(sum);
	}
}

 

(3) for 문을 이용하여 동일하게 실행되는 ForTest 클래스를 작성하라.

package Luxuryjava03;

public class ForTest {

	public static void main(String[] args) {
    
		int sum=0, i=0;
        
		for(i=0; i<100; i+=2) {
			sum=sum+i;
		}
        
		System.out.println(sum);
	}
}

 

(4) do-while 문을 이용하여 동일하게 실행되는 DowhileTest 클래스를 작성하라.

package Luxuryjava03;

public class DowhileTest {

	public static void main(String[] args) {
    
		int sum=0, i=0;
        
		do{
			sum=sum+i;
			i+=2;
            
		}while(i<100);
        
		System.out.println(sum);
	}
}

 

 

 

 

2. 다음 2차원 배열 n을 출력하는 프로그램을 작성하라. #명품자바프로그래밍3장2번실습문제

int n[][] = {{1}, {1,2,3}, {1}, {1,2,3,4}, {1,2}} ;
1
1 2 3
1
1 2 3 4
1 2

※ 1*5 배열. n.length : 줄의 개수, n[i].length : i번째 줄의 배열 갯수
※ length() : 문자의 길이 / length : 배열의 길이

package Luxuryjava03;
public class h0302 {
	public static void main(String[] args) {
		int n[][] = {{1}, {1,2,3}, {1}, {1,2,3,4}, {1,2}} ;
		for(int i=0; i<n.length; i++) {
			for(int j=0; j<n[i].length; j++) {
			System.out.print(n[i][j]+" ");
		}
			System.out.println();
	   }
    }
}

 

 

※ 각 행별의 평균을 구하려면?

 

package Luxuryjava03;

public class h0302 {

	public static void main(String[] args) {
		int n[][] = { { 1 }, { 1, 2, 3 }, { 1 }, { 1, 2, 3, 4 }, { 1, 2 } };
		for (int i = 0; i < n.length; i++) {
			int sum = 0;

			for (int j = 0; j < n[i].length; j++) {
				System.out.print(n[i][j] + "\t");
				sum += n[i][j];
			}
			System.out.println((double) sum / n[i].length);
		}
	}
}

 

 

 

 

3. Scanner를 이용하여 정수를 입력받고 다음과 같이 *를 출력하는 프로그램을 작성하라. 다음은 5를 입력받았을 경우이다. #명품자바프로그래밍3장3번실습문제 #자바별찍기 #자바역삼각형만들기

정수를 입력하시오 >> 5

*****
****
***
**
*

 

※ for문, 변수 2개

package Luxuryjava03;
import java.util.Scanner;

public class h0303 {
	public static void main(String[] args) {
		System.out.println("정수를 입력하시오>>");
        Scanner s=new Scanner(System.in);
		int n=s.nextInt();

	for(int i=0; i<n; i++) {
		for(int j=0; j<n-i; j++) {     
			System.out.print("*");
		}
		System.out.println();
	}
	s.close();
	}
}

 

※ 응용 - 반대로 별을 찍을 때

package Luxuryjava03;
import java.util.Scanner;
public class h0303 {
	public static void main(String[] args) {
		System.out.print("정수를 입력하시오>>");
		Scanner s=new Scanner(System.in);
		int n=s.nextInt();
		for(int i=0; i<n; i++) {
			for(int j=0; j<=i; j++) {
					System.out.print('*');
			}
			System.out.println();
		}
	s.close();
	}
}

 

 

※ 응용 - 자바 피라미드 그리기 #자바피라미드찍기

 

package Luxuryjava03;
import java.util.Scanner;
public class h0303 {
	public static void main(String[] args) {
		System.out.print("정수를 입력하시오>>");
		Scanner s=new Scanner(System.in);
		int n=s.nextInt();

		for(int i=0; i<n; i++) {
			for(int j=1; j<n-i; j++) {
					System.out.print(" ");
			}
			for(int k=0; k<i*2+1; k++) {
				System.out.print("*");
			}
			System.out.println();
		}
	s.close();
	}
}
package Luxuryjava03;
import java.util.Scanner;
public class h03032 {
	public static void main(String[] args) {
		System.out.print("정수를 입력하시오>>");
		Scanner s=new Scanner(System.in);
		int n=s.nextInt();
     	System.out.println();

        for (int i=0; i<n; i++) {   // i=0,1,2,3,4
          for (int j=n-1; j>i; j--) { 
                   // i=0 j=4,3,2,1 / i=1 j=4,3,2 / i=2 j=4,3 / i=3 j=4 / i=4 (i=j 므로 제외)
                   // j는 4부터 시작하여 i보다 클때까지 - 
            System.out.print(" ");
        }
          for (int k = 1; k <= i*2+1; k++) {  //k는 1부터 시작
            System.out.print("*"); //  i 가  0 -->0*2+1 1 1  =         1 
                                    // i 가 1 -->1*2+1  3 3 <=       1,2,3
                                    // i 가 2 -->2*2+1  5 5 <=     1,2,3,4,5
                                    // i 가 3 -->3*2+1  7 7 <=   1,2,3,4,5,6,7
                                    // i 가 4 -->4*2+1  9 9 <= 1,2,3,4,5,6,7,8,9                    
          }
        System.out.println();
    } 
package Luxuryjava03;
import java.util.Scanner;
public class  h03032 {
	public static void main(String[] args) {
		System.out.print("정수를 입력하시오>>");
		Scanner s=new Scanner(System.in);
		int n=s.nextInt();
     	System.out.println();
 
   for(int i=0; i<n; i++){     // 0, 1, 2, 3, 4
     	for(int j=1; j<n-i; j++){      // i=0 2<
            System.out.print(" ");
     	}
		for(int k=0; k<i*2+1; k++){    // +1: 홀수. 홀수여야 양쪽 동일.
			System.out.print("*");
		}
		System.out.println(" ");
	}
	s.close();
	}
}

 

※ 응용 - 자바 역피라미드 그리기 #자바역피라미드만들기 #자바역삼각형찍기

https://dpdpwl.tistory.com/5 참고하기

※ 응용 - 자바 다이아몬드 그리기 #자바다이아몬드찍기 #자바다이아몬드만들기

 

 

 

4. Scanner를 이용하여 소문자 알파벳을 하나 입력받고 다음과 같이 출력하는 프로그램을 작성하라. 다음은 e를 입력받았을 경우이다.

소문자 알파벳 하나를 입력하시오 >> e

abcde
abcd
abc
ab
a

※ Scanner는 문자를 입력받는 기능이 없으므로 문자열을 입력받아야 한다.
String s=scanner.next(); ----문자열 읽기 char c=s.charAt(0); -------문자열의 첫 번째 문자

 

 

 

5. 양의 정수 10개 입력받아 배열에 저장하고, 배열에 있는 정수 중에서 3의 배수만 출력하는 프로그램을 작성하라. 

 

 

 

 

 

6. 배열과 반목문을 이용하여 프로그램을 작성해보자. 키보드에서 정수로 된 돈의 액수를 입력받아 오만 원권, 만 원권, 천 원 권, 500원, 100원, 50원, 10원, 1원짜리 동전이 각 몇 개로 변환되는지 예시와 같이 출력하라. 이 때 반드시 다음 배열을 이용하고 반복문으로 작성하라.

int []unit={50000, 10000, ....}; 

 

 

 

 

7. 정수를 10개 저장하는 배열을 만들고 1에서 10까지 범위의 정수를 랜덤하게 생성하여 배열에 저장하라. 그리고 배열에 든 숫자들과 평균을 출력하라. #명품자바3장7번실습문제

int i = (int)(Math.random()*10+1);

 

 

8. 정수를 몇 개 저장할 지 키보드로부터 100보다 작은 갯수를 입력받아 정수 배열을 생성하고, 이곳에 1에서 100까지 범위의 정수를 랜덤하게 삽입하라. 배열에는 같은 수가 없도록 하여 배열을 출력하라. #명품자바3장8번실습문제

정수 몇 개 ?  24
48 33 74 94 17 39 55 8 59 81
... (랜덤한 정수가 24개 출력)

 

 

 

9. 4x4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 랜덤하게 생성하여 정수 16개를 배열에 저장하고, 2차원 배열을 화면에 출력하라. #명품자바3장9번실습문제

6     10      1     8

1      3      7     2

8      4      5     1

1      8      4     4

 

 

 

10. 4x4의 2차원 배열을 만들고 이곳에 1에서 10까지 범위의 정수를 10개만 랜덤하게 생성하여 임의의 위치에 삽입하라. 동일한 정수가 있어도 상관없다. 나머지 6개의 숫자는 모두 0이다. 만들어진 2차원 배열을 화면에 출력하라. #명품자바3장10번실습문제

5     0     8     6

0     7     9     5

2     4     0     8

0     0     0     8

 

 

 

11. 다음과 같이 작동하는 Average.java를 작성하라. 명령행 인자는 모두 정수만 사용되며 정수들의 평균을 출력한다. 다음 화면은 컴파일된 Average.class파일을 c:\Temp 디렉토리에 복사한 뒤 실행한 경우이다. 원본 Average.class파일은 이클립스의 프로젝트 폴더 밑 bin폴더에 있다. 

C: \Temp>java Average 2 3 4

3   ------- 2 3 4의 평균

C :\Temp>

 

 

 

12. 다음과 같이 작동하는 Add.java를 작성하라. 명령행 인자 중에서 정수만을 골라 합을 구하라. 다음 화면은 명령프롬프트에서 Add.class파일을 c:\Temp 디렉토리에 복사한 뒤 실행한 경우이다. 원본 Add.class파일은 이클립스 폴더 밑 bin폴더에 있다.

C: \Temp>java Add 2 3 aa 5 6.5  ---- 이 중 정수만 더하여 출력
10
C :\Temp>java Add Heaven 3 4 4.3 c
7
C :\Temp>


※ 문자열을 정수로 변환할 때 다음 코드를 이용하라.

int i = Integer.parseInt("10");   // i는 10

 

 

 

13. 반복문을 이용하여 369게임에서 박수를 쳐야 하는 경우를 순서대로 화면에 출력해보자. 1부터 시작하며 99까지만 한다. 

 

 

 

14. 다음 코드와 같이 과목과 점수가 짝을 이루도록 2개의 배열을 작성하라.

String course[]={"Java", "C++", "HTML5", "컴퓨터구조", "안드로이드"};
int course[]={95, 88, 76, 62, 55};

그리고 다음 예시와 같이 과목 이름을 입력받아 점수를 출력하는 프로그램을 작성하라. "그만"을 입력받으면 종료한다. ※ 문자열을 비교하기 위해서는 String 클래스의 equals()메소드를 이용해야 한다.

과목 이름 >>  Jaba
없는 과목입니다.

과목 이름 >>  Java
Java의 점수는 95

과목 이름 >>  C++
C++의 점수는 88

과목 이름 >>  그만

 

 

 

15. 다음은 2개 정수를 입력받아 곱을 구하는 Multiply 클래스이다.

import java.util.Scanner;
public class Multiply{
  public static void main(String[]args){
  Scanner scanner=new Scanner(System.in);
  int n=scanner.nextInt();
  int m=scanner.nextInt();
  System.out.print(n+"x"+m+"="+n*m);
  scanner.close();
  }
}

다음과 같이 실행할 때 프로그램은 10과 5를 곱해 50을 잘 출력한다. 하지만 실수를 입력하면 예외가 발생하는데, 실수가 입력되면 정수를 다시 입력하도록 하여 예외 없이 정상적으로 처리되도록 예외 처리 코드를 삽입하여 Multiply 클래스를 수정하라.

곱하고자 하는 두 수 입력 >> 10 5
10x5=50

※ InputMismatchException 예외를 처리할 try-catch 코드를 작성하고, catch 블록에서 Scanner에 이미 입력된 키를 모두 제거하기 위해 Scanner의 nextLine()을 호출하라.

곱하고자 하는 두 수 입력 >> 2.5 4
실수는 입력하면 안됩니다.

곱하고자 하는 두 수 입력 >> 4  3
4x3=12

 

 

 

16. 컴퓨터와 독자 사이의 가위바위보 게임을 만들어보자. 예시는 다음 그림과 같다. 독자부터 먼저 시작하여 가위 바위 보 중 하나를 입력하고 <Enter>키를 치면, 프로그램은 가위 바위 보 중에서 랜덤하게 하나를 선택하고 컴퓨터가 낸 것으로 한다. 독자가 입력한 값과 랜덤하게 선택한 값을 비교하여 누가 이겼는지 판단한다. 독자가 가위 바위 보 대신 "그만"을 입력하면 게임Over.

컴퓨터와 가위 바위 보 게임을 합니다.

가위 바위 보! >> 바위
사용자 = 바위, 컴퓨터 = 가위, 사용자가 이겼습니다

가위 바위 보! >> 그만
게임을 종료합니다...

※ 랜덤숫자 함수 : Math.random()
※ 비교 : str[n].equals()

 

 

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

 

 

 

 

 

명품자바프로그래밍 1장 요약, 예제

명품자바프로그래밍 2장 요약, 예제

명품자바프로그래밍 3장 요약, 예제

 

 


 

 

명품자바프로그래밍 3장 연습문제

 

반복문과 배열 그리고 예외 처리

 

 

| 연습문제 3-1 | 다음 프로그램의 출력 결과는 무엇인가? 그리고 무엇을 하는 코드인가?

 

1,3,5,7,9. i를 1부터 2씩 더하는 코드.

 

for(int i=1; i<10; i+=2) {
    System.out.print(i+"");
}

 

 

 

| 연습문제 3-2 | 다음 for 문의 실행 결과 sum 값이 다른 하나는?

 

1) for(int i=0; i<10; i++) sum += i;

2) for(int i=9; i>0; i--) sum += i;

3) for(int i=0; i>10; i++) sum++;

4) for(int i=0; i<10; sum+=i, i++);

 

 

 

| 연습문제 3-3 | 1에서 100까지 3의 배수를 더하는 while 문의 빈칸에 적절한 코드를 삽입하라.

 

continue

 

int sum=0, i=1;
while (i<100) {
    if(i%3 != 0) {
        i++;
        _________;
    }
    else sum += i;
    i++;
}

 

 

| 연습문제 3-4 | 1에서 50까지의 합을 더하는 while 문이다. 빈칸에 적절한 코드를 삽입하라.

 

i>50

 

package Luxuryjava03;
public class y0304 {
	public static void main(String[] args) {
		int sum=0,i=1;
		while (true) {
		    if(_______) break;
		    sum+=i;
		    i++;  
		} 
		System.out.println(sum);
	}
}

 

 

 

| 연습문제 3-5 | 다음 중 배열 선언이 잘못된 것은?

 

1) int[] n = {1, 2, 3, 4, 5};

2) int n[] = {0};

3) int[] n = new int[3];

4) int n[3] = new int[3];

 

 

 

| 연습문제 3-6 | 다음 코드에 대해 실행 중 오류가 발생하는 것은?

 

int array[] = (1, 2, 3, 4, 5);

 

1) array[0] = -1;

2) int list[] = array;

3) System.out.println(array[4]);

4) array[array.length] = 100;

 

 

 

 

| 연습문제 3-7 | 배열을 선언하고 생성하는 다음 물음에 답하라.

1) 10개의 문자를 가지는 배열 c를 생성하는 코드를 한 줄로 쓰라.

char c[] = new char[10];

2) 0에서 5까지 정수 값으로 초기화된 정수 배열 n을 선언하라.

int n[] = {0, 1, 2, 3, 4, 5};

(3) '일', '월', '화', '수', '목', '금', '토'로 초기화된 배열 day를 선언하라.

char day[] = {‘일’, ‘월’, ‘화’, ‘수’, ‘목’, ‘금’, ‘토’};

 

 

| 연습문제 3-8 | 배열을 선언하고 생성하는 다음 물음에 답하라.

1) 4개의 논리 값을 가진 배열 bool을 선언하고 true, false, false, true로 선언하라.

boolean bool[] = {true, false, false, true};

2) 5행 4열 크기의 2차원 실수 배열 d를 선언하라.

double d[][] = new double[5][4];

(3) 1에서 12까지 순서대로 초기화되는 4행 3열의 2차원 배열 val을 선언하라.

int val[][] = {{1, 2, 3}, {4, 5, 6}, {7, 8, 9}, {10, 11, 12}};​

 

 

| 연습문제 3-9 | 다음 자바 코드의 어느 부분에 컴파일 오류가 있는 지 찾고 발생원인과 수정된 코드를 기술하라.

int myArray[];
myArray[0] = 1;
myArray[1] = myArray[0] + 1;

 

int myArray[] 배열의 크기를 지정해줘야 한다.

 

int myArray[] = new int[2];
myArray[0] = 1;
myArray[1] = myArray[0] + 1;

 

 

 

 

| 연습문제 3-10 | 배열 alpha를 모두 출력하고자 한다. 빈칸에 적절한 코드를 삽입하시오.

 

(1)

char[] alpha = {'a', 'b', 'c', 'd'};

for(____int i=0; i<alpha.length; i++_____)

System.out.print(alpha[i]);

(2)

char[] alpha = {'a', 'b', 'c', 'd'};

for(____char c : alpha____)

System.out.print(c);

 

 

 

 

| 연습문제 3-11 | 다음 소스의 출력 결과는?  1 3 1 4 2

 

int n[][] = {{1}, {1, 2, 3}, {1}, {1, 2, 3, 4}, {1, 2}};
for(int j=0; j<n.length; j++)
    System.out.print(n[j].length + " ");

 

 

 

| 연습문제 3-12 | 다음 그림과 같은 구조를 가지는 double 타입의 2차원 배열을 선언하고, 값을 직접 배열에 삽입하는 방법으로 그림에 있는 값으로 초기화하는 코드를 작성하라.

 

double arr[][] = {{1.1, 1.2, 1.2, 1.4}, {2.1, 2.2}, {3.1, 3.2, 1.2}, {4.1}};

 

1.1

1.2

1.2

1.4

2.1

2.2

3.1

3.2

1.2

4.1

 

 

 

 

| 연습문제 3-13 | 다음 중 main() 메소드에 대한 설명 중 틀린 것은?

 

1) 원형은 public abstract void main(String[] args)이다.

2) 자바 프로그램은 main() 메소드에서부터 실행을 시작한다.

3) 명령행이 java Hello abc 5이면, "abc"와 "5"가 문자열 배열로 만들어져 Hello 클래스 안에 있는 main() 메소드에 전달된다.

4) 명령행이 java Hello abc 5일 때, Hello 클래스에 main() 메소드가 없으면 실행 시작 후 바로 오류를 내면서 종료한다.

 

 

| 연습문제 3-14 | 다음 문장에서 빈 칸에 적절한 단어를 찾아 삽입하라.

 

자바 프로그램이 문법에 맞지 않게 작성 되었을 때, 컴파일러 는 컴파일 오류를 발생시킨다. 예외 는 컴파일 오류가 없는 지비 프로그램이 실행 중 발생한 오류를 말하며, 프로그램이 이 오류에 대한 대처가 없다면 바로 종료 된다. 이런 오류가 발생할 가능성이 있는 코드들을 try 블록에 넣고, 오류가 발생하면 처리할 코드는 catch 블록에 넣는다. finally 블록은 생략 가능하다.

 

 

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

 

 

 

 

 

 

 

 

명품자바프로그래밍 1장 요약, 연습문제, 실습문제

명품자바프로그래밍 2장 요약, 예제

 

 


 

 

명품자바프로그래밍 3장 요약

 

 

반복문과 배열 그리고 예외 처리

 

자바의 반복문 : 중첩 반복도 여러 번 사용 가능. 반복문은 몇 번이고 중첩 반복 가능하다.

continue; 반복문 내에서 다음 반복으로 진행. break; 반복문 하나를 빠져나갈 때 사용

 

자바의 조건문이 궁금하다면? (이동)

 

(1) for ( 초기문; 조건식; 반복 후 작업 ){ 작업문 }

반복 횟수를 알 수 있는 경우. 조건식이 비워지거나 true면 무한반복

(2) while ( 조건식 ) { 작업문 }

반복 횟수를 알 수 없는 경우. 조건식이 비워지면 컴파일 오류 발생.

(3) do{ 작업문 } while ( 조건식 )

조건식이 작업문장 뒤에 있어서 한번 이상 작업문이 수행된다.

* while과 do-while은 초기문이 없기에 구문 시작 전 변수를 초기화 해야한다.

 

 

 

배열 : 인덱스와 인덱스에 대응하는 데이터들로 이루어진 연속적인 자료 구조로서 같은 타입의 데이터들이 순차적으로 저장된다. 자바에서 객체로 다루어지며 배열을 만드는 과정은 1) 배열 레퍼런스 변수 선언 , 2)배열 생성 과정으로 나뉜다. 배열 레퍼런스 변수 선언은 배열 객체의 주소 값을 가질 변수에 대한 선언이고 배열의 생성은 배열 원소에 대한 순차적 저장 공간을 확보하는 것이다. 배열 원소에 대한 접근은 배열 레퍼런스 변수명과 [ ] 사이에 원소의 인덱스를 적어 접근한다.

 

int [] array = new int[];    //1번방법
int array [] = new int[];    //2번방법

 

 

※ 배열의 크기는 배열 객체의 length 필드에 저장되며 첫 번째 원소의 인덱스는 0, 마지막 원소의 인덱스는 length-1이 된다. 배열의 인덱스는 정수만 가능. main() 메소드에 인자 전달은 String 타입의 배열을 이용한다.

 

배열의 크기 예외 : ArrayIndexOutOfBoundsException

 

 

 

배열과 for each 문

 

for (변수 : 배열레퍼런스) {반복작업문}

 

String names[]={"1", "2", "3", "4"};
for(String s:names) {
   System.out.print(s+"");
}

 

 

메소드가 배열을 리턴하는 경우 배열 공간 전체가 아닌 레퍼런스만 리턴된다. 따라서 리턴타입 선언 시 배열의 크기를 지정하지 않는다. 또한 리턴하는 배열의 타입이 리턴받는 레퍼런스 변수의 타입과 일치해야 한다.

 

 

int[] makeArray={   //리턴타입 / 메소드이름
   int temp[]=new int[4];     
   return temp;    //배열리턴
}

 

 

 

main( ) 메소드

 

자바가 실행을 시작할 때 자바가상기계JVM에 의해 호출되어야 하므로 public 속성이다.

자신을 포함하는 클래스의 객체가 생성되기 전 처음부터 JVM에 의해 호출되므로 static이다.

아무 값도 리턴하지 않기에 void 리턴타입을 가진다. 메인메소드를 끝내기 위해 리턴하려면 return;을 사용

※ 자바는 명령행에 입력된 인자들을 문자열배열 String[] 로 만들어 메인메소드에 매개변수로 전달한다. 이클립스의 run configuriation 창에서 도 손쉽게 입력받아 전달받을 수 있다.

 

public static void main(String[] args){  //명령행인자를 전달받는 코드
    String a=args[0];
    String b=args[1];
    String c=args[2];
}

 

 

 

try-catch-finally : 자바예외발생처리문. 자바프로그램 실행 중 발생하는 오류로써 트라이캐치 블록으로 잡아 처리할 수 있는 것을 Exception이라고 부른다. 자바가 발생한 예외를 처리하는 코드를 작성해두지 않으면 프로그램은 강제 종료된다.

try{ }블록 : 예외가 발생할 가능성이 있는 코드

catch( ){ }블록 : 예외가 발생했을 때 처리할 코드

finally { }블록 : 예외가 발생하든 안하든 최종 실행하려는 코드로 생략 가능

 

 

 

 

 

반복문과 배열 그리고 예외 처리 예제

 

 

1. for문을 이용하여 1부터 10까지 덧셈을 표시하고 합을 구하시오. #명품자바프로그래밍3장1번예제

 

package Luxuryjava03;
public class p0301 {
	public static void main(String[] args) {
		int sum=0;
		for(int i=1; i<=10; i++) {
			sum+= i;
			System.out.print(i);
			if(i<=9)
				System.out.print("+");
			else {
					System.out.print("=");
					System.out.print(sum);
				}
		}
	}
}  // 1+2+3+4+5+6+7+8+9+10=55

 

 

 

 

2. -1이 입력될 때까지 입력된 수의 평균 구하기 #명품자바프로그래밍3장2번예제

while은 반복 횟수를 알지 못할 경우에 이용된다고 했다. while문을 이용하여 정수를 계속 입력받아 합을 구하고 평균을 출력하는 프로그램을 만들어라. -1이 입력되면 입력을 종료한다.

 

package Luxuryjava03;
import java.util.Scanner;
public class p0302 {
	public static void main(String[] args) {
		int count=0;    // 입력된 정수의 개수 (평균값 구할 때 나눌 것)
		int sum=0;      // 합
		Scanner s=new Scanner(System.in);
		System.out.println("정수를 입력하고 마지막에 -1을 입력하세요.");
		int n=s.nextInt();
		while(n!=-1) {
			sum+=n;
			count++;
			n=s.nextInt();
		}
		if(count==0)System.out.println("입력된 수가 없습니다.");
		else {
			System.out.print("정수의 개수는 "+count+"개이며 ");
			System.out.println("평균은 "+(double)sum/count+"입니다.");
		}s.close();
	}  //  평균은 거의가 double을 사용합니다. sql도 실수값으로 생각함... 
}

 

 

 

 

3. do-while문을 이용하여 a부터 z까지 출력하는 프로그램을 작성하시오. #명품자바프로그래밍3장3번예제

 

package Luxuryjava03;
public class p0303 {
	public static void main(String[] args) {
		char c='a';
		do {
			System.out.print(c);
			c=(char)(c+1);
		}while(c<='z');
	}
}

 

 

 

 

4. 2중 중첩 for문을 사용하여 한 줄에 한 단씩 구구단을 출력하는 프로그램을 작성하시오. #명품자바프로그래밍3장4번예제 #자바구구단

 

package Luxuryjava03;
public class p0304 {
	public static void main(String[] args) {
		for(int i=1; i<10; i++) {
			for(int j=1; j<10; j++) {
				System.out.print(i+"*"+j+"="+i*j);
				System.out.print('\t');
			}
			System.out.println();
		}
	}
}

 

 

 

 

5. 5개의 정수를 입력 받고 그 중 양수들만 합하여 출력하는 프로그램을 만들어라. #명품자바프로그래밍3장5번예제 #자바양수합구하기

* continue : 반복문을 빠져 나가지 않으면서 다음 반복으로 진행

 

package Luxuryjava03;
import java.util.Scanner;
public class P0305 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.println("정수를 5개 입력하세요.");
		int sum=0;
		for(int i=0; i<5; i++) {
			int n=s.nextInt();
			if(n<=0)
				continue;    // 양수가 아닌 경우 다음반복 
			else
				sum+=n;     // 양수인 경우 더하기
		}
		System.out.println("양수의 합은 "+sum);
		s.close();
	}
}

 

 

 

 

6. exit이 입력되면 while문을 벗어나도록 break 문을 활용하는 프로그램을 작성하라. #명품자바프로그래밍3장6번예제

* break : 근처의 반복문을 벗어난다.

 

package Luxuryjava03;
import java.util.Scanner;
public class P0306 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.println("exit을 입력하면 종료쓰");
		while(true) {
			System.out.print(">>");
			String text=s.nextLine();    // nextLine 한줄단위입력
			if(text.equals("exit"))    // equals. 문자열 비교
				break;
		}
		System.out.println("종료데쓰...");
		s.close();
	}
}

 

 

 

 

7. 양수 5개를 입력받아 배열에 저장하고, 제일 큰 수를 출력하는 프로그램을 작성하라. #명품자바프로그래밍3장7번예제

 

package Luxuryjava03;
import java.util.Scanner;
public class P0307 {
   public static void main(String[] args){
   Scanner s=new Scanner(System.in);
  
   int intArray[]=new int[5];  //배열 생성
   int max=0;
   System.out.println("양수 5개를 입력하세요");
   for(int i=0; i<5; i++){   
   intArray[i] = s.nextInt();    // 입력받은 정수들을 배열에 저장
   if(intArray[i]>max)   //intArray[i]가 현재 가장 큰 수보다 크면
      max=intArray[i];
   }
  System.out.print("가장 큰 수는 "+max+"입니다.");
  s.close();
 }
}  // 양수 5개 1, 39, 78, 100, 99 중 가장 큰 수는 100입니다.

 

 

 

 

8. 배열의 length 필드를 이용하여 배열 크기만큼 정수를 입력받고 평균을 구하는 프로그램을 작성하라. #명품자바프로그래밍3장8번예제 #배열원소평균

 

package Luxuryjava03;
import java.util.Scanner;
public class p0308 {
   public static void main(String[] args){
     int intArray[]=new int[5];
     int sum=0;

     Scanner s=new Scanner(System.in);
     System.out.print(intArray.length+"개의 정수를 입력하시오>>");
     for(int i=0; i<intArray.length; i++) {
        intArray[i]=s.nextInt();
        sum+=intArray[i];
     } 
     System.out.print("평균은 "+(double)sum/intArray.length);
     s.close();
  }
}

 

 

 

 

9. for-each문을 활용하는 사례를 보자. #명품자바프로그래밍3장9번예제

* for-each : for(데이터형 변수이름k : 변수이름n) ---> 반복될 때마다 k는 num[0], num[1], ...

* enum: 새로운 열거형을 선언하면 새로운 클래스형이 만들어짐

 

package Luxuryjava03;   
public class P0309 {
  enum Week{월,화,수,목,금,토,일}
   public static void main(String[] args){
   int []n= {1,2,3,4,5};
   String names[]={"사과", "배", "바나나", "체리", "딸기", "포도"};

   int smu=0;
   for(int k:n){
      System.out.print(k+" ");
      sum+=k;
   }
   System.out.println("합은"+sum);
   for(String s:names)
      System.out.print(s+" ");
   System.out.println();
   for(Week day: Week.values())
      System.out.print(day+"요일 ");
   System.out.println();
}
}

 

 

 

 

10. 2차원 배열에 학년별로 1,2학기 성적으로 저장하고, 4년간 전체 평점 평균을 출력하라. #명품자바프로그래밍3장10번예제

 

package Luxuryjava03;
public class P0310 {
   public static void main(String[] args){
     double score[][]={{3.3, 3.4},{3.5, 3.6},{3.7, 4.0},{4.1, 4.2}};
     double sum=0;
     for(int year=0; year<score.length; year++)
        for(int term=0; term<score[year].length; term++)
          sum+=score[year][term];      //전체 평점 합(for문을 두 번 돌기에 전체 평점 합이 가능)
     int n=score.length;
     int m=score[0].length;
     System.out.println("4년 전체 평점 평균은 "+sum/(n*m));
}
}  // 4년 전체 평점 평균은 3.725

 

 

 

 

11. 다음 그림과 같은 비정방형 배열을 만들어 값을 초기화하고 출력하시오. #명품자바프로그래밍3장11번예제

 

 

package Luxuryjava03;
public class P0311 {
   public static void main (String[] args){
   intArray[][]=new int[4][];
   intArray[0]=new int[3];
   intArray[1]=new int[2];
   intArray[2]=new int[3];
   intArray[3]=new int[2];

   for(int i=0; i<intArray.length; i++)
     for(int j=0; j<intArray[i].length; j++)
       intArray[i][j]=(i+1)*10+j;     // 값을 초기화(입력)
   
   for(int i=0; i<intArray.length; i++){
     for(int j=0; j<intArray[i].length; j++)
        System.out.print(intArray[i][j]+" ");   //출력하면서 사이값 띄워주기
     System.out.println();
}}}

 

 

 

 

** 12. 정수 4개를 가지는 일차원 배열을 생성하고 1,2,3,4로 초기화한 다음, 배열을 리턴하는 makeArray()를 작성하고 이 메소드로부터 배열을 전달받아 값을 출력하는 프로그램을 작성하라. #명품자바프로그래밍3장12번예제

* 배열 리턴 과정 : int[] intArray; → makeArray(); //메소드실행 → intArray에 temp값 치환 → 초기화

 

package Luxuryjava03;
public class P0312 {
     static int[] makeArray(){
     int temp[] = new int[4];
     for(int i=0; i<temp.length; i++)
       temp[i]=i;     // 0, 1, 2, 3 초기화
     return temp;
     }
   public static void main(String[] args){
     int intArray[];    // 참조변수 선언
     intArray=makeArray();
     for(int i=0; i<intArray.length; i++)
       System.out.print(intArray[i]+" ");
}
}  // 0 1 2 3

 

 

 

 

13. 사용자가 명령행에 입력한 여러 개의 실수를 main()메소드에서 전달받아 합을 구하는 프로그램을 작성하라. #명품자바프로그래밍3장13번예제

* Double.parseDouble() : 매개변수로 주어진 문자열을 실수로 변환하는 함수.

 

package Luxuryjava03;
public class P0313 {
   public static void main(String[] args){
     double sum=0.0;
     for(int i=0; i<args.length; i++)
       sum+= Double.parseDouble(args[i]);
     System.out.println("합계:"+sum);
   }
}

 

 

 

 

14. 두 정수를 입력받아 나눗셈을 하고 몫을 구하는 프로그램 코드이다. 사용자가 나누는 수에 0을 입력하면 ArithmeticException 예외가 발생하여 프로그램이 강제 종료된다. #명품자바프로그래밍3장14번예제 #자바0으로나누기예외

 

package Luxuryjava03;
import java.util.Scanner;
public class P0314 {
   public static void main(String[] args){
      Scanner s=new Scanner(System.in);
      int a, b;
      System.out.print("나눔당할 수:");
      a=s.nextInt();
      System.out.print("나눌수:");
      b=s.nextInt();
      System.out.println(a+"를"+b+"로 나누면 몫은 "+a/b+"입니다");
      s.close();
}
}

 

 

 

 

15. try-catch 블록을 이용하여 예제 3-14를 수정하여, 정수를 0으로 나누는 경우에 "0으로 나눌 수 없습니다!"를 출력하고 다시 입력받는 프로그램을 작성하라. #명품자바프로그래밍3장15번예제

* try{ } catch(){ } (finally{ }) 예외처리문

* ArithmeticException 예외 처리

 

package Luxuryjava03;
import java.util.Scanner;
public class P0315 {
   public static void main(String[] args){
      Scanner s=new Scanner(System.in);
      while(true){
      System.out.print("나눔당할 수:");
      int a=s.nextInt();
      System.out.print("나눌수:");
      int b=s.nextInt();
      try{
         System.out.println(a+"를"+b+"로 나누면 몫은"+a/b+"입니다");
         break;
      }
       catch(ArithmeticException e){
          System.out.Println("0으로 나눌 수 없습니다! 다시입력하세요");
       }
      }
      s.close();
}
}

 

 

 

 

16. 배열의 인덱스가 범위를 벗어날 때 발생하는 ArrayIndexOutOfBoundsException을 처리하는 프로그램을 작성하시오. #명품자바프로그래밍3장16번예제

 

package Luxuryjava03;
public class P0316 {
   public static void main(String[] args){
      int[] intArray=new int[5];
      intArray[0]=0;
      try{
         for(int=0; i<5; i++){
            intArray[i+1]=i+1+intArray[i];
            System.out.println("intArray["+i+"]"+"="+intArray[i]);
         }
      }   
      catch(ArrayIndexOutOfBoundsException e){
         System.out.println("배열의 인덱스가 범위를 벗어났습니다.");
      }//  i가 4일 때
    }
}

 

 

 

 

17. 3개의 정수를 입력받아 합을 구하는 프로그램을 작성하라. 사용자가 정수가 아닌 문자를 입력할 때 발생하는 InputMismatchException 예외를 처리하여 다시 입력받도록 하라. #명품자바프로그래밍3장17번예제

 

package Luxuryjava03;
import java.util.Scanner;
public class P0317 {
   public static void main(String[] args){
      Scanner s=new Scanner(System.in);
      System.out.println("정수 3개를 입력하세요");
      int sum=0, n=0;
      for(int i=0; i<3; i++){
         System.out.print(i+">>");
         try{
            n=s.nextInt();
         }catch(InputMismatchException e){
             System.out.println("정수가 아닙니다. 다시 입력하세요");
             s.next();
             i--;
             continue;
         }
         sum+=n;
       }
       System.out.println("합은"+sum);
       s.close();
     }

 

 

 

 

18. 문자열을 정수로 변환할 때 발생하는 NumberFormatException을 처리하는 프로그램을 작성하라. #명품자바프로그래밍3장18번예제

 

package Luxuryjava03;
public class P0318 {
   public static void main(String[] args){
     String[] stringNumber={"23", "12", "3.1415", "998"};
     int i=0;
     try{
       for(i=0; i<stringNumber.length; i++){
        int j=Integer.parseInt(stringNumber[i]);
        System.out.println("숫자로 변환된 값은"+j);
         }
      }
      catch(NumberFormatException e){     // 3.1415에서 예외 발생해서 catch로 이동
          System.out.println(stringNumber[i] +"는 정수로 변환할 수 없습니다.");
      }
   }
}

 

 

 

 

 

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

 

명품자바프로그래밍 2장 연습문제

명품자바프로그래밍 2장 요약, 예제

 


 

명품자바프로그래밍 2장 실습문제

 

 

1. Scanner 클래스를 이용하여 입력받은 원화 값을 달러로 바꾸어
다음 예시와 같이 출력하는 프로그램을 작성하라.
($1=1100원으로 가정)

 

원화를 입력하세요(단위 원) >> 3300
3300원은 $3.0입니다.
package Luxuryjava;
import java.util.Scanner;
public class h0201 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.println("원화를 입력하세요(단위:원)>>");
		int num=s.nextInt();
		double dollar=num/1100;
		System.out.println(num+"원은 $"+dollar+"입니다.");
		s.close();
		}
}

 

 

 

2. Scanner 클래스를 이용하여 2자리의 정수(10~99사이)를 입력받고,
십의 자리와 1의 자리가 같은 지 판별하여 출력하는 프로그램을 작성하라.

 

2자리수 정수 입력(10~99) >> 77
Yes! 10의 자리와 1의 자리가 같습니다.

 

※ Tip. 10의 자리를 10으로 나누고 1의 자리를 10으로 나눈 나머지값이 같은 지를 판별합니다

package Luxuryjava;
import java.util.Scanner;
public class h0202 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.println("2자리의 정수 입력(10~99)>>");
		int num = s.nextInt();
		if (num/10==num%10) {
			System.out.println("Yes! 10의자리와 1의 자리가 같습니다.");
		}else { 
			System.out.println("No! 10의 자리와 1의 자리가 다릅니다.");
		}s.close();
	}
}

 

※ 2자리의 정수인지도 판별해 주려면 이렇게 추가해주면 됩니다. 여기서 스캐너는 한 번 밖에 작동되지 않습니다.

package Luxuryjava;
import java.util.Scanner;
public class h0202 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.println("2자리의 정수 입력(10~99)>>");
		int num = s.nextInt();
		if (num>=10 && num<100) {
			if (num/10==num%10) {
				System.out.println("Yes! 10의자리와 1의 자리가 같습니다.");
			}else { 
			System.out.println("No! 10의 자리와 1의 자리가 다릅니다.");
			}
		} else {
		System.out.println("2자리의 정수가 아닙니다.");
	}s.close();
}
	}

 

 

 

3. 3. Scanner 클래스를 이용하여 정수로 된 돈의 액수를 입력받아 오만 원권, 만 원권, 천 원권, 500원짜리 동전, 100원짜리 동전, 50원짜리 동전, 10원짜리 동전, 1원짜리 동전 각 몇개로 변환되는지 출력하라. #자바지폐단위별숫자구하기 #자바자판기프로그램 #자바잔돈프로그램

 

금액을 입력하시오 >> 65376
오만 원권 1매
만 원권 1매
천 원권 5매
100원 3개
50원 1개
10원 2개
1원 6개

 

※ 스캐너 생성, num이라는 변수 생성한 후 입력받은 값을 50,000으로 나눈 몫, 50,000으로 나눈 나머지, 위에서 나온 나머지를 10,000으로 나눈 몫, 그리고 10,000으로 나눈 나머지 .... 이것을 1원까지 반복해주는 것입니다. 마지막 1원은 나머지가 없으므로 나누기만 하고 끝납니다.

 

package Luxuryjava;
import java.util.Scanner;
public class homework0203 {
	public static void main(String[] args) {
	Scanner s=new Scanner(System.in);
	System.out.println("금액을입력하시오>>");

	int num=s.nextInt();
		System.out.println("50000won"+num/50000+"mae");
		num%=50000;
		System.out.println("10000won"+num/10000+"mae");
		num%=10000;
		System.out.println("1000won"+num/1000+"mae");
		num%=1000;
		System.out.println("100won"+num/100+"mae");
		num%=100;
		System.out.println("50won"+num/50+"mae");
		num%=50;
		System.out.println("10won"+num/10+"mae");
		num%=10;
		System.out.println("1won"+num/1+"mae");
		s.close();
	}
}

 

※ 배열로 푸는 법. 2장에서는 배우지 않았지만 훨씬 간단합니다.

package Luxuryjava;
import java.util.Scanner;
public class h0203 {
	public static void main(String[] args) {
		int[] coin = {50000, 10000, 1000, 500, 100, 50, 10, 1};
		Scanner s=new Scanner(System.in);
		System.out.println("금액을 입력하시오>>");
		int num=s.nextInt();		
		for (int i=0; i<coin.length; i++) {
			System.out.println(coin[i]+"원:" + num/coin[i]);
			num%= coin[i];
		}
	s.close();
	}
}

 

 

 

4. Scanner 클래스로 정수 3개를 입력받고 3개의 숫자 중 중간 크기의 수를 출력하라. 평균값을 구하는 것이 아님에 주의

정수 3개 입력 >> 20 100 33
중간 값은 33

 

※ 변수 세개와 스캐너 세번 선언! if-else, else if 구문을 사용하여 a<b<c 일 때(중간값 b), b<a<c 일 때(중간값 a), 나머지 일 때(중간값 c)로 조건을 걸어줍니다.

package Luxuryjava;
import java.util.Scanner;
public class h0204 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);		
		int a,b,c;
		System.out.println("정수 3개 입력>>");
		a=s.nextInt();
		b=s.nextInt();
		c=s.nextInt();
		if(a<b && b<c) {System.out.print("중간 값은"+b+"입니다.");}
		if(b<a && a<c) {System.out.print("중간 값은"+a+"입니다.");}
		else {System.out.print("중간 값은"+c+"입니다.");}
		s.close();
	}
}

 

 

 

5. Scanner 를 이용하여 삼각형의 변의 길이를 나타내는 정수를 3개 입력받고 이 3개의 수로 삼각형을 만들 수 있는 지 판별하라. 삼각형이 되려면 두 변의 합이 다른 한 변의 합보다 커야 한다.

정수 3개 입력 >> 4 3 5
삼각형이 됩니다.

 

※ 삼각형이 되려면 가장 긴 변이 2변의 합보다 작아야 합니다.

package Luxuryjava;
import java.util.Scanner;
public class h0205 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.println("정수 3개를 입력>>");
		int l1=s.nextInt();
		int l2=s.nextInt();
		int l3=s.nextInt();
		if((l1+l2)<l3 || (l1+l3)<l2 || (l2+l3)<l1)
			System.out.println("삼각형을 만들 수 없습니다.");
		else
			System.out.println("삼각형이 됩니다.");
		s.close();
	}
 }

 

 

 

6. 369게임을 간단히 작성해보자. 1~99까지의 정수를 입력받고 정수에 3,6,9 중 하나가 있는 경우는 "박수짝"을 출력하고 두 개 있는 경우는 "박수짝짝"을 출력하는 프로그램을 작성하라. 예를 들면, 키보드로 입력된 수가 13인 경우 "박수짝"을, 36인 경우 "박수짝짝"을 출력하면 된다. #자바369게임 #자바베스킨라빈스

1~99 사이의 정수를 입력하시오 >> 36
박수짝짝

※ if조건문과 연산자 (0일 경우, 범위가 아닐 경우도 넣기)

package Luxuryjava;
import java.util.Scanner;
public class h0206 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.print("1~99 사이의 정수를 입력하시오>>");	
		int num=s.nextInt();
		
		if(num!=0 && num>=1 && num <=99) {
			int a,b;
			a=num/10;
			b=num%10;
			
			if((a==3 || a==6 || a==9) && (b==3 || b==6 || b==9)) {
				System.out.println("박수짝짝");	
			}else if((a==3 || a==6 || a==9) || (b==3 || b==6 || b==9)) {
				System.out.println("박수짝");	}
			}
		else {
        	System.out.println("숫자의 범위를 벗어났습니다.");
        }
		s.close();
	}
}

 

 

 

7. 2차원 평면에서 직사각형은 왼쪽 상단 모서리와 오른쪽 하단 모서리의 두 점으로 표현한다. 100,100과 200,200의 두 점으로 이루어진 사각형이 있을 때 Scanner를 이용하여 정수 x와 y 값을 입력받고 점 (x,y)가 이 직사각형 안에 있는 지를 판별하는 프로그램을 작성하라.

점 (x,y)의 좌표를 입력하시오 >> 150 150
(150,150)은 사각형 안에 있습니다.

※ if조건과 논리

package Luxuryjava;
import java.util.Scanner;
public class h0207 {
	public static void main(String[] args) {
	System.out.println("점 (x,y)의 좌표를 입력하시오 >>");
	Scanner s=new Scanner(System.in);
	int x=s.nextInt();
	int y=s.nextInt();
	if((100<=x && x<=200)&&(100<=y && y<=200))
		System.out.println("사각형 안에 점이 있습니다.");
	else System.out.println("사각형 안에 점이 없습니다.");
	s.close();
    }
}

 

 

 

8. 2차원 평면에서 직사각형은 문제 7번처럼 두 점으로 표현된다. 키보드로부터 사각형을 구성하는 두 점(x1, y1), (x2, y2)를 입력받아 100,100과 200,200의 두 점으로 이루어진 사각형과 충돌하는지 판별하는 프로그램을 작성하라. (아래 코드를 참고하여 만드시오) #자바사각형안의점 #자바사각형충돌

다음은 점(x,y)가 사각형 (rectx1, recty1), (rectx2, recty2)
안에 있으면 true를 리턴하는 메소드이다.
이를 활용하라.

 

public static boolean inRect(int x, int y, int rectx1, int rectx2, int recty1, int recty2){
  if ((x>=rectx1 && x<=rectx2) && (y>=recty1 && y<=recty2))
    { return true; }
  else { return false; }
}

 

※ if조건과 논리 : 한 꼭지점이 걸칠 경우, 모든 꼭지점이 안에 있는 경우, (100,100),(200,200)의 모든 꼭지점이 사각형 안에 있는 경우 (만든 사각형이 더 큰 경우)

 

package Luxuryjava;
import java.util.Scanner;
public class h0208 {
	public static boolean inRect(int x, int y, 
			int rectx1, int rectx2, int recty1, int recty2) {
		if((x>=rectx1 && x<=rectx2) && (y>=recty1 && y<=recty2))
			return true; 
		else 
			return false;
	}
	public static void main(String[] args) {
			System.out.println("두 점 (x1,y1), (x2,y2)의 좌표를 입력하시오 >>");
			Scanner s=new Scanner(System.in);
			int x1=s.nextInt();
			int y1=s.nextInt();
			int x2=s.nextInt();
			int y2=s.nextInt();
			
			if (inRect(x1,y1,100,100,200,200) ||
				inRect(x2,y2,100,100,200,200) ||
				inRect(x1,y2,100,100,200,200) ||
				inRect(x2,y1,100,100,200,200))
				System.out.println("사각형이 겹칩니다.");
			else if ((inRect(x1,y1,100,100,200,200)) &&
						inRect(x2,y2,100,100,200,200) &&
						inRect(x2,y1,100,100,200,200) &&
						inRect(x1,y2,100,100,200,200))
				System.out.println("사각형이 겹칩니다.");
			else if ((inRect(100,100,x1,y1,x2,y2)) &&
					inRect(100,200,x1,y1,x2,y2) &&
					inRect(200,100,x1,y1,x2,y2) &&
					inRect(200,200,x1,y1,x2,y2))
				System.out.println("사각형이 겹칩니다.");
			else
				System.out.println("사각형이 겹치지 않습니다.");
			s.close();
	}
		    }

 

※ 주어진 inRect를 사용하지 않고 푸는 방법

package Luxuryjava;
import java.util.Scanner;
public class h02081 {
	public static void main(String[] args) {
		System.out.println("두 점 (x1,y1), (x2,y2)의 좌표를 입력하시오 >>");
		Scanner s=new Scanner(System.in);
		int x1=s.nextInt();
		int y1=s.nextInt();
		int x2=s.nextInt();
		int y2=s.nextInt();
		if ((x1>=100 & x1<=200) && (y1>=100 && y1<=200)) {
			System.out.println("사각형이 겹침");
		}else if((x2>=100 && x2<200) && (y2>=100 && y2<=200)) {
			System.out.println("사각형이 겹침");
		}else if(x1<=100 && x2>=200 && y1<=100 && y2>=200) {
			System.out.println("사각형이 겹침");
		}
		else
			System.out.println("사각형이 안겹침");
		s.close();
	}
	}

 

 

 

9. 원의 중심을 나타내는 한 점과 반지름을 실수 값으로 입력받아라. 그리고 실수 값으로 다른 점 (x.y) 을 입력받아 이 점이 원의 내부에 있는지 판별하여 출력하라. #자바원충돌

원의 중심과 반지름 입력>> 10 10 6.5

점 입력>> 13 13

점 (13.0,13.0)은 원 안에 있습니다.

※ 중심에서 점 ( x,y ) 사이의 거리가 반지름보다 작거나 같으면 원의 내부에 있다. 변수 x에 대한 제곱근의 값은 Math.sqrt(x)를 이용하면 된다. (Math함수는 6장 참고)

※ Math.sqrt : 제곱근(루트) 값을 계산해주는 함수

※ 원의 중심과 점의 거리가 반지름 길이와 같거나 작아야 합니다.
√(x2-x1)
2 + (y2-y1)2 , 원의 넓이 = 반지름2 *원주

 

package Luxuryjava;
import java.util.Scanner;
public class h0209 {

	public static void main(String[] args) {
		System.out.println("원의 중심과 반지름 입력>>");
		Scanner s=new Scanner(System.in);
		double p1=s.nextDouble();
		double p2=s.nextDouble();
		double r=s.nextDouble();
		
		System.out.println("점 입력>>");
		double x=s.nextDouble();
		double y=s.nextDouble();
		
		double distance=Math.sqrt((x-p1)*(x-p1)+(y-p2)*(y-p2));
		if(distance<r)
		System.out.println("점"+x+","+y+"은"+"원 안에 있습니다.");
		else
		System.out.println("점"+x+","+y+"은"+"원 밖에 있습니다.");
		s.close();
	}
}

 

 

 

10. 원의 정보를 받기 위해 키보드로부터 원의 중심을 나타내는 한 점과 반지름을 입력받는다. 두 개의 원을 입력받고 두 원이 서로 겹치는지 판단하여 출력하라.

첫번째 원의 중심과 반지름 입력>> 10 10 3

두번째 원의 중심과 반지름 입력>> 12 12 2

두 원은 서로 겹친다.

※ 두 개의 반지름의 합보다 작으면 원이 겹칩니다.

 

package Luxuryjava02;
import java.util.Scanner;
public class h0210 {
	public static void main(String[] args) {
		System.out.println("첫 번째 원의 중심과 반지름 입력>>");
	Scanner s=new Scanner(System.in);
	int x=s.nextInt();
	int x1=s.nextInt();
	double r=s.nextDouble();
	
	System.out.println("두 번째 원의 중심과 반지름 입력>>");
	int y=s.nextInt();
	int y1=s.nextInt();
	double r1=s.nextDouble();
	double distance=0;
	distance = Math.sqrt((x-x1)*(x-x1)+(y-y1)*(y-y1));
	if (distance<=r+r1) 
		System.out.println("두 원은 서로 겹친다.");
	else
		System.out.println("두 원은 서로 안겹친다.");
	s.close();	
	}
}

 

 

 

11. 숫자를 입력받아 3~5는 봄, 6~8은 여름, 9~11은 가을, 12,1,2는 겨울, 그 외의 숫자를 입력한 경우 잘못입력을 출력하는 프로그램을 작성하라. if-else 문과 switch 둘 다 이용해볼 것.

달을 입력하세요(1~12) >> 9
가을


(1) if-else

package Luxuryjava;
import java.util.Scanner;
public class h0211 {
	public static void main(String[] args) {
		System.out.println("달을 입력하세요(1~12)>>");
		Scanner m=new Scanner(System.in);
		int num=m.nextInt();
		if (num>=3 && num<=5)
			System.out.println("봄");
		else if(num>=6 && num<=8)
			System.out.println("여름");
		else if(num>=9 && num<=11)
		System.out.println("가을");
		else if(num==12 || num==1 || num==2)
			System.out.println("겨울");
		else
			System.out.println("잘못된 만남이 아니고 입력");
		m.close();
	}
}

 

(2) switch

package Luxuryjava;
import java.util.Scanner;
public class h02111 {
	public static void main(String[] args) {
		System.out.println("달을 입력하세요(1~12)>>");
		Scanner m=new Scanner(System.in);
		int num=m.nextInt();
		switch(num) {
			case 3: case 4: case 5:
				System.out.println("봄");
				break;
			case 6: case 7: case 8:
				System.out.println("여름");
				break;
			case 9: case 10: case 11:
				System.out.println("가");
				break;
			case 12: case 1: case 2:
				System.out.println("겨울");
				break;
		default:
			System.out.println("잘못입력");		
		}
		m.close();
	}
}

 

 

 

12. 사칙 연산을 입력받아 계산하는 프로그램을 작성하고자 한다. 연산자는 + - * / 의 네 가지로 하고 피연산자는 모두 실수로 한다. 피연산자와 연산자는 실행 사례와 같이 빈 칸으로 분리하여 입력한다. 0으로 나누기 시 "0으로 나눌 수 없습니다."를 출력하고 종료한다.

연산 >> 2+4
2+4의 계산 결과는 6

※ 문자열 s가 "+"와 같은 지 검사하려면 if(s.equals.("+"))를 이용하며, true이면 s와 "+"가 같다.

package Luxuryjava02;
import java.util.Scanner;
public class h0212 {
// 연산자 : an operator , 결과 : result
	public static void main(String[] args) {
		System.out.print("연산>>");
		Scanner s=new Scanner(System.in);
		int op1=s.nextInt();
		String op=s.next();
		int op2=s.nextInt();
		
		int res=0;
		if(op.equals("+"))
			res=op1+op2;
		else if(op.equals("-"))
			res=op1-op2;
		else if(op.equals("*"))
			res=op1*op2;
		else if(op.equals("/")) {
			if(op2==0) {
				System.out.print("0으로 나눌 수 없습니다.");
				s.close();
				return;
			}
			else
				res=op1/op2;
			}
		else {
			System.out.print("사칙연산이 아닙니다.");
			s.close();
			return;
		}
		System.out.println(op1+op+op2+"의 계산결과는"+res);
		s.close();
	}
}
package Luxuryjava02;
import java.util.Scanner;
public class h02121 {
	public static void main(String[] args) {
		Scanner s=new Scanner(System.in);
		System.out.print("연산>>");
		int op1=s.nextInt();
		String op=s.next();
		int op2=s.nextInt();
		int res=0;
		switch(op) {
			case "+":
				res=op1+op2;
			break;
			case "-":
				res=op1*op2;
			case "*":
				res=op1*op2;
			case "/":
				if(op2==0) {
					System.out.print("0으로 나눌수없다");
					s.close();
				}
				res=op1/op2;
				break;
			default:
				System.out.print("사칙연산이아닙니다.");
				s.close();
				break;
		}
		System.out.print(op1+op+op2+"의 계산결과는"+res);
		s.close();
	}
}
728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,
728x90
728x90

 

 

본 글은 명품자바프로그래밍 2장 연습문제의 문제와 풀이이며 2장 이론요약은 여기로, 실습문제는 여기로 이동해주세요.

 


 

명품자바프로그래밍 2장 연습문제

 

 

연습문제 2-1 자바에서 클래스를 선언할 때 사용하는 자바의 키워드는? #명품자바프로그래밍2장연습문제1번

 

--> class

 

 

 

연습문제 2-2 다음은 10과 20을 더해 합을 출력하려고 작성하였으나 오류가 있는 프로그램이다. #명품자바프로그래밍2장연습문제2번

public class SampleProgram{
    int i, j;
    i=10; j=20;
    System.out.println(i+j);
}

 

(1) 오류를 수정해보자.  --> SampleProgram 클래스에 main() 메소드를 넣는다.

(2) 이 자바 클래스를 저장하는 소스파일의 이름은?  --> SampleProgram.java

(3) 명령창에서 이 프로그램을 컴파일하는 명령은?  --> javac SampleProgram.java

(4) 명령창에서 이 프로그램을 실행하는 명령은?  --> java SampleProgram

 

 

 

연습문제 2-3 다음 중 식별자 사용이 잘못된 경우를 모두 골라라.#명품자바프로그래밍2장연습문제3번

 

(1) int _i;

(2) int %j;

(3) char 안녕;

(4) double 1var;

(5) char student_ID;

(6) final int abcedfghijklmnopqrstuvwxyz;

연습문제 2-4 다음 각 항목이 나타내는 변수를 선언하라. #명품자바프로그래밍2장연습문제4번

 

(1) int 형 변수 height int height;

(2) 0.25로 초기화된 double형 변수 size double size=0.25;

(3) height 변수의 값과 size변수의 값을 더한 값으로 초기화된 double형 변수 total double total=height+size;

(4) 문자 'a'로 초기화된 char형 변수 c char c='a';

(5) 자신의 이름으로 초기화된 문자열변수 name String name = "name";

 

연습문제 2-5 다음 수식의 결과 값과 타입은? #명품자바프로그래밍2장연습문제5번

 

(1) 67+12.8  79.8, 실수형

(2) 10/3  3, 정수형

(3) 10.0/3  3.333333... 실수형

(4) 10==9  false, 논리형

 

연습문제 2-6 체온 값 36.5로 초기화된 상수 bodyTemp를 double형으로 선언하라. #명품자바프로그래밍2장연습문제6번

 

--> final double bodyTemp=36.5;

 

연습문제 2-7 다음 각 항목의 코드에서 컴파일 오류를 수정하라. #명품자바프로그래밍2장연습문제7번

 

(1) while(1){ }  while(true){ }

(2) int n=3.5;  double n=3.5;

(3) int b=(3<5)?true:false;  boolean b=(3<5)?true:false;​​

(4) int score=85; if(80<score<90) System.out.print(score);  int score=85; if(80<score && score<90) System.out.print(score);

연습문제 2-8 다음 문장을 조건식으로 나타내라. #명품자바프로그래밍2장연습문제8번

 

(1) age는 12보다 작거나 같다  age <= 12

(2) age는 b보다 작고 c보다 크다  age <b && age >c

(3) age는 빼기 5는 10과 같다  age-5 == 10

(4) age는 b와 같지 않거나 c와 같다  age!b || age == c

 

연습문제 2-9 다음 조건문을 조건 연산자를 이용하여 한 문장으로 작성하라. #명품자바프로그래밍2장연습문제9번

 

if(sum>100) sum = 100;
else sum = 0;

--> sum = (sum>100)? 100:0;

 

 

 

연습문제 2-10 다음 조건문을 조건 연산자를 이용하여 한 문장으로 작성하라. #명품자바프로그래밍2장연습문제10번

 

if(n>5) System.out.println(n);
else System.out.println(5);

--> System.out.println((n>5)?n:5);

 

 

연습문제 2-11 System.out.print(text);로 출력할 때 다음과 같이 출력되는 문자열 text는 무엇인가? #명품자바프로그래밍2장연습문제11번

 

"를 출력하려면 \ 다음에 "를 붙여 \"과 같이 하면 됩니다.  --> \"를 출력하려면 \\다음에 \"를 붙여 \\\"과 같이 하면 됩니다.

 

 

연습문제 2-12 다음 출력문에 의해 출력되는 텍스트는? #명품자바프로그래밍2장연습문제12번);

 

System.out.print("나는 \"Java를 "+ 100 + "%\"" + "사랑해");

--> 나는 "Java를 100%"사랑해

 

연습문제 2-13 다음 switch문이 있을 때 (1)~(4) 문항에 따라 출력되는 결과는? #명품자바프로그래밍2장연습문제13번

 

package test02;

public class test0213 {

	public static void main(String[] args) {
		
		//char grade = 'A';
		char grade = 'F';
		int sum = 0;

		switch (grade) {
		case 'A':
			sum += 100;
		case 'B':
			sum += 50;
		case 'C':
			sum += 30;
		case 'D':
			sum += 10;
		}
		System.out.print(sum);
	}

}

 

(1) grade가 'A' 일 때 : 190

(2) grade가 'B' 일 때 : 90

(3) grade가 'C' 일 때 : 40

(4) grade가 'F' 일 때 : 10

연습문제 2-14 다음 if문을 switch문으로 바꾸어라. #명품자바프로그래밍2장연습문제14번

 

if(in.equals("가위")) System.out.println(1); 
else if(in.equals("바위")) System.out.println(2); 
else if(in.equals("보")) System.out.println(3); 
else System.out.println(0);

 

* 문자열끼리의 비교는 ==가 아닌 equals.를 사용해야 한다.

switch(in.equals) {
    case "가위" : System.out.println(1); break; 
    case " 바위" : System.out.println(2); break; 
    case "보" : System.out.println(3); break; 
    default : System.out.println(0); 
    }

 

* 자바 ==와 equals 차이

 

== : 기본형데이터 (int 등), 비교를 위한 연산자 <-> equals 메소드 : 객체형

== : 메모리에서 참조하고 있는 값(주소값) 비교 <-> equals : 메모리에 저장되어 있는 값 비교

== : 같은 객체를 참조하는가? <-> equals : 들어있는 값이 같은가?

 

* Call By Value(CBV), Call By Reference(CBR)

 

CBV : 대상에 주소값을 가지지 않으며 값을 할당받는 형태. int, float, double, byte 등 primitive type (원시형, 기본형데이터)

CBR : 대상을 선언했을 때 주소값이 부여. 객체를 불어올 때 주소값을 불러온다고도 한다. class, object가 해당

 

 

 

 

 

 

 

명품자바프로그래밍 2장 실습문제 바로가기

728x90
728x90
블로그 이미지

coding-restaurant

코딩 맛집에 방문해주셔서 감사합니다.

,

v