Java

3일차

보로로롬 2016. 3. 16. 16:37

변수(variable) : 값을 담는 바구니 인데 값의 유형에 따라 바구니에 유형도 여러가지가 있음

                  변수는 타입과 이름(바구니들을 구분하기 위한)을 가지고 있다.


상수(constant) : 그 값이 프로그램이 실행하는 동안 변하지 않는 값 

  ex) 3.14 (실수형상수) , 1000 (정수형상수), "Hello World!" (문자형 상수)
  10.0 (실수상수), 10 (정수상수)   -> 10.0과 10은 같지않다.
  'a' (문자상수 1글자만가능),  "a" (문자열 상수 글자수 제한x) -> 'a' 와 "a" 는 같지않다. 

*심볼릭 상수 (Symbolic Constant) : 변수인데 절대로 값을 못바꾸는 것, 변수를 상수화 (이것은 변수인데 상수)

*리터럴 상수 (Literal Constant) : 원래 그냥 그런 값 (1, 2, a, b)



변수의 초기화 : 변수에 처음으로 값을 넣어주는 것


int x;

int타입의 변수 x를 생성 (정수변수 x를 선언)


x=100;

x라는 변수에 100이라는 값을 담음 (x라는 값을 100으로 초기화 했다.)


int x = 0;

변수를 선언과 동시에 초기화


대입연산자(=) 오른쪽에 있는 값을 왼쪽의 변수에 담음

* (==) : 프로그램에서는 같다라는 표현을 == 로 사용함 

수식 : 피연산자와 연산자로 이루어진다.
        수식의 결과값을 가진다.

x = 100;
y = 200;
sum = x + y;   (2개의 수식이 합쳐져있는 것)


산술연산자 : 프로그래밍에서는 두개의 피연산자와 같은 타입이면 결과도 그 타입이 나와야됨

4/3 = 1  (정수와 정수로 연산해서 결과도 정수)
5.0/2 = 2.5  (서로다른 타입으로 연산하면 더 큰타입이 결과로 나옴)
6/2 = 3
6.0/2 = 3.0    -> 6.0/2.0 = 3.0  (계산하기 전에 더 큰 타입으로 변환이 됨)



연산

연산자 

자바 수식 

수학에서의 기호 

덧셈

+

x + y 

x + y 

뺼셈 

 - 

x - y 

x - y 

곱셈 

 * 

x * y 

xy 

나눗셈 

 / 

x / y 

x/y 

나머지 

 % 

x % y 

x mod y 


System.out.println("  ");

System
필수기능으로 그냥 언제든 사용가능
System이라는 묶음에는 여러개의 값과 기능들이 들어있음

.
.연산자는 System꾸러미에서 가져올수 있음

System.out.println("안녕")
System 꾸러미에서 out을 가져왔고
out 꾸러미에서 priintln기능을 호출
println을 호출하면서 "안녕" 이라는 값을 전달

println("  ");
여기서 print 뒤에 ln은 한줄넘기기
print("단어");로 쓰면 출력값이 단어가 나오고 한줄넘기기를 하지않음

\n
print문에서 한줄을 뛰는 것

\t
한칸을 뛰는 것


System.(     )

out(표준출력)
모니터로 데이터를 출력할 수 있는 기능을 가진 꾸러미

in(표준입력)
키포드로부터 데이터를 읽어들일 수 있는 기능을 가진 꾸러미


Scanner input = new Scanner(System.in);   * input = 변수

Scanner
(Systin.in으로 들어오는)입력데이터를 편리하게 가공해주는 도우미 꾸러미
외부에 있어서 임포트선언을 해야 사용이 가능
(클래스 위에 선언 import java.util.Scanner; )

import 자동 입력팁 2가지
1. Scanner input = new Scanner(System.in); 를 작성하고 ctrl + shift + o  
2. scan 쓰고 ctrl + 스페이스바 를 누르고 설정해주면 import가 설정됨 (Scanner뒤는 따로작성해야됨)

input.nextInt();
이것은 키보드로 입력받은 (System.in); 으로부터 들어오는 다음 데이터를 정수로 읽어서 갖다줌.
nxtInt는 가만히 기다리다가 데이터가 들어오면 정수로 가공해서 가공한 결과를 return.

*import 없이 사용하려면 아래와 같이 스캐너앞에 Scanner 앞에 java.util. 을 붙여주면 됨.
java.util.
Scanner input = new java.util.Scanner(System.in);


예제) 사용자로 부터 숫자를 두번 입력받아 입력받은 두수를 더 한값을 출력하기.

-학습목표: 사용자로부터 숫자를 입력받아서 어떤 연산을해서 결과값을 출력할수 있다.


* 한줄에 입력하고 싶은 문자나 숫자를 표현하는 방법

1.문자열끼리 덧셈연산

문자열 끼리의 덧셈연산은 문자열 이어 붙이기와 같아서 아래와 같이
System.out.print("문자" + "문자" + 333(숫자) ) 를 입력하면 한줄에 표현가능
(문자와 숫자를 더하면 타입이 달라서 숫자가 문자타입으로 변해서 출력값이 나옴)
"문자" + "문자" + "333" 로 숫자가 문자타입으로 바뀜


2. 서식문자열 사용하기

쓰고 싶은 문자열과 서식문자를 같이 사용하고 콤마 이후에 서식문자의 변수이름입력
서식문자열을 사용할때는 printf 를 사용!
System.out.printf("결과 : %d + %d = %d", x,y,sum);     

%d : 양수와 음수의 10진수 정수
%x : 양수의 16진수 정수
%o : 양수의 8진수 정수
%f : 양수와 음수 표현 가능한 10진수 실수
%c : 한 개의 문자
%s : 문자열
%u : 양수만 표현 가능한 10진수 정수
%e : 실수
%.2f : 소수점 둘째자리 이하 자리 수 (숫자를 변경하면 자리수)
%% : % 출력




상수메모리

스택영역(stack) : 지역변수들이 저장됨

힙영역(heap) : 동적으로 할당한 데이터 들이 저장


*프로그램에서의 정적 과 동적

-정적 : 컴파일시에 미리 예측가능하여 결정된 사항 (기초자료형)

-동적 : 실행시에 결정이 되는 사항 (기초자료형이 아닌 데이터)
ex) new 키워드 : 힙영역에 동적으로 데이터 할당

*동적으로 할당 : 내가 원할때 만들었다가 원할때 지울수 있는 것 
*힙 영역 : 다른 형태의 데이터를 관리하기 위한 빈공간


int x (기초변수) : 정수를 하나 담을 수있는 바구니(변수)

Scanner input (참조변수) : Scanner로 만들어낸 데이터의 위치를 저장할수 있는 바구니(변수) input  
input을 지우고 싶으면 input=null; 아무값도 안넣으면 제거됨

*참조변수 : 데이터의 위치를 저장

*지역변수 : {}블록 안에서 만들어진 변수
           변수선언문을 만날 때 생성(공간할당), 자신이 포함된 블록이 종료될때 없어짐.

*스택 

제한적으로 접근할 수 있는 나열구조(LIFO)
한 쪽 끝에서만 자료를 넣거나 뺄 수 있는 선형 구조
*LIFO (Last In First Out) *(=스택(Stack))
먼저 만들어진 변수가 늦게 없어지고 늦게 만들어진 변수가 먼저 없어짐
데이터를 넣는것 (PUSH) / 데이터를 꺼내는 것 (POP)

*큐(queue)
먼저 들어온 데이터가 먼저 나오는 FILO(First In last Out) 구조
데이터를 넣는것 (Put) 데이터를 빼는것 (Get)
큐에서는 front( put할수 있는 위치= 삽입 )와 rear( get할수 있는 위치 = 삭제 ) 가 있다.


예제) 사용자가 생각하는 월급을 입력받아 10년동안의 저축률 계산하기.


예제) Double타입을 사용하여 소수점의 원의 면적구하기




오류
-컴파일 오류(compile error) : 컴파일이 실패 (문법이 틀려서), 계산식 오류
-실행 오류 (run-time error) : 실행 중에 프로그램이 뻗는거 (정수입력 받아야하는데 문자를 받은경우)
-논리 오류 (logical error) : 컴파일/런타임 에러 없이 잘 동작했는데 결과값이 원하는 결과가 아님

*디버깅 : 논리 오류를 고치는 과정

-오류들의 차이
컴파일 오류 : 발견이 쉬움
실행 오류 : 충분한 테스팅을 하면 발견할 수 있음
논리 오류 : 발견이 어려움, 가장 조심해야됨 오류해결하기 짜증남


예제) 1.사용자가 입력하는 원화를 달러화로 계산하는 프로그램을 작성하여 보자.
        달러에 대한 원화 환율(예를 들어 1달러는 1392.83원)은 실수형 변수에 저장하고 
        사용자로부터는 받는 원화는 정수변수에 저장한다. 
        원화를 환율로 나누어서 사용자가 입력한 원화가 몇 달러에 해당하는지를 계산한다.



예제) 사용자로부터 입력을 받아 삼각형의 높이를 구하시오.