
java 17기준, python 기본 문법 공부가 충분하다는 전제로 작성된 게시물
프린트 방법 System.out,println(); <- printin 아니고 printLn 임을 유의 (소문자). ln = line 줄임말
packge, class (설계도)설정 후, void(메소드) 안에서 코드를 입력해야 실행됨
주석은 // 달고 입력한다.
package sec03.exam01;
public class hello {
public static void main(String[] args) {
System.out.println("Hello, Java");
// TODO Auto-generated method stub. main method파일 필수! 맨앞은 무조건 대문자여야한다. 실행은 F 11로 함
}
}
Hello, Java
변수 타입 선언과 값을 저장하고 출력하는 개념
프린트 여러개는 +로 연결
package sec03.exam01;
public class hello {
public static void main(String[] args) {
int value = 10;
int sum = value + 5;
System.out.println("sum:" + sum);
}
}
sum: 15
변수타입 종류
[정수] 주로 숫자형은 int나 long씀 (요즘 ram 사양 좋아서 굳이 작은거 안씀)
byte -128 ~ 127
short 음수 -32766 ~ 32767
char 0 ~ 65535 유니코드 <- ' ' 사이에 있으면 문자도 유니코드로 인식 可.
큰따옴표 사이는 문자열(string)이므로 저장 불가
int 21억 위아래 범위
long 2의 62승 위아래 <- 단, long 변수명 입력시 값 뒤에 L을 써야한다! 안그러면 그냥 int로 저장됨
public class TypeExample {
public static void main(String[] args) {
long var1 = 1000000000000000; // 컴파일 에러 생김
long var2 = 1000000000000000L; // L을써야 long으로 저장됨
System.out.println(Var1);
System.out.println(Var2);
}
}
[실수]
float 위아래 10이 38승까지 <- float로 인식시키려면 뒤에 F(f)를 붙여야함. (long과 같은 상황)
double 위아래 10의 308승까지
java는 오른쪽의 값이 왼쪽의 틀에 잘 들어가는지를 검증하기 때문에 f나 L을 입력하기를 요구한다
그외 과학적 표기법 2e-3 같은 것도 사용 可 (구글링 참조)
[문자열]
String " " <- 쌍따옴표 사이에 넣어야 함! (string은 기본 type에 해당되지 않음)
\ : 문자열 내부 이스케이프 문자
\를 통해 특정 문자를 포함시킨다.
public class StringEx {
public static void main(String[] args) {
String abc = " 나는 \"자바\"를 좋아합니다. ";
System.out.println(str);
}
}
나는 "자바"를 좋아합니다.
자동 타입 변환: 여러 type이 섞인 연산이라면 그중 가장 큰 type으로 자동 변환된다. 문자+숫자면 문자로 바뀜
byte a = 10;
int b = a;
이런식으로 byte형식의 a를 b에 복사할 때 int로 저장한다는 의미
강제 타입 변환 (작은 그릇에 큰 내용물을 담을 때): casting(캐스팅)
int b = 10;
byte a = (byte) b; // 이렇게 앞에 한번 더 선언해줘야 타입변환됨
실수에서 정수로 바꿀 때에도 (int)를 선언해줘야 한다. (소숫점은 소실된다.)
double value = 3.14;
int result = (int) value;
이 경우 result는 3만 저장된다.
int x = 1;
int y = 2;
double result = x / y;
System.out.println(result);
이 경우 오른쪽 x / y는 int라서 0.0이 출력됨.
따라서 double를 입력해줘야한다 (분자, 분모 둘다 또는 둘 중 하나만)
int x = 1;
int y = 2;
double result = (double) x / y;
System.out.println(result);
double은 여러 type이 있다면 double로 자동으로 바꾸어 연산해준다.
문자열로 입력된 숫자정보를 숫자형 타입으로 강제변환: 변환type.parse변환type(대상)
String str = 10; 에 대해서
Byte.parseByte(str);
Short.parseShort(str);
Integer.parseInt(str);
Long.parseLong(str);
Float.parseFloat(str);
Double.parseDouble(str);
Boolean.parseBoolean(str);
이와 반대로 문자열로 바꾸려면
String str = String.valueOf(기본타입정보);
print 함수 정리
println(); <- 내용 출력 후 행을 바꿔라 (파이썬 print와 같음)
print(); <- 내용을 출력만 해라
printf(); <- 괄호 한 첫 번째 문자열 형식대로 내용 출력해라
package sec04.exam01;
public class PrintfExample {
public static void main(String[] args) {
int value = 123;
System.out.printf("상품의 가격:%d원\n", value); //정수
System.out.printf("상품의 가격:%6d원\n", value); // 6자리 정수 왼쪽 빈 자리 공백
System.out.printf("상품의 가격:%-6d원\n", value); // 6자리 정수 오른쪽 공백
System.out.printf("상품의 가격:%06d원\n", value); // 6자리 정수 빈 자리 0으로 채움
double area = 3.14159 * 10 * 10;
System.out.printf("반지름이 %d인 원의 넓이:%10.2f\n", 10, area);
// 소수점 이상 7자리 소수점 이하 2자리 왼쪽 빈 자리 공백
String name = "홍길동";
String job = "도적";
System.out.printf("%6d | %-10s | %10s\n", 1, name, job);
}
}
상품의 가격:123원
상품의 가격: 123원
상품의 가격:123 원
상품의 가격:000123원
반지름이 10인 원의 넓이: 314.16
1 | 홍길동 | 도적
System.in.read()의 key code는 영어만 된다. 한글까지 되려면 sacnner가 필요
Scanner 키보드에서 입력된 모든 내용을 읽고 문자열로 출력한다.
package sec04.exam05;
// scanner는 매우 중요한 개념이다.
import java.util.Scanner; // 반드시 import해야 sacnner 작동함!
public class ScannerExample {
public static void main(String[] args) throws Exception {
Scanner scanner = new Scanner(System.in);
String inputData;
while(true) {
inputData = scanner.nextLine();
System.out.println("입력된 문자열: \"" + inputData + "\"");
if(inputData.equals("q")) {
break;
}
}
System.out.println("종료");
}
}
자바
입력된 문자열: "자바"
q
입력된 문자열: "q"
종료
키보드 입력하는거 그대로 출력. q누르면 종료되는 코드이다.
자바는 일반적 수학 연산을 진행하지만 대입연산자의 경우
a = b = c = 5; <- 이 경우 c에 먼저 대입 후 b에 대입, a에 대입된다. (원리만 기억하자)
부호 대입 연산시 주의점
package sec02.exam01;
public class SignOperatorExample {
public static void main(String[] args) {
int x = -100;
int result1 = +x;
int result2 = -x;
System.out.println("result1=" + result1);
System.out.println("result2=" + result2);
byte b = 100;
//byte result3 = -b; //컴파일 에러 앞에 int를 붙여줘야 -를 붙인게 반영된다.
int result3 = -b;
System.out.println("result3=" + result3);
}
result1=-100
result2=100
result3=-100
각종 연산자 예제들
package sec02.exam02;
public class IncreaseDecreaseOperatorExample {
public static void main(String[] args) {
int x = 10;
int y = 10;
int z;
System.out.println("-----------------------");
x++;
++x;
System.out.println("x=" + x);
System.out.println("-----------------------");
y--;
--y;
System.out.println("y=" + y);
System.out.println("-----------------------");
z = x++;
System.out.println("z=" + z);
System.out.println("x=" + x);
System.out.println("-----------------------");
z = ++x;
System.out.println("z=" + z);
System.out.println("x=" + x);
System.out.println("-----------------------");
z = ++x + y++;
System.out.println("z=" + z);
System.out.println("x=" + x);
System.out.println("y=" + y);
}
}
-----------------------
x=12
-----------------------
y=8
-----------------------
z=12
x=13
-----------------------
z=14
x=14
-----------------------
z=23
x=15
y=9
package sec02.exam09;
public class LogicalOperatorExample {
public static void main(String[] args) {
int charCode = 'A';
if( (charCode>=65) & (charCode<=90) ) {
System.out.println("대문자 이군요");
}
if( (charCode>=97) && (charCode<=122) ) {
System.out.println("소문자 이군요");
}
if( !(charCode<48) && !(charCode>57) ) {
System.out.println("0~9 숫자 이군요");
}
int value = 6;
if( (value%2==0) | (value%3==0) ) {
System.out.println("2 또는 3의 배수 이군요");
}
if( (value%2==0) || (value%3==0) ) {
System.out.println("2 또는 3의 배수 이군요");
}
}
}
대문자 이군요
2 또는 3의 배수 이군요
2 또는 3의 배수 이군요
package sec02.exam10;
public class AssignmentOperatorExample {
public static void main(String[] args) {
int result = 0;
result += 10;
System.out.println("result=" + result);
result -= 5;
System.out.println("result=" + result);
result *= 3;
System.out.println("result=" + result);
result /= 5;
System.out.println("result=" + result);
result %= 3;
System.out.println("result=" + result);
}
}
result=10
result=5
result=15
result=3
result=0
조건문 if, if else
if문 1줄짜리는 중괄호 생략 可이지만 생략하면 가독성이 떨어지므로 알고만 있자
package sec01.exam04;
public class IfDiceExample {
public static void main(String[] args) {
int num = (int)(Math.random()*6) + 1;
if(num==1) {
System.out.println("1번이 나왔습니다.");
} else if(num==2) {
System.out.println("2번이 나왔습니다.");
} else if(num==3) {
System.out.println("3번이 나왔습니다.");
} else if(num==4) {
System.out.println("4번이 나왔습니다.");
} else if(num==5) {
System.out.println("5번이 나왔습니다.");
} else {
System.out.println("6번이 나왔습니다.");
}
}
}
Math.random()은 0에서 1사이의 double 타입의 난수 하나를 출력. 그러므로 뒤에 정수를 곱하고 int로 정리한후 +1을 더하면 정수형 랜덤을 만든다. 본 예제는 주사위 번호를 하나 뽑기 위한 예제이다.
즉,
(int) (Math.random() * n ) + start ;
에서 start는 시작 숫자, n은 시작숫자로부터의 n개의 정수 개수 이다.
(int) (Math.random() * 4 ) + 8 ;
8부터 시작하여 나오는 4개의 정수 중 랜덤하게 출력된다. 8 9 10 11이 그 범위
조건문 switch
switch는 조건문의 True False로만 결정되는 범위를 확장한 개념이다.
같은 주사위 돌리기 코드는 이렇게 나온다.
package sec01.exam05;
public class SwitchExample {
public static void main(String[] args) {
int num = (int)(Math.random()*6) + 1;
switch(num) {
case 1:
System.out.println("1번이 나왔습니다.");
break;
case 2:
System.out.println("2번이 나왔습니다.");
break;
case 3:
System.out.println("3번이 나왔습니다.");
break;
case 4:
System.out.println("4번이 나왔습니다.");
break;
case 5:
System.out.println("5번이 나왔습니다.");
break;
default:
System.out.println("6번이 나왔습니다.");
break;
}
}
}
break가 없으면 switch는 break가 나올 때 까지 실행하므로 반드시 작성해야한다!
여기선 break가 없다면 다음 case 값과 상관없이 case가 실행된다.
default는 모든 case가 아닐 경우에 대해 작성한다.
brake가 없는 switch
package sec01.exam06;
public class SwitchNoBreakCaseExample {
public static void main(String[] args) {
//8<= … < 12(8+4) 사이의 정수 얻기
int time = (int)(Math.random()*4) + 8;
System.out.println("[현재시간: " + time + " 시]");
switch(time) {
case 8:
System.out.println("출근합니다.");
case 9:
System.out.println("회의를 합니다.");
case 10:
System.out.println("업무를 봅니다.");
default:
System.out.println("외근을 나갑니다.");
}
}
}
[현재시간: 10 시]
업무를 봅니다.
외근을 나갑니다.
실행결과 1
[현재시간: 8 시]
출근합니다.
회의를 합니다.
업무를 봅니다.
외근을 나갑니다.
실행결과 2
[현재시간: 11 시]
외근을 나갑니다.
실행결과 3
switch는 그래서 string을 조건으로 적용할 수 있다.
package sec01.exam07;
public class SwitchCharExample {
public static void main(String[] args) {
char grade = 'B';
switch(grade) {
case 'A':
case 'a':
System.out.println("우수 회원입니다.");
break;
case 'B':
case 'b':
System.out.println("일반 회원입니다.");
break;
default:
System.out.println("손님입니다.");
}
}
}
반복제어문 for(초기화식; 조건식; 증감식)
package sec02.exam02;
public class ForSumFrom1To100Example1 {
public static void main(String[] args) {
int sum = 0;
for(int i=1; i<=100; i++) {
sum += i;
}
System.out.println("1~100 합 : " + sum);
}
}
int i=1 상황에서 i<=100 이라는 조건하에 i++ (1씩 계속 더하기)를 시행
for의 각 식은 여러개가 가능하다. -> for(초기화식1, 초기화식2; 조건식1, 조건식2; 증감식1, 증감식2)
package sec02.exam03;
public class ForSumFrom1To100Example1 {
public static void main(String[] args) {
int sum = 0;
int i = 0;
for(i=1; i<=100; i++) {
sum += i;
}
System.out.println("1~" + (i-1) + " 합 : " + sum);
}
}
그러나 이렇게 프린트를 적용하면 for문내 값이 바뀌면 그 값을 반영하여 적용해준다. (확장성이 더 있다.)
그러나 이 sum의 값(int)이 감당할 숫자가 넘어가면 음수가 출력된다.
문제가 발생할 가능성이 있다면 메모리가 낭비되더라도(요즘은 메모리 넉넉함) double을 쓰는 경향 有
또한 0.1을 더하는 연산도 제대로 작동하지 않는다. (0.1은 컴퓨터가 제대로 저장할 수 없는 숫자임)
컴퓨터는 0.1 + 0.1 = 0.2 라고 생각하지 않는다.
이중for문
package sec02.exam09;
public class BreakOutterExample {
public static void main(String[] args) throws Exception {
Outter: // 겉의 for문에 이름을 붙인 형태
for(char upper='A'; upper<='Z'; upper++) {
for(char lower='a'; lower<='z'; lower++) {
System.out.println(upper + "-" + lower);
if(lower=='g') {
break Outter;
} // 겉의 for문까지 모두 종료하기 위함. 기본은 소문자만 종료
}
}
System.out.println("프로그램 실행 종료");
}
}
A-a
A-b
A-c
A-d
A-e
A-f
A-g
프로그램 실행 종료
바깥쪽은 대문자, 안쪽은 소문자만 랜덤 출력하다가 g가 나오면 중단하는 것.
for에 이름을 붙여서 모두를 중단시켰다.
While을 사용한 합계 코드
package sec02.exam07;
public class WhileSumForm1To100Example {
public static void main(String[] args) {
int sum = 0;
int i = 1;
while(i<=100) {
sum += i;
i++;
}
System.out.println("1~" + (i-1) + " 합 : " + sum);
}
}
do-while , while 비교:
do-while은 조건을 나중에 따지고 일단 한번은 실행. while은 조건이 미충족시 실행도 안함
do-while 사용시 'do'만 입력한다.
do{
System.out.print("월을 입력하세요==>");
month = sc.nextInt();
if( month >=1 && month <= 12 ){
break;
}
}while(true);
대충 이런식으로 사용한다. while에 특정 조건이 들어갈 수 있다.
continue를 추가한 경우의 예
package sec02.exam10;
public class ContinueExample {
public static void main(String[] args) throws Exception {
for(int i=1; i<=10; i++) {
if(i%2 != 0) {
continue;
}
System.out.println(i);
}
}
}
2
4
6
8
10
'Programming > Java' 카테고리의 다른 글
Interface (인터페이스) (0) | 2023.10.17 |
---|---|
Inheritance(상속) (1) | 2023.10.16 |
instance, static, package, access modifier (1) | 2023.10.16 |
OOP(Object Oriented Programming) 객체지향 프로그래밍 (0) | 2023.10.13 |
참조타입, 배열, 열거타입 (0) | 2023.10.12 |