자바2

Leafy·2023년 11월 30일
0

중앙_자바

목록 보기
2/76

.dll : Dynamic Linking Library

.exe : 실행 파일

실행 파일 하나만으로는 실행이 어렵기 때문에 .dll 라이브러리 파일들이 필요하다.

변수

Scope : 변수의 유효범위

package chap01;

public class First04 {

	public static void main(String[] args) {
		
		int v1 = 15; // 클래스 변수(global인데 자바에서는.)
		if(v1>10) {
			int v2; // 로컬 변수
			v2 = v1 - 10;
			System.out.println("v2의 값 : " + v2);
		}
		int v3 = v1 + v2 + 5;
	}

}

중괄호 안에서 생긴 변수는 그 중괄호를 벗어나면 사라짐.

  • int v2; 선언을 if 중괄호 밖으로 빼도 값을 주지 않으면 계속 v2를 알 수 없다~고 한다.
package chap01;

public class First04 {

	public static void main(String[] args) {
		
		int v1 = 15; // 클래스 변수(global인데 자바에서는.)
		int v2 = 0; // 뭐라도 값을 줘야 로컬에 갇히지 않나 보다.
		if(v1>10) {
			v2 = v1 - 10;
			System.out.println("v2의 값 : " + v2);
		}
		int v3 = v1 + v2 + 5;
		System.out.println(v3);
	}

}

문자열

char 문자 타입

  • A의 유니코드 값(숫자)을 char 타입에 넣어도 A가 출력 된다!
public class First5 {

	public static void main(String[] args) {
		
		char var1 = 'A';
		char var2 = 65;
		
		System.out.println(var1);
		System.out.println(var2);
	}

}

이클립스는 문자열 도중에 엔터 치면 +로 이어준다.
String var5 = "홍길동 전우치";

String var5 = "홍길동"
				+ "전우치";

String 문자열 클래스 타입

이스케이프 문자

  • \n : 다음 줄로 넘기기
String var5 = "홍길동\n전우치";
  • \t : tab하기
String var5 = "홍길동\t전우치";

실수형 (float, double)

몇.몇몇 * e(10)의 마이너스 제곱으로 쓰기

  • 실수의 표기 (예. 1.11e-2)
package chap01;

public class First6 {

	public static void main(String[] args) {
		
		float var4 = 3.14F;
		double var5 = 3.14;
		double var6 = 0.0000123; // 이렇게 쓰는 거 별로
		double var7 = 1.23e-5; // 이게 좀 낫다. e = 10
		
		System.out.println(var6);
		System.out.println(var7);
	}

}

String

대문자, 하이라이트 안 되니 예약어 아님.

String

자동 타입 변환(Promotion)

강제 타입 변환은 Casting

package chap02;

public class ex01 {

	public static void main(String[] args) {
//		byte -> int 잘 들어감. (자리 큰 걸로 넣으니까)
		byte a = 10;
		int b = a;
		
		System.out.println(b);

	}

}
// byte -> int 잘 들어감. (자리 큰 걸로 넣으니까)
byte a = 10;
int b = a;
		
// casting
int c = 10;
byte d = (byte) c; // 괄호 = 강제 형변환

int e = 200; // 너무 큰 거 casting하면 들어가는 만큼만 넣고 자름. 이진법
byte f = (byte) e;

정수형 연산 시 int 됨.

byte, short, int에 더불어 char까지 연산 시 int로 바뀌어 연산됨.

  • byte끼리 연산해도 자동으로 int형으로 바뀌어 연산됨.
public class ex2 {

	public static void main(String[] args) {
		
		byte a = 10;
		byte b = 20;
		// byte와 byte를 더하면(연산) byte 아니고 int
		int result = a + b;
		
		System.out.println(result);

	}

}
  • long으로 result를 잡고 long과 다른 형을 연산.

실수형 연산 시 double 됨.

  • floatdouble을 연산해도 double이다. (double이 기본이니까.)

🔥정수 연산의 결과는 정수(나눗셈 주의)

정수끼리는 나눗셈을 해도 실수 결과가 안 나온다. 몫만 나올 뿐.
연산 재료들의 타입을 double로 바꾼 뒤에 계산해야 함.
하나만 해도 double로의 자동 형변환은 일어날 것.. (int보다 double이 커서)

  • 그냥 정수끼리 연산하면 몫 연산. 결과만 0.0으로 double형변환 돼서 나옴.
int a = 1;
int b = 2;
		
double result = a / b;
		
System.out.println(result);
  • 하나라도 double 타입으로 바꾸면 정상적으로 나눗셈
int a = 1;
int b = 2;
		
double result = (double) a / b;
		
System.out.println(result);
  • double 형변환 하려고 이렇게도 한다.
int a = 1;
int b = 2;
		
double result = a * 1.0 / b; // 1.0은 실수형이니까
		
System.out.println(result);

이클립스에서 파일 이름(class) 바꾸기

우클 - refactor - rename

System.in.read()

  • 예외 처리를 한다. throws Exception
public static void main(String[] args) throws Exception {
		int a;
		a = System.in.read();
		System.out.println(a);
	}
}

자바에서 데이터타입이라고 안하고? 객체 타입, 클래스 타입? 이라고 한다.

글자비교..

Scanner scanner = new Scanner(System.in);
String e = scanner.nextLine();
String d = "Hello";

System.out.println( e == d ); // 주솟값 비교
System.out.println(e.equals(d)); // 이래야 값을 비교

연산자

대입 연산자

a = 1;
a = a + 1; // 이거랑
a += 1; // 이거랑 같음
a++

논리 연산자

&&&의 차이?
&는 두 조건을 무조건 검사하는것이고, &&는 첫번째 조건이 참일때만 검사하는것
출처: https://kangwoo.tistory.com/36 [오늘은 어디로 갈까...:티스토리]

String 변수 비교

기본 타입들은 그냥 ==로 하면 되는데,
참조 타입인 String은 .equals() 메소드 사용.

String strVar1 = "BABA"
String strVar2 = "BABA"

strVar1.equals(strVar2)
!strVar1.equals(strVar2)

삼항 연산자

? :

int score = 95;
char grade = (score>90) : 'A' : 'B';

위는 아래와 같다

int score = 95;
char grade;
if(score > 90) {
	grade = 'A';
} else {
	grade = 'B';
}
  • 여러 겹으로 삼항 연산자
int score = 85;
char grade = (score>90)? 'A' : ( (score>80)?'B':'C' );
		
System.out.println(score + "점은 " + grade + "등급입니다.");

조건문 if-else

int a = 3;
if( a > 1 ) {
	System.out.println("aa");
	System.out.println("bb");
}
		
if(a>2) {
	System.out.println("cc");
}
		
System.out.println("이것도 실행됨.");

if 다음에 else로 나누는 게 좋다 (이유는...?? 못들었어ㅠ)

문제 : 삼항연산자

// 키보드로 점수 입력, 80점 이상은 합격, 그 외는 불합격 출력
Scanner scanner = new Scanner(System.in);
		
System.out.print("점수 입력: ");
		
int score = scanner.nextInt();
		
String result = (score >= 80)? "합격" : "불합격";
		
System.out.println(result);		

문제 : 랜덤 숫자 꺼내기

Math.random() 쓰기. (import 필요 없나..? 그냥 되더라.)

// 랜덤하게 숫자 꺼내기
		
double number = Math.random();
		
// 0 < Math.random() < 1
// 0 < Math.random() * 6 < 6
// 1 < Math.random() * 6 + 1 < 7
		
// 실수 나오니까 강제 형 변환
// 1 < (int) (Math.random()*6 + 1) < 7
		
int number1 = (int) (Math.random()*6 + 1);
		
System.out.println(number1);

문제 : switch 문

if-else와 switch문은 90% 같고, 용도는 100% 같다.

Scanner scanner = new Scanner(System.in);
String str = scanner.nextLine();
		
switch (str) {
case "과자":
	System.out.println("후레쉬베리");
	break;
case "초코":
	System.out.println("가나");
	break;
case "사탕":
	System.out.println("박하");
	break;
case "젤리":
	System.out.println("하리보");
	break;
		
default:
	System.out.println("먹을 게 아닙니다.");
	break;

중첩 for문

구구단 출력

for (int m = 2; m <= 9; m++) {
	System.out.println("*** " + m + "단 ***");
	for (int n = 1; n <= 9; n++) {
		System.out.println(m + " x " + n + " = " + (m*n));

while : if + for

다른 것보다 ifforwhile문이 중요.

break : 멈추고 루프 탈출
continue : 멈추고 위로 가서 이어서

0개의 댓글