웹개발 기초/java기초

자바 연산자,반복문,조건문

미미_밍 2024. 1. 19. 14:09

입력 

커서가 깜빡이고 있는 상태 
입력하기 전에 출력을 통해 어떤 값을 입력해야할지 사용자에게 알려주어야 한다 .

 


입력 클래스 
Scanner sc = new Scanner(System.in);
String name = "강민정"; 

 


입력 메소드 
sc.next(): 사용자가 입력한 문자열 값
- 사용자가 입력한 값 중 공백 또는 줄바꿈 문자를 구분점으로 각 문자열을 분리
- 첫번째 문자열은 첫번째 next() 에 담고
- 두번째 문자열은 두번째 next() 에 담는다. 

sc.nextLine() : 사용자가 입력한 문자열 값 
- 공백 또는 줄바꿈 문자도 값으로 취급 , 그대로 입력받는다. 

 

package inputTest;

import java.util.Scanner;

public class InputTest {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		String name = null ,firstname = null, lastname = null ;
		
		System.out.print("이름 : ");
//		
//		firstname = sc.next();
//		lastname = sc.next();
//		
//		name = lastname + firstname; 
		
		name = sc.nextLine(); 
		
		System.out.println(name + "님 환영합니다");

	}
}


Scanner sc = new Scanner(System.in) 으로  입력 class 를 메모리에 올려준다. 

지금은 외우자. 나중에 class 를 배우면 이해될것.

 

sc.next() 메서드(함수) 를 변수에 담아서 사용한다. 

위의 코드에서 

이름 : 이 print 되고 

firstname 에 sc.next()를 담았으니

이름: 뒤에 커서가 깜빡이게 된다. 깜빡이는 곳에 이름을 입력해주면

firstname 에 저장되고 

print (firstname) 을 하면 내가 입력한 이름이 나온다 

 

*꼭 firstname = sc.next() 를 해주어야 입력이 되는건 아니다 

변수에 안담아줘도 입력은 되지만 변수에 담지 않으면

입력값은 재사용 불가능하다 . 저장공간이 할당되지 않았기 때문이다.

 

package inputTest;

import java.util.Scanner;

public class InputTesk1 {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int num1 = 0 , num2 = 0 ,result = 0; 
		String message1 = "첫 번째 정수 : ", message2 ="두 번째 정수 : ";
		String format = "%d + %d = %d \n";

		
		
		System.out.print (message1);
		
		num1 = Integer.parseInt(sc.next());
		
		System.out.print(message2); 
		num2 = Integer.parseInt(sc.next());
		
		result = num1 + num2; 
		System.out.printf(format,num1,num2,result);
		
	}
}

 

위에서 설명한대로 sc.next()는 문자열을 입력받는다. 

만약 정수를 입력받고 싶으면 어떻게 해야할까 ? 

 

저번게시글에서 봤던 

Integer.parseInt () 로 문자열 클래스를 Int 로 변환시키면 된다. 

 

 

* num1,num2,result 를 식으로 한번에 출력하기 위해 서식문자를 사용해 준다. 

서식문자를 사용하면 "" 안에 변수처럼 정수나 실수를 넣을 수 있다 .

 




연산자
기능이 있는 특수문자 

연산자의 우선순위 
최우선 연산자
단항 연산자
산술 연산자
쉬프트 연산자
관계 연산자
논리 연산자
삼항 연산자
대입 연산자 

결합성 
하나의 수식에 동일한 연산자가 여러 번 사용되면 알맞은 방향으로 결합되어 연산
3 + 2 + 1
a = b = c c에서 a 로

 

 



논리형(boolean)

10 > 1 
참 = true
거짓 = false

boolean 변수명 = 값(true, false) 
             -------
            1byte 

*최소 단위가 1byte 라서 1비트만 써짐에도 1byte 할당됨 

조건식 
결과가 참 또는 거짓, 둘 중 하나가 나오는 식. 

관계연산자 
==
!=
>,<
>=, >=
* 0<x<10 은 조건식 2개인거 때야한다

논리연산자

 && and(두 조건식 모두 참이어야)
|| or (둘 중 하나만 참이면 참)

단항연산자 
!, !A, NOT 조건식을 반대로 바꿔줌  

*대입연산자는 참 거짓 x so 조건식 아니겠지 ? 

 

package operTest;

public class Oper1 {
	public static void main(String[] args) {
		boolean isTrue = 10 != 11; 
		
		System.out.println(11 == 10);
		System.out.println(11 != 10);
		System.out.println(isTrue);
		System.out.println(isTrue && 10 == 10);
		System.out.println(isTrue && 10 != 10);
		// &&는 앞이F 면 뒤에거 연산 x 어짜피 f니까 
		System.out.println(isTrue || 10 != 10);
		System.out.println(isTrue || !(10 != 10));
	}
}

 

1) 1 1==10 -> false

2) 11!=10 ->true

3)isTrue ->true

4) t && 10 == 10 -> 무조건 t (교집합이라고 생각하면 된다. t 교집합 10 = 10 )

 

5) t && 10 !=10 -> false

* && 는 앞이 f 는 연산안해도 된다. 둘다 t 여야 t 가 나옴

 

6) t || 10 !=10 -> 합집합이라 생각 하나가 t 면 무조건 t 

7) true 가 있음으로 t 

 




삼항 연산자 (? :) : 값으로 봐야한다 ! 
조건식 ? 참 : 거짓 

int result = 10 > 9 ? 10 : 9 ;
 
단, 참과 거짓 자리에는 값만 작성할 수 있다. 


삼항 연산자를 사용해야 할 때
조건식이 딱 한 개 있을 때에만 사용하자 ! 

 

package operTest;

import java.util.Scanner;

public class Oper2 {
	public static void main(String[] args) {
		//대소 비교 
		// 두 정수 입력받기 
		
		Scanner sc = new Scanner(System.in);
		int num1=0, num2=0;
		String result = null;
		String message ="두 정수를 입력하세요",message2="ex) 1 2";
		
		
		System.out.println(message);
		System.out.println(message2);
		
		num1 = sc.nextInt();
		num2 = sc.nextInt();
		
		result = num1 > num2 ? "더 큰값" + num1 : num2 == num1 ? "두 수는 같습니다" : "더 큰값" + num2 ;
		
		System.out.println(result);
		
		//QA 잘 되는지 테스트 하는것.
	}
}

 

조건식이 하나가 아니면 복잡해진다.

이럴땐 if 문을 사용하자.

결과값에 "더 큰값" 을 붙인건 num1 은 int 타입인데 변수 result 는 String 타입이라

형변환 해 준 것이다. 

package operTest;

import java.util.Scanner;

public class Oper3 {
	public static void main(String[] args) {
		//키입력 정수면 정수로출력 , 실수면 실수로출력 삼항연산자 사용 
		Scanner sc = new Scanner(System.in);
		String format = null; 
		boolean result = false; 
		
		System.out.print("값을 입력하시오 : "); 
		
		double key = sc.nextDouble();
		
		
		
		result = key - (int)key == 0; 
		
		format = result ? "%.0f" : "%.02f";
		format += "\n";
		
		System.out.printf(format, key);
	}
}

 

key 는 실수로 입력받는다. (실수에서 소수점 첫째자리까지만 표시하면 정수) 

실수 - 정수로 변환한 key == 0 이라면 true (정수) 

나머지 값이 있다면 실수일 것.

 

result 에 ture false 가 있는지에 따라서 소수점 0자리까지, 둘째자리까지 반올림해서 표시해준다. 

 




제어문 

-조건문
if
if(조건){
}
if(조건){
}
if(조건){
}

* 반드시 모든걸 다 하나씩 검사할때 씀 ex) 쇼핑몰의 1,2,3,4 목록
  위의 조건식 결과와 무관하게 검사 

if(조건){
}
else if(조건){
}
else{
}

* 위의 조건식이 참이면 밑은 실행되지 않음 

package controlStatementTest;

import java.util.Scanner;

public class IfTest {
	public static void main(String[] args) {
		
			
			Scanner sc = new Scanner(System.in);
			int num1=0, num2=0;
			String result = null;
			String message ="두 정수를 입력하세요",message2="ex) 1 2";
			
			
			System.out.println(message);
			System.out.println(message2);
			
			num1 = sc.nextInt();
			num2 = sc.nextInt();
			
			
			if(num1 >num2) {
				result = "더 큰값 " +num1;
			}
			else if(num1 < num2) {
				result = "더 큰값 " +num2;
			}
			else {
				result = "두 수가 같습니다 ";
			}
			System.out.println(result);
			// 분기별로처리x  일괄처리 
			
		}
	}

 

*일괄처리가 코드 수정에 용이하다. 




switch

switch(값)
case 값1:
실행할 문장; 
break;
case 값2:
실행할 문장; 
break;
case 값3:
실행할 문장; 
break;
case 값4:
실행할 문장; 
break;
default:
실행할 문장; 
break;
* 같은지 밖에 검사가 안됨 
* break 써줘야 다음 분기로 안넘어간다. 

package controlStatementTest;

import java.util.Scanner;

public class SwitchTest {
	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		int choice = 0;
		String redMessage = "경고";
		String yellowMessage = "노랑 ";
		String	blackMessage = "검정 ";
		String	errorMessage = "-1 ";
		String result = null; 
				
		choice = sc.nextInt();
		
		
		
		switch(choice) {
		case 1:
			result = redMessage;
			break;
		case 2:
			result = yellowMessage;
			break;
		case 3:
			result = blackMessage;
			break;
		default:
			result = errorMessage; 
			break;
	
		}
	}
}

 

*default 는 어느것과도 일치하지 않을때, 

 



삼항연산자, if문, switch문 비교 

삼항연산자 : 조건식이 1개 있을때 사용 
if문 : 조건식에 비교( > , <, <=,>=) 연산자를 사용하거나, 여러 개의 조건식을 논리 연산자( &&,  ||) 사용
switch : 하나의 변수에 여러개의 값이 담길 수 있고, 각 값이 같은 지를 비교할 때 사용 

 


 

대입연산자(복함 대입 연산자 , 누적 연산자) 
int money = 1000; 
//money = money - 1000; 
money -= 1000; 

증감연산자 
전위형 : 해당 라인부터 바로 적용
++data , --data
후위형 : 다음 라인부터 적용 
data++, data--

package operTest;

public class Oper5 {
	public static void main(String[] args) {
		int data = 0; 
		System.out.println(data++);
		System.out.println(data);
		System.out.println(++data);
		
		
		
	}
}


for문
for(초기식; 조건식; 증감식){
실행할 문장; 
}

 

package operTest;

public class Oper6 {
	public static void main(String[] args) {
		//1~10 중 3 까지 출력 
//		for(int i=0; i<10; i++) {
//			System.out.println(i+1);
//			if(i==2) {
//				break;
//			}
//		}
		//1~10 중 3 제외하고 출력
		for(int i=0; i<10;  i++) {
			if(i==2) {
				continue;
			}
			System.out.println(i+1);
		}
		

	}
}

*continue 는 해당 반복만 건너뛰고 계속 진행해준다. 

package controlStatementTest;

public class ForTask {
	public static void main(String[] args) {
//A~F 까지 출력
//		for(int i=0; i<6; i++) {
//			System.out.println((char)(65+i));
//		}
//	System.out.println();	
//		
//c 만 빼고 출력
//	for(int i=0; i<6; i++) {
//			System.out.println((char)(i>1? 66:65)+i);
		
//012340123401234 출력
		for(int i=0; i<15; i++) {
			System.out.print(i%5);
		}
	
	System.out.println();
//aBcD~Z 출력
	for(int i=0; i<26; i++) {
		System.out.print((char)((i%2 == 0 ? 97 : 65)+i));
	}
	}
}

 

*아스키코드 찾아보기 


while문

반복 횟수를 정확히 알 수 없는 경우 사용

반복횟수를 아는 경우는 for 문을 사용한다. 

 

do~while 문

package controlStatementTest;

import java.util.Scanner;

public class DowhileTest {
	public static void main(String[] args) {
		String message = "1. 분실신고\n 2. 통신사 이동 n/ 3.결제 수단 변경 \n 0.상담원 연결";
		Scanner sc = new Scanner(System.in);
		int choice = 0; 
		
		
		do{
		System.out.println(message);
		choice = sc.nextInt();
		
		}while(choice != 0);
}
}

조건에 상관없이 일단 실행(do) 하고 

조건검사