10월 7일 수업내용

안효빈·2022년 10월 7일
0

자바 보강

Print출력문

System.out.println("홍길동" + 9+8); // 홍길동98
System.out.println(9 + 8 + "홍길동" + 9 + 8); // 17홍길동98
System.out.println(9 + 8 + "홍길동" + 9 - 8); // 에러발생
System.out.println(9 + 8 + "홍길동" + (9 + 8)); // 17홍길동17
System.out.println(9 + 8 + "홍길동" + (9 + 8) + 9 + 8); // 17홍길동1798

문자열이 등장한 이후부터는 무조건 문자열에 대한 연산으로 인식.
괄호로 묶을 시 다시 숫자로 연산.


Casting형변환

형 변환

// 자동 형 변환 : 작은 자료형에서 큰 자료형으로 변환할 때

int num = 10;
double dou1 = num;
System.out.println(dou1); // 10
		
		
// 강제 형 변환 : 큰 자료형에서 작은 자료형으로 변환할 때

dou1 += 0.5;
System.out.println(dou1); // 10.5
num = (int)dou1;
System.out.println(num); // 10



자료형 연산시 int형으로 자동 형 변환

(int이하 크기의 자료형들에 대한)

// 자료형 연산 : int형 이하인 것은 연산 시 모두 int형으로 자동 형 변환

		byte b1 = 5;
		byte b2 = 7;
//		byte result = b1 + b2; //에러발생 : 결과가 int로 자동으로 바뀌기 떄문에
		int result = b1 + b2; 
		System.out.println(result);
        
        char c1 = 'a';
		char c2 = 'a';
		int re = c1+c2;
		System.out.println(re); //194

float와 double형태 유의

정수 -> 실수 -> 정수로 바꿀때 간혹 .99999999로 표현되는 이유


if문

int score = 46;
		
		if(score >= 80)
			System.out.println("합격입니다.");
		else
			System.out.println("불합격."); //불합격
		
		
		if(score >= 90)
			System.out.println("A학점1");
		else if(score >= 80)
			System.out.println("B학점1");
		else
			System.out.println("끝"); // 끝
		
		
		
		if(score >= 90)
			System.out.println("A학점");
		else if(score >= 90);
			System.out.println("B학점"); // B학점

printf의 쓰임

  • %x, %X의 차이는 16진수 표현 시 abcdef를 소문자로 출력할지, 대문자로 출력할지 차이
//printf("이스케이프문자사용", 숫자)
		int score = 90;
		System.out.printf("나의 점수는 %d점 입니다.", score);
        //나의 점수는 90점 입니다.
        System.out.printf("90을 8진수로 변환 : %o", score);
        //90을 8진수로 변환 : 132
		System.out.printf("90을 16진수로 변환 : %x", score);
		//90을 8진수로 변환 : 5a
		System.out.printf("90을 16진수로 변환 : %X", score);
		90을 8진수로 변환 : 5A
        
        
        String str = "홍길동";
		double dou1 = Math.PI;
        System.out.printf("점수 : %d, 이름 : %s, 원주율 : %f", score, str, dou1);
        //90을 16진수로 변환 : 5A점수 : 90, 이름 : 홍길동, 원주율 : 3.141593
        
        
        //3.141590 => 총 자리수 8자리(소수점도 1자리로 포함)
        //%4.2f 전체자릿수 4자리(소수점1자리로침) 소수점 2자리까지 출력해라 라는뜻
        
        
        System.out.printf("소수점 둘째 자리까지 출력 : %4.2f", dou1); 
        //소수점 둘째 자리까지 출력 : 3.14(근데 맨 뒷자리 옆자리는 반올림)
        
        
        System.out.printf("소수점 둘째 자리까지 출력 : %.3f", dou1);
        //소수점 둘째 자리까지 출력 : 3.142
        //앞의 전체자리수는 많이 안쓰고 실제로는 소수점 몇번째 자리까지 출력을 많이 씀
        
        
        //format도 printf와 동일
		System.out.format("소수점 둘째 자리까지 출력 : %.3f", dou1);
        //소수점 둘째 자리까지 출력 : 3.142
        
  • 이스케이프 문자 ==> %d %x같은애들

  • %4.2f 전체자릿수 4자리(소수점1자리로침) 소수점 2자리까지 출력해라 라는뜻

  • 실제로는 전체자리수를 지정하는 경우가 많지 않다고 함.


Scanner

System.in <=== 주소(내가 키보드로 입력한게 in이라는 곳에 저장이 됨)

Scanner sc = new Scanner(System.in);
		System.out.println("점수 입력 : "); 
        //입력받을때 console창에 출력되는 내용
        
		int score = sc.nextInt();
		
//		사용자로부터 점수를 입력받아
//		80점 이상 : 합격
//		70~79점이면 대기순번
//		69이하면 불합격 출력하기
		
		if(score >= 80) {
			System.out.println("합격");
		}else if(score <= 79 && score >= 70) {
			System.out.println("대기순번");
		}else {
			System.out.println("불합격");

//		정수를 입력받아서 2의 배수이면서 3의 배수인지 확인
		
		Scanner sc = new Scanner(System.in);
		System.out.println("숫자 입력 : ");
		int a = sc.nextInt();
		
		if(a % 3 == 0) {
			if(a % 2 == 0) {
				System.out.println("2의 배수이면서 3의 배수입니다");
			}else{
				System.out.println("3의 배수이지만 2의 배수는 아닙니다.");
			}
		}else if(a % 2 == 0) {
			if(a % 3 == 0) {
				System.out.println("2의 배수이면서 3의 배수입니다");
			}else{
				System.out.println("2의 배수이지만 3의 배수는 아닙니다.");
			}
		}
		else {System.out.println("아닙니다.");}
        


Switch문

Scanner sc = new Scanner(System.in);
		System.out.println("태어난 달을 입력하세요");
		int mon = sc.nextInt();
		
		switch (mon) {
		case 1: case 2: case 12: {
			System.out.println("겨울에 태어났군여");
			break;
		}
		case 3: case 4: case 5: {
			System.out.println("봄에 태어났군여");
			break; //브레이크 안걸면 아래거까지 계속감
		}
		case 6: case 7: case 8: {
			System.out.println("여름에 태어났군여");
			break;
		}
		case 9: case 10: case 11: {
			System.out.println("가을에 태어났군여");
			break;
		}
		default: System.out.println("사람이 아닙니다.");
		}
  • case를 저렇게 뭉쳐서 써도 됨
  • break; <=== 매우 중요
		try {
			System.out.println("숫자를 두 번 입력하세요");
			double a = sc.nextDouble();
			double b = sc.nextDouble();
			System.out.println("연산자를 입력하세요");
			String c = sc.next();
	
			switch(c){
				case "+":System.out.println(a+b);break;
				case "-":System.out.println(a-b);break;
				case "*":System.out.println(a*b);break;
				case "/":System.out.println(a/b);break;
				case "%":System.out.println(a%b);break;
				default:System.out.println("계산불가능");
			}
		}
		catch(Exception e) {System.out.println("숫자를 똑바로 입력하세요");}

예제1


System.out.println("숫자를 두 번 입력하세요");
		int a = sc.nextInt();
		int b = sc.nextInt();
		System.out.println("연산자를 입력하세요");
		String c = sc.next();
		switch(c){
		case "+":System.out.println(a+b);break;
		case "-":System.out.println(a-b);break;
		case "*":System.out.println(a*b);break;
		case "/":System.out.format("%d / %d = %.3f",a,b,(double)a/b);break;
		case "%":System.out.println(a%b);break;
		default:System.out.println("계산불가능");
		}

아까 배운 이스케이프 문자를 활용한 예제


for반복문

		int c = 0;
		for(int i = 1; i <= 5; i++, c++) {
			System.out.println(i+c + ". 조금 있으면 즐거운 점심시간!!!");
		}
		System.out.println("================");
		int d = 0;
		for(int i = 1; i <= 5; i++) {
			System.out.println(i+c + ". 조금 있으면 즐거운 점심시간!!!");
			d += 1;
		}
        

버블 정렬

배열 배우고 다시

//for문으로 1~100까지 4의 배수의 합만 구하시오

		int s1 = 0;
		for(int i = 1; i <= (int)100/4; i++) {
			s1 += i;
			System.out.println(s1*4);
		}
		s1 *= 4;
		System.out.println(s1 + " = s1의 값");
		
		
		int s2 = 0;
		for(int i = 1; i <= 100; i++) {
			if(i % 4 == 0) {
				s2 += i;
			}
		}
		System.out.println(s2 + " = s2의 값");
		
		
		int s3 = 0;
		for(int i = 0; i <= 100; i+=4) {
			s3 += i;
		}
		System.out.println(s3 + " = s3의 값");
		
		
		int s4 = 0;
		for(int i = 100; i > 0; i-=4) {
			s4 += i;
		}
		System.out.println(s4 + " = s4의 값");
        

구구단(이중for)

//구구단 만드는 이중for문
		for(int i = 1; i <= 9; i++) {
			for(int t = 2; t <= 9; t++) {
				System.out.print(t + " * " + i + " = " + i*t + "\t");
			}
			System.out.println();
		}
        //		i와 t는 for문 안에서만 선언한 로컬 변수이므로 포문이 종료되면 사라짐


별찍기

Scanner sc = new Scanner(System.in);
		int n = sc.nextInt();
		for(int i = 1; i <= n; i++) {
			for(int m = 1; m <= i; m++) {
				System.out.print("*");
			}
			System.out.println();
		}

n칸만큼의 별 삼각형을 뽑는 포문

StringBuffer로 찍기?

StringBuffer av = new StringBuffer();
		for(int i = 1; i <= 1; i++) {
			for(int t = 1; t <= i; t++) {
				for(int c = 1; c <= t; c++) {
					av.append("*");
				}
				av.append("\n");
			}
		}
		String s = av.toString();
		System.out.println(s);

출력이 안되는데 뭔가 실행중으로 뜸

왜인지 공부해야함


While문

--i vs i--

//while
		int i = 5;
		while(--i != 0) {
			System.out.print(i);
		}//4321
		System.out.println("\n" + i); //0
		
		
		System.out.println();
		
		
		
		int j = 5;
		while(j-- != 0) {
			System.out.print(j);
		}//43210
		System.out.println("\n" + j); //-1

"--i" ==> 감소부터 하고 비교해라

"i--" ==> 뺀 걸 비교하고 감소시켜라


//비교용
		int sum = 0;
		int t = 0;
		while(t++ != 100) {
			sum += t;
		}
		System.out.println(sum); //5050
		
		
		int sum1 = 0;
		int t1 = 0;
		while(++t1 != 100) {
			sum1 += t1;
		}
		System.out.println(sum1); //4950
        

t가 100이 됐을때의 t++ , ++t의 차이

t++ --> 99까지 더한 뒤 비교해서 true였으므로 비교 후 ++한 값인 100을 sum에 더하고 종료

++t --> 이미 99까지 더한 뒤 100이 됐을때 ++을 먼저 하고 비교해서 false가 나오므로 100을 안더함

break와 continue

  • break : 뒤에걸 다 버리고 반복문을 빠져나와버림
  • continue : 이것만 씹고 나머지 조건만족한 곳은 계속 실행함.

while(true)

while문 자체가 괄호 안의 조건식이 참일때 돌아가므로

해당 형태일때 무한반복하게됨

int z = 1;
		while(true) {
			System.out.println(z);
			if(z == 10) {
				break;
			}
			z++;
		}
        // 1 ~ 10까지 출력
        

while(true)의 활용

(~Scanner선언~)
	try{
			while(true) {
				System.out.println("숫자를 두 번 입력하세요(0 입력시 종료합니다.)");
				int a = sc.nextInt();
				int b = sc.nextInt();
				if(a == 0 || b == 0) {System.out.println(a + " <-- 해당 숫자가 입력되어 종료합니다."); break;}
				System.out.println("연산자를 입력하세요");
				String c = sc.next();
				switch(c){
				case "+":System.out.println(a+b);break;
				case "-":System.out.println(a-b);break;
				case "*":System.out.println(a*b);break;
				case "/":System.out.format("%d / %d = %.3f\n",a,b,(double)a/b);break;
				case "%":System.out.println(a%b);break;
				default:System.out.println("연산자 입력이 잘못되었습니다.");
				}
			}
		}catch (InputMismatchException e) {
			System.out.println("다시 실행하세요");
		}
		sc.close();
        

' == ' 대신 equals()를 쓰는 경우 기본자료형으로는 사용 불가

next()를 이용하여 문자열 형태로 받아야함.

while(true)로 합계 구하기

//		continue 이하의 구문을 실행하지 않고 반복문으로 올라가서 실행
//		1~100까지 합계중 6의 배수를 제외한 합계 구하기
		int ss = 0;
		for(int i = 1; i <= 100; i++) {
			if(i % 6 == 0) {
				continue;
			}
			ss += i;
		}
		System.out.println(ss);
		
		
		
		
		int i = 1;
		while(true) {
			if(i > 100) {
				break;
			}
			if(i % 6 == 0) {
				i++;
				continue;
			}else {
				i++;
				ss += i;
			}
		}
		System.out.println(ss);

continue를 쓰면 어떻게 되는지 확인

int a, b, c;
		
		int d = 3, e = 10, f = 100;
		
		for(int i = 1, j = 10; i <= 10; i++, j--) {
			System.out.println("i = " + i + ", j = " + j);
		}
		
		//while(true){ }이랑 비슷한 포문
		for(;;) {
			
		}

배열

//배열의 선언 형태
		int [] arrInt1 = {1,2,3,4,5}; //자동으로 크기는 5가 됨
		int arrInt2 [] = {1,2,3,4,5}; // [] 를 변수명 뒤에 놓아도 ㅇㅋ
		int arrInt3 [] = new int[5]; //배열 만들떄 갯수 지정
		int arrInt4 [] = new int[]{1,2,3,4,5}; //이런 형태로는 잘 안씀. 1번케이스가 더 짧고 편해서
		
		char [] ch1 = {'a', 'b', 'c'};
		
		arrInt4[0] = 11;
		arrInt4[1] = 12;
		arrInt4[2] = 13;
		arrInt4[3] = 14;
		arrInt4[4] = 15; //미리 선언된 배열에 덮어씌울수 있음
		
		for(int i = 0; i <= 4; i++) {
			arrInt4[i] = i+10;
			System.out.println(arrInt4[i]);
		}
		
		int len4 = arrInt4.length; //배열의 방 갯수
		
		for(int i = 0; i < len4 + 1; i++) {
			arrInt4[i] = i+10;
			System.out.println(arrInt4[i]); //방 갯수를 넘겨서 에러 발생
		}
System.out.println(Arrays.toString(arrInt1)); // [1, 2, 3, 4, 5] 출력

System.out.println(ch1); // char형태 배열이라 바로 abc 출력

System.out.println(arrInt4); // [I@515f550a int형태배열이라 주소값 출력

==> 배열을 바로 출력해버릴때 쓸수있음, import필요

배열 최소값 최대값 구하기

int score [] = {34,48,5,4,21,100,44};
		
		//최대값과 최소값 출력
		
		for(int i = 0; i < score.length-1; i++) {
			if(score[i] > score[i+1]) {
				int b;
				b = score[i+1];
				score[i+1] = score[i];
				score[i] = b;
			}
		}
		System.out.println("최대값은" + score[score.length-1]); //최대값은100
//		for(int i = 0; i < score.length; i++) {
//			System.out.println(score[i]);
//		}
		
		
		for(int i = 0; i < score.length-1; i++) {
			if(score[i] < score[i+1]) {
				int b;
				b = score[i+1];
				score[i+1] = score[i];
				score[i] = b;
			}
		}
		System.out.println("최소값은" + score[score.length-1]); //최소값은4
//		for(int i = 0; i < score.length; i++) {
//			System.out.println(score[i]);
//		}

강사님 방식

		int max = score[0]; //34
		int min = score[0]; //34
		
		for(int i = 1; i < score.length; i++) {
			if(max < score[i]) {
				max = score[i];
			}else if(min > score[i]{
           		min = score[i];
            }
		}
		System.out.println(max)

최대/최소 하나만 구할땐 이게 훨 좋은거같음

profile
다들 화이팅

0개의 댓글