본문 바로가기

JAVA공부(이것이 자바다)

java의 연산자와 조건문 반복문

이클립스의 사용

 

프로젝트를 닫아서 메모리 절약하기

이클립스는 메모리를 많이 잡아 먹는 프로그램이다. 이클립스는 열려있는 프로젝트를 모니터링해서 바뀐부분을 관찰해주게 계속 돌아가기 때문이다. 

그래서 빠르게 쓰려면 워크 스페이스에서 내가 사용하고 있는 프로젝트만 열어서 쓰는게 빠르다. 그러려면 사용하지 않는 프로젝트를 닫아주어야한다.

 

닫아주면 열려있는 ch03프로젝트와 prac프로젝트의 폴더 스타일이 달라진다.

더블클릭하면 다시 열린다.

 

프로젝트 위치 찾기

Location에 프로젝트의 위치가 나온다.

자바의 오버플로우와 언더플로우

-128 -127 ... .... .... .... 126 127

byte자료형에서 -128에서 -1을 하면 언더플로우가 일어나서 byte의 가장큰 크기인 127로 숫자가 변한다.

byte 자료형에서 127에서 +1을 하면 오버플로우가 일어나서 byte의 가장 작은 크기인 -128로 숫자가 변한다.

 

--> 이는 변수끼리 계산할 때 자료형의 크기를 생각해주어야하는 이유이다. 계산을 했을 때 원하지 않는 값이 나오기 때문이다.

 

실수의 연산

실수는 가수부의 오차 때문에 계산시에 정확한 값을 얻어내기 어렵기 때문에 경우에 따라서 정수로 계산한 다음에 0.001로 나눠주는 방법으로 계산하는 방법도 있다.

 

정수는 0으로 나누거나 0으로 나눈 나머지값을 구해야할 때 ArithmeticException(산술)예외를 반환한다.(컴파일에러)

실수는 0으로 나눴을때에는 infinity를 반환하고 0으로 나눈 나머지 값은 NaN을 반환한다.

실수를 통해 0으로 나눴을때와 숫자아닌값에 대한 것을 미리 확인해주어야 부정확한 값을 방지할 수 있다.

이거 0으로 나눠서 무한대예요?

Double.isInfinite(변수)

이거 0으로 나눴을때의 나머지값이예요?(숫자가 아닌거)

Double.isNaN(변수)

 

비교연산자

'==' 이 연산자는 변수에 들어있는 값끼리만 비교한다. 그러니 참조변수를 비교할적에는 주소를 비교하게 되니 오류가 뜨는것

'==' 는 결국 연산자이기때문에 피연산자의 자료형이 다르다면 큰쪽으로 형변환해서 비교한다.

ex) "Hello"와  new String("Hello")는 주소가 다르쥬~ 하지만 값은 같으니 equals() 함수로 비교해 줄 수 있다.

equalsIgnoreCase()는 대소문자구분없이 내용을 가지고 비교해주세요

 

논리연산자

and와 or는 연관된 결과값을 출력한다.

and는 앞에가 true일때 뒤에 값을 반환하고 앞에가 false이면 뒤에를 굳이 실행하지 않고 false를 반환한다.

or는 앞에가 true이면 뒤에 값을 확인하지 않고 true를반환하고 앞이 false면 뒤에값을 반환한다.

xor는 새로운 값을 출력하는 것이다. 1이 홀수 개이면 true를 반환한다. xor은 양쪽 다 확인한다.

 

두 항목에서 실행해야하는 문장이 있다면 &, | 이렇게 하나만 써주는게 좋다.

&& 성능 , &논리

 

 

Math.random()

실수형 값이 랜덤으로 나오는 변수이다.

랜덤으로 정수값이 나오도록하려면 

(int)Math.random()*6+1 //(1~6까지의 수를 랜덤하게 출력한다.)

랜덤 객체를 사용해서 정수형으로 맨처음부터 출력하는 방식도 있다.

Random random = new Random();

int num = random.nextInt(10);//(0~9까지의 수를 랜덤으로 출력한다.)

 

switch

case에 들어갈 수 있는 값은 정수 타입(byte , char, short, int, long) 문자열 타입(String)을 사용할 수 있다.

 

요새는 표현식(Expressions)를 사용한다. 표현식의 장점은 break를 사용하지 않아도 된다는 것이고 한 문장일 때 편리하다.

선택한 값을 바로 변수에 넣을 수 있고 계산해서 변수를 넣어야할때는 yield라는 예약어를 사용하면된다.

 

String grade = "B";
		int score1 = switch (grade) {
		case "A" -> 100;
		case "B" -> {
			int result = 100 - 20;
			yield result;
		}
		default -> 60;
		};

한줄로 쓸때의 깔끔함~

String temp = scanner.nextLine();
int num = Integer.parseInt(temp);

switch (num) {
        case 3 -> System.out.println("잔고>" + store);
		case 4 -> System.out.println("프로그램 종료");
		default -> System.out.println("1~4까지의 숫자만을 입력하세요!!");
        }

 

for문

실수형으로 증감을 하려면 부정확해서 틀릴 수 있다. 증감은 정수가 정확하다.

 

라벨 붙이기 --> 2중for문을 한번에 빠져 나올 수 있다.

Outter: for(char upper='A';upper<='Z';upper++) {
			for(char lower='a';lower<='z';lower++) {
				System.out.println(upper+"-"+lower);
				if(lower=='g') {
					break Outter;
				}
			}
		}
		System.out.println("프로그램 실행 종료");

 

coutinue

if(i%2!=0){
	coutinue;
    }
   System.out.println(i+" ");

coutinue는 한눈에 들어오지 않기 때문에 if 문의 조건을 바꿔서 밑에 실행해야하는 문장을 끌고 올라오면 직관적이다.

if(i%2==0){
	   System.out.println(i+" ");
    }

coutinue는 코드가 조건에 조건에 조건이 붙으면 코드가 오른쪽으로 밀리는데 그러면 코드해석이 어려워진다 이를 continue를 통해 왼쪽으로 끌어 올 수 있다.

'JAVA공부(이것이 자바다)' 카테고리의 다른 글

java참조타입 이어서  (0) 2023.05.26
java의 참조타입  (0) 2023.05.25
java의 변수  (0) 2023.05.23
java 설치와 사용  (0) 2023.05.22
Getter와 Setter 메소드  (0) 2022.10.30