자바 학습 & 복습 4일차

728x90

if & else if 조건문

public class aa {
	public static void main(String[] args) {
		
		//복합대입연산자 예시
		int i = 1;
		int b = 12;
		int b2 = 12;
		int B = 7;
		int B2 = 5;
		int B3 = 6;
		int L = 3;
		final int j = 3;

		
		System.out.println(i+=2); // i=i+2 =3
		System.out.println(i-=2); // i=i-2 = -1
		System.out.println(i*=2); // i=i*2 = 2
		System.out.println(i/=2); // i=i/2 = 0
		System.out.println(i%=2); // i=i%2 = 1
		System.out.printf("test: %d%n",b>>=1);
		//이진수로 비트 값을 오른쪽을 1칸 밀어버린다는 뜻
		//이진수 표현법: 0,1,2,4,8,16으로 증가되며 0101 = 5, 1001 = 9, 1011 = 11 등으로 표현됨
		//따라서 b(1100)을 한칸 오른쪽으로 넘겨서 (0110) = 6 추출
		System.out.println(b2<<=2); 
		//위와 동일한 개념, 현재 b2(1100)을 왼쪽으로 2칸 밀어버렸다는 뜻
		//즉(1100)을 (110000) = 16+32 = 48
		System.out.println(B&=2); // B=B&2
		//의미는 2진수로 변환한 두개의 숫자 중 겹치는 것만 대입해서 2진수 추출
		//(0111)&&(0010) = (0010) = 2
		System.out.println(B2|=2); // B2=B2|2
		//위와 같은 개념으로 (0101)||(0010) = (0111) = 7;
		System.out.println(B3^=2); // B3=B3^2
		//배타적 논리합 연산 XOR연산 = 2진수 중 겹치는 값이 있으면 0, 없으면 1로 표시
		//즉 (0110) ^ (0010) = 0100 = 4
		System.out.println(L*=10+j); // L=L*(10+j)
		//3*13 = 39
        
        
//조건문 = if & switch
//반복문 = for & while
	//조건문 & 반복문 = 제어문(flow control statement)
		//예시
		char ch='s';
		if(ch=='s' || ch=='\t' || ch=='\n') {
			System.out.println("참입니다");
			//'\t'은 tap의 의미		
		}
		
		int i=50;
		if(i<=40)
			System.out.println("출력값 하나일때는 블럭{}생략 가능");
		else
			System.out.println("조건문이 참 거짓 둘 중 하나의 조건식이면 else 사용");
		
		//여러개의 if문은 else if 사용, 마지막엔 else로 마무리
		int score = 58;
		if(score>=90) {
			System.out.println("A");
		}
		else if(score>80) {
			System.out.println("B");
		}
		else if(score>70) {
			System.out.println("C");
		}
		else
			System.out.println("FAIL");

		//학점 입력기 예시 - scanner 문 사용
		
		Scanner scanner = new Scanner(System.in);
		System.out.println("점수를 입력하세요");
		int s=0; //학점 입력을 위한 0 공백 int함수 생성
		char g=' '; //학점 입력을 위한 char 공백 함수 생성
		s=scanner.nextInt(); //char or String이 아닌 int이므로 nextLine이 아닌 nextInt로 대체
		if(s>=90) {
			g='A';
		}
		else if(s>80) {
			g='B';
		}
		else if(s>70) {
			g='C';
		}
		else
			g='F';
		System.out.printf("당신의 점수는 %d이므로 학점은 %c입니다%n", s,g);
		//나온 점수를 위의 printf에 대입
		System.out.println("당신의 점수는 "+s+"이므로 학점은 "+g+"입니다");
		//혹은 위의 println으로 대체 가능 or char g='F'로 미리 선언해서 else를 제외시킬 수 있음



//if 중첩문=if안의 중첩문 = opt변수를 추가함으로써 같은 등급의 +-를 입력
		char grade = 'F';
		char opt = ' ';
		int score =0;
		
		Scanner scanner = new Scanner(System.in);
		System.out.println("점수를 입력해주세요");
		score=scanner.nextInt();
		if(score>90) {
			grade = 'A';
			if (score>=95) {
				opt='+';
			}
			else if (score>=91) {
				opt='-';
			}
		}
		if(score>80) {
			grade = 'A';
			if (score>=85) {
				opt='+';
			}
			else if (score>=81) {
				opt='-';
			}
		}
		System.out.println("입력된 점수는 "+score+"이고 등급은 "+grade+opt+"입니다.");
		System.out.printf("입력된 점수는 %d이고 등급은 %c%c입니다.", score, grade,opt);




	}
}

 

switch 조건문

		//경우의 수가 많을때는 switch 함수 사용
		//else if와의 차이점:
		//장점: true false출력과 달리 여러 케이스들을 한 블럭에 다 저장할 수 있어서 깔끔함
		//단점: switch의 조건식 결과값은 정수나 문자열(1.7ver이상)만 가능
		//단점2: case문의 값은 정수, 상수(변수 안됨), 문자열만 가능 + 중복 안됨
		//꼭 중간에 break문을 써줘서 값이 일치하면 식이 멈추도록 해야함
		
		//예시 switch
		System.out.println("현재 월을 입력하세요");
		Scanner scanner = new Scanner(System.in);
		int month = scanner.nextInt();
		
		switch(month) {
			case 1: case 2: case 3:
				System.out.println("겨울입니다");
				break;
			case 4: case 5: case 6:
				System.out.println("봄입니다");
				break;
			case 7: case 8: case 9:
				System.out.println("여름입니다");
				break;
			default:
				System.out.println("겨울입니다");
		}

 

Math.random 반복문

public class Daily_Upload_TSTORY {
	public static void main(String[] args) {
		
		//임의의 정수 만들기 = 난수 만들기
		//Math.random() = 0.0 ~ 1.0사이의 임의의 double 값을 반환
		//=0.0<=1.0 = 즉 0.999999999는 가능하지만 1.0은 안됨
	
		double d = Math.random();
		double d1 = Math.random()*3;
		System.out.println(d);
		
		//만약 0~3의 double random값을 얻고싶다면 Math.random 함수에 3을 곱해서 추출
		//여기서 random의 정수값을 얻고싶다면 추출할때 형변환(int)로 정수 추출
		//마지막으로 1~3까지의 정수형 random값을 추출할려면 +1만 하면 추출 가능
		System.out.println((int)d1+1);
		
		//심화 예졔 - 1부터 10사이의 난수 5개 출력
		for(int i = 1; i<=5; i++) {
			int result =(int)(Math.random()*10+1);
			System.out.println("test: "+result);
		}
		//심화 예제 - -5부터 5까지의 난수 5개 출력
		for(int ii = 1; ii<=10; ii++) {
			int result2 =(int)(Math.random()*11-5);
			//0<Math.round()<1의 값에서 각각 11을 곱함
			//0<Math.round()<11에서 5를 차감
			//-5<Math.round()<6 = 따라서 -4부터 5까지 숫자를 랜덤 추출
			System.out.println(result2);
		}
		
		//심화 예제 마지막 = -4에서 3(포함)까지 랜덤숫자 5개 추출
		for(int iii=1;iii<=5;iii++) {
			int result3 = (int)(Math.random()*8-4);
			System.out.println("final test: "+result3);
		}
	}
	
}

 

for 반복문

public class Daily_Upload_TSTORY {
	public static void main(String[] args) {
		
		//반복문 for & while
		//for은 반복횟수를 알때 적합하고 while은 반복횟수를 모를 때 적합
		for(int i=1; i<=10; i+=2) {
			//i = 1,3,5,7,9로 2씩 증가해서 총 5번 추출
			System.out.println("test");
		}
		System.out.println(" ");
		for(int ii=1;ii<=10;ii*=2) {
			//i가 2씩 곱해지므로 총 4번 추출; 1,2,4,8,16
			System.out.println("test2");
			//먼저 어떤 숫자가 출력되는지 확인하고싶으면 아래에 ii를 넣어서 선출력
			System.out.println(ii);
		}
	
		//for문에서 변수를 2개 넣을때
		for(int a=1, b=7; a<=10; a++, b--) {
			//다만 두 변수다 같은 타입이여야하고 콤마를 사용하여 구분해주어야함
			//마지막 두개의 조건식구분도 콤마로 구분해주어야 함
			//a의 조건식이 맞을때까지 b는 무조건 따라가는 식
			System.out.println("a: "+a+" b: "+b);
		}
		
		//for문 안의 i같은 변수는 for문 블럭안에서만 사용 가능
		//i를 다른 블럭으로 scope확장 시키고 싶으면 미리 for문 위의 블럭에서 선언을 한 후
		//for문에서 생략하여 같은 반복문 추출 가능 = 생략 시 항상 true로 간주되어 선언됨
		//예시 :
		int L=1; //duplicated variable을 막기위해 L로 대신선언
		for(;L<=10;L*=2) {
			System.out.println("L: "+L);
		}
		System.out.println(L); // 반복문 끝의 마지막값인 16으로 최종 추출 완료
		
	}
	
}

 

중첩 for 반복문

public class Daily_Upload_TSTORY {
	public static void main(String[] args) {

		//중첩 for문을 이용하여 구구단 만들기
		int i = 2;
		for(;i<=9;i++) {
			for(int j=1;j<=9;j++) { // 마지막 for문이 모두 마친후에 그 전단계 for문이 실행됨
				System.out.println(i+"x"+j +" = " +(i*j));
			}
		}
		
		//심화 예제 = 별찍기 (10*5)
		for(int s=1;s<=5;s++) { 
			for(int ss=1;ss<=10;ss++) {
				System.out.print("*");
			}
		System.out.println(); //위의 중첩for문 다 작업 끝나고 줄바꿈 시켜줌
		}
		
		//심화예제 = 별 순차적으로 쌓기 till 5개
System.out.println();
		for(int s=1;s<=5;s++) {
			for(int ss=s;ss>=1 ;ss--) { //별을 거꾸로 찍을 때 가능
				//미리 s값을 5개 넣음으로서 s값이 증가될수록 ss값이 커지는 식
				System.out.print("*");
			}
			System.out.println();
		}
System.out.println();
		//예제 다른풀이편
		for(int s=1;s<=5;s++) {
			for(int ss=1;ss<=s;ss++) { //s의 값에 따라서 ss가 변해야 하는 의미이므로
				// ss<=s값을 넣어서 s의 값에 ss가 의존하도록 함
				System.out.print("*");
			}
			System.out.println();
		}
	}
}
728x90

'Java > 자바의정석 기초편' 카테고리의 다른 글

자바 학습 & 복습 6일차 - array 배열  (0) 2022.01.14
자바 학습 & 복습 5일차  (0) 2022.01.13
자바 학습 & 복습 3일차  (0) 2022.01.11
자바 학습 & 복습 2일차  (0) 2022.01.10
Java 학습 & 복습 1일차  (0) 2022.01.10