자바 기본 프로그래밍
2.1 자바 프로그램의 구조
class 키워드 : 클래스 이름 선언, {} 사이에 변수, 메소드 작성
public : 다른 클래스에서 이 클래스를 자유롭게 참고 가능하다 표시
public static void main(String[] args) { }
한 클래스는 두개 이상의 메인 불가
모든 클래스가 메인을 가지지는 않음
함수와 같은말
클래스 내에 작성
2.2 식별자
특수문자 _ $만 사용가능
한글 가능
키워드 불가능 (if, while, class)
숫자로 시작 불가능
true, false, null 사용 불가
대소문자 구별
2.3 자바의 데이터 타입
1) 기본타입 : boolean, char, byte, short, int, long, float, double
2) 레퍼런스 타입 : 한 가지 but 배열, 클래스, 인터페이스에 대한 레퍼런스 세가지로 사용함
프로그램에 직접 표현한 값
정수, 실수(double타입으로 자동 처리), 문자(' ' or /u유니코드 + 특수문자 리터럴), 논리 타입, boolean 타입
기본 타입 외 리터럴 : null 리터럴(기본 타입에 사용 불가, 객체 레퍼런스에 대입), 문자열 리터럴(" ")
치환문(=)이나 수식 내에서 타입이 일치하지 않을 때 컴파일러는 작은 타입에서 큰 타입으로 자동변환
큰-> 작은 강제 타입변환(캐스팅)하면 손실 발생
int n=300;
byte b= (byte)n;
2.4 자바의 키 입력
System.in : 표준 입력 스트림 객체, 키 값을 바이트 정보로 바꾸어 제공한다.
Scanner : system.in을 사용하면 바이트 정보를 응용 프로그램이 문자나 숫자로 변환해야 하므로, 스트림 클래스 Scanner를 사용하여 키보드에서 입력된 키를 문자나 정수, 실수, 문자열로 변환한다.
Scanner scanner = new Scanner(System.in);
import java.util.Scanner;
: 사용자가 입력하는 키 값을 공백('\f', '\r', ' ', '\n')으로 구분되는 토큰 단위로 읽음

scanner.close();
2.5 연산자

종류 : ++, --
++a, --a : 전위연산자, 증가(++) 후 a값을 사용(적용)
a++, a-- : 후위연산자, a값을 먼저 사용(적용) 하고 그 다음 증가



삼항 연산자
condition ? op1 : op2
1) 비트 논리 연산 2) 비트 시프트 연산
: 2진수의 한 자리, 8 bit = 1 byte

비트 논리 연산

비트 시프트 연산
CHECK TIME
int x=2, y=10, z=0;
z=x++*2+--y-5+x*(y%2);
z 값은?
1) 우선은 괄호 (y%2)부터 처리합니다.
현재 이 수식은 앞에 --y가 선위연산자이므로 9가 된 상태입니다. 그래서 9%2 해서 1이 됩니다.
2) 그 다음 곱셈부분을 합니다(사칙연산에서 우선순위가 곱셈, 나눗셈입니다)
현재 1)의 내용까지 다 쓰면
2 2 + 9 - 5 + 3 1 --> 두번째 x가 3이 된 이유는 후위연산자라 그렇습니다. 즉 첫번쩨 x가 먼저 원래 2라는 숫자를 표현하고 ++되면서 x가 3이 되버린 겁니다.
3) 연산하면 11입니다.
+) 알고리즘
1) 알고리즘의 정의 : 문제를 해결해 가는 방법, 절차
2) 알고리즘 설계 : 방법과 절차를 구체적으로 표현
순차구조
선택(조건)구조 : 조건문
반복구조 : 반복문
3) 알고리즘의 표현 방법 : 자연어, 의사코드, 순서도
장: 이해가 빠르다
단: 내용이 길어진다
장: 특정 프로그램 지식이 없어도 이해 가능
단: 약간의 프로그램 지식 필요, 명확성이 떨어짐
장: 글보다 쉽게 이해, 프로그램 설계 시 많이 사용
단: 기호에 대한 숙지
2.6 조건문
컴퓨터 과학에서의 조건문(=판단)
: 사람의 몫 - 판단의 기준을 제시, 선택의 실행을 명령
컴퓨터의 몫 - 판단의 기준에 따른 선택
if(조건식) {
실행문장
}
조건식이 false 일때 조건 검증
if (조건식) {
실행문장
}
else {
실행문장
}
if (조건식) {
실행문장
}
else if (조건식2) {
실행문장
}
else {
실행문장
}
식을 계산 한 후, 결과 값과 일치하는 case문으로 이동
실행 문장 실행 후 break를 만나면 switch 벗어남
실행 문장이 여러 개여도 {}로 묶지 않음
default는 생략 가능
break문이 없다면 break를 만나기 전까지 계속 실행됨
case 문의 값은 '정수 리터럴, 문자 리터럴, 문자열리터럴'만 가능 -> 변수나 식X
예제 2-1
public class HelloJava {
public static int sum(int n, int m) {
return n+m;
}
public static void main(String[] args) {
// TODO Auto-generated method stub
int i=20;
int s;
char a;
s=sum(i,10);
a='?';
System.out.println(a);
System.out.println("Hello!");
System.out.println(s);
}
}
예제 2-3
public class CircleArea {
public static void main(String[] args) {
// TODO Auto-generated method stub
final double PI = 3.14; //원주율
double radius = 10.2; // 원의 반지름
double circleArea= radius*radius*PI; //원의 면적 계산
//원의 면적을 화면에 출력한다.
System.out.print("반지름 "+ radius +",");
System.out.println("원의 면적 = "+circleArea);
//반지름 10.2, 원의 면적 =326.~
}
}
예제 2-4
public class TypeConversion {
public static void main(String[] args) {
byte b=127;
int i = 100;
System.out.println(b+i); //227
System.out.println(10/4); //2
System.out.println(10.0/4); //2.5
System.out.println((char)0x12340041); //A
System.out.println((byte)(b+i)); //227을 byte형 크기만큼 자른다 -29
System.out.println((int)2.9+1.8); //3.8
System.out.println((int)(2.9+1.8)); //4
System.out.println((int)2.9+(int)1.8); //3
}
}
예제 2-5
import java.util.Scanner;
public class ScannerEx {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("이름, 도시, 나이, 체중, 독신 여부를 빈칸으로 분리하여 입력하세요.");
Scanner scanner;
scanner=new Scanner(System.in);
String name;
name=scanner.next();
System.out.println("당신의 이름은 "+name+"입니다");
String city=scanner.next();
System.out.println("당신이 사는 도시는 "+city+"입니다");
int age=scanner.nextInt();
System.out.println("당신의 나이는 "+age+"살 입니다");
double weight = scanner.nextDouble();
System.out.println("당신의 체중은 "+weight+"kg 입니다");
boolean single=scanner.nextBoolean();
System.out.println("당신의 독신 여부는 "+single+"입니다.");
scanner.close();
}
}
예제 2-6
import java.util.Scanner;
public class ArithmeticOperator {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
//scanner형 scanner에 해당하는 내용을 모두 넣음
System.out.print("정수를 입력하세요:");
int time = scanner.nextInt(); //정수입력
int second = time % 60; //60으로 나눈 나머지는 초
int minute = (time/60)%60; //60으로 나눈 몫을 다시 60으로 나눈 나머지는 분
int hour = (time/60)/60; //60으로 나눈 몫을 다시 60으로 나눈 몫은 시간
System.out.print(time+"초는 ");
System.out.print(hour+"시간, ");
System.out.print(minute+"분, ");
System.out.print(second+"초입니다.");
scanner.close();
}
}
예제 2-7
public class AssignmentIncDecOperator {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a=3,b=3,c=3;
a+=3; //a=a+3=6
b*=3; //b=b*3=9
c%=2; //c=c%2=1
System.out.println("a="+a+",b="+b+",c="+c);
int d=3; //증감연산자 사례
a=d++; //a=3, d=4
System.out.println("a="+a+" ,d="+d);
a=++d; //a=5, d=5
System.out.println("a="+a+" ,d="+d);
a=d--; //a=5, d=4
System.out.println("a="+a+" ,d="+d);
a=--d; //a=3, d=3
System.out.println("a="+a+" ,d="+d);
}
}
예제 2-8
public class logicalOperator {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println('a'>'b'); //false
System.out.println(3>=2); //True
System.out.println(-1<0); //True
System.out.println(3.45<=2); //False
System.out.println(3==2); //False
System.out.println(3!=2); //True
System.out.println(!(3!=2)); //False
System.out.println((3>2)&&(3>4)); //False
System.out.println((3!=2)||(-1>0)); //True
System.out.println((3!=2)^(-1>0)); //True
}
}
예제 2-9
public class TernaryOperator {
public static void main(String[] args) {
// TODO Auto-generated method stub
int a=3, b=5;
System.out.println("두 수의 차는 "+((a>b)?(a-b):(b-a)));
}
}
예제 2-10
public class BitShiftOperator {
public static void main(String[] args) {
// TODO Auto-generated method stub
short a=(short)0x55ff;
short b=(short)0x00ff;
//비트연산
System.out.println("[비트 연산 결과]");
System.out.printf("%04x\n", (short)(a&b)); //비트 AND
System.out.printf("%04x\n", (short)(a|b)); //비트 OR
System.out.printf("%04x\n", (short)(a^b)); //비트 XOR
System.out.printf("%04x\n", (short)(~a)); //비트 NOT
byte c=20;
byte d=-8;
//시프트 연산
System.out.println("[시프트 연산 결과]");
System.out.println(c<<2); //c를 2비트 왼쪽 시프트
System.out.println(c>>2); //c를 2비트 오른쪽 시프트. 0삽입
System.out.println(d>>2); //d를 2비트 오른쪽 시프트. 1삽입
System.out.printf("%x\n",(d>>>2)); //d를 2비트 오른쪽 시프트. 0삽입
}
}
예제 2-11
import java.util.Scanner;
public class Twenties {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
System.out.print("나이를 입력하시오:");
int age=scanner.nextInt();
if((age>=20)&&(age<30)) {
System.out.print("20대입니다. ");
System.out.println("20대라서 행복합니다!");
}
else
System.out.println("20대가 아닙니다.");
scanner.close();
}
예제 2-12
import java.util.Scanner;
public class Grading {
public static void main(String[] args) {
// TODO Auto-generated method stub
char grade;
Scanner scanner=new Scanner(System.in);
System.out.print("점수를 입력하세요(0~100):");
int score = scanner.nextInt(); //점수 읽기
if(score>=90)
grade='A';
else if (score>=80)
grade='B';
else if (score>=70)
grade='C';
else if (score>=60)
grade='D';
else
grade='F';
System.out.println("학점은 "+grade+"입니다.");
scanner.close();
}
}
예제 2-13
import java.util.Scanner;
public class NestedIf {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
System.out.print("점수를 입력하세요(0~100):");
int score=scanner.nextInt();
System.out.print("학년을 입력하세요(1~4):");
int year=scanner.nextInt();
if(score>=60) {
if(year!=4)
System.out.println("합격!");
else if(score>=70)
System.out.println("합격!");
else
System.out.println("불합격!");
}
else
System.out.println("불합격!");
scanner.close();
}
}
예제 2-14
import java.util.Scanner;
public class Season {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner scanner=new Scanner(System.in);
System.out.print("월(1~12)을 입력하시오:");
int month=scanner.nextInt();
switch (month) {
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("잘못된 입력입니다.");
}
scanner.close();
}
}