JAVA 반복문, 소수점 자르기

강정우·2022년 6월 28일
0

JAVA

목록 보기
7/31
post-thumbnail

6/27 강의

  1. JAVA 나머지 do-while 반복문과 for문을 배움.
  2. JAVA 기타 알고리즘을 배움.
  3. Database를 다루기위한 SQL 셋팅법과 기본적인 개념들을 배움.
  4. 반드시 SQL 추가 수업을 들어야겠다. 나는 데이터 쪽으로 나아갈꺼니까 그쪽 부분을 열심히 해야만 한다.

#6 JAVA 복습

1. while문 알고리즘

  1. 모두가 자주 실수하는 1가지 while문은 조건문이 참일때만 실행된다!!
    모두가 당연히 알고있는 사실이지만 문제대로 코딩을 짜나아가다 보면 while문을 순간 헷갈려서 정 반대조건으로 부여하고 실행이 안 된다고 할 때가 있다. 나도 그랬다. 반드시 숙지하자!!

2. do-while문

  1. while문과 다른점은 while은 조건이 맞아야 실행문을 실행하지만 do-while문은 일단! 실행문을 한 번 실행 후 결과값을 조건에 맞추어본다는 차이점이 있다. 한 마디로 실행문이 조건문보다 먼저냐 나중이냐의 차이점이 있다는 것이다.

3. for문

  1. for문의 구조
for(초기화구문, 검사조건, 반복 후 작업){
실행문
}
  1. 재미있는 짜투리 유머 : 자바개발자가 회사 사장님으로부터 코드의 줄을 늘리라고 명령을 받았다. 하지만 자바 개발자는 더이상 늘릴 껀덕지가 보이지 않았다. 그러자 옆에있던 C, C++ 개발자가 와서 살포시 for문의 중괄호를 밑으로 내렸다... 🤣

4. 담임쌤의 추가문제와 TA쌤의 추가문제...

  1. TA 쌤
    문제 : 12의 약수를 곱하고 약수들의 합을 구하여라.
    분석 : 최대한 깔끔하게 결과값을 내고싶었고 배열을 이용하기로 하였음.
    문제점 : 초반에 배열 선언에 python 처럼 일단 빈 배열을 선언하였지만 계쏙하여 오류가 떴음.
    해결 : JAVA는 일단 생성부터 반드시 배열의 길이를 입력해줘야함.
    코드 :
import java.util.Arrays;

public class TA쌤 문제 {
	public static void main(String[] args) {
		// 12의 약수를 곱하고 약수들의 합을 구하라
		int sum = 0;	
		int cnt = 0;	// count 변수 생성 및 초기화
		int[] ary = new int[6]; //배열 선언 시 반드시 길이 같이 선언.
		for (int i = 1; i <= 12; i++) {
			if (12 % i == 0) {	//12의 약수들 먼저 뽑고 약수라면 
				sum += i;
				ary[cnt] = i;	//배열에 count에 맞춰 index 번호가 순차적으로 들어감.
				cnt++;
			}
		}
		System.out.println("12의 약수의 총 합은 : " + sum);
		System.out.println("12의 약수들은 " + Arrays.toString(ary) + "입니다.");
	}
}
#result
## 12의 약수의 총 합은 : 28
## 12의 약수들은 [1, 2, 3, 4, 6, 12]입니다.
  1. 담임 쌤
    문제 : alphabet을 입력 받으면 해당 글자로부터 5자리의 문자를 출력.
    분석 : 변수 때 배웠떤 아스키 코드를 적극 활용해야겠다 생각했음.
    문제점 : 앞에 변수타입 선언없이 바로 문자를 숫자로 바꿔 계산이 가능하다 생각하였음.
    해결 : 변수타입 변수 = (변수) 대상 값; 의 순으로 입력하여 문자를 아스키코드에 들어있는 숫자로 변환하여 계산.
    코드 :
import java.util.Scanner;

public class 담임쌤 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		// 문제
		// A를 입력하면 -> ABCDE 까지
		// Y라면 Z까지만.
		System.out.print("알파벳 입력:");
		char a = sc.next().charAt(0); // 문자 입력
		for (int i = 0; i <= 4; i++) { // 5회까지만 for문
			int num_a = (int) a; // 문자->숫자
			char ch_al = (char) (num_a + i); // 숫자->문자
			if (num_a + i > (int) 'Z') { // Z전까지인지 확인
				break;
			} else {
				System.out.print(ch_al + " ");
			}
		}
		sc.close();
	}
}
#result
## 알파벳 입력: A
## A B C D E 

## 알파벳 입력:X
## X Y Z 

추가공부

1. 소수점 자르기

  1. Math.round()
    가장 기본적인 소수점 자르기 원리는 원하는 자릿수 많큼의 '0'을 곱하여 자릿수를 끌어올린 후 다시 나누어 원하는 소수점을 만든다.
double num = 123.4567890;
double answer = Math.round(num);
double realAnswer = Math.round(num*100)/100.0;

#result
## 123.0
## 123.46
  1. String.format()
    python에서도 자주 사용하는 포멧팅으로써 print 함수에 println 대신 printf를 써서 format method를 사용할 수 있게 한다.
double num = 123.4567890;
String result = String.format("%.3f",num)
System.out.printf("%.3f",num);

#result
## 123.46 (단, 얘는 sring인 문자열 data type임!!!)
## 123.46 (얘는 integer type이지만 변수에 저장 불가!!)
  1. DecimalFormat 클래스
    클래스를 활용하여 생성자로 하여금 여러 형태의 숫자형 포맷을 출력할 수 있도록 도와주는 클래스이다.
double num = 123.4567890;

DecimalFormat df = new DecimalFormat("0.000");
DecimalFormat df2 = new DecimalFormat("#.###");
		
String result = df.format(num);
String result2 = df2.format(num);
		
System.out.println(result);
System.out.println(result2);

#result
## 123.457
## 123.457

0과 #의 차이점은 뒤에 지정한 자릿수보다 0이 더 많을 때
0은 절삭하지만 #은 살려서 출력한다.

2. 배열 더하기 붙히기

아직 배열을 배우진 않았지만 python과는 달리 배열을 붙히는 방법이 복잡하고 여러가지여서 미리 예습함.
방법 1. ArrayUtils.add(기준배열, 붙일요소);
방법 2. ArrayUtils.add(기준배열, 붙일배열);
방법 3. 배열 -> list변환 후 추가하고 다시 list -> 배열 변환

import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;

public class AddArray {
	public static void main(String[] args) {
		// 원본 배열
		String[] arr = { "A", "B", "D" };
        
		// 추가할 value
		String newValue = "C";
        
        // 추가할 index
		int position = 2;
        
		// 배열 -> List 변환
		List<String> list = new ArrayList<>(Arrays.asList(arr));
        
		// List에 새로운 값 추가
		list.add(position, newValue);
        
		// List -> 배열 변환
		arr = list.toArray(arr);
        
		// 결과 출력
		System.out.println(Arrays.toString(arr)); // [A, B, C, D] }}
	}
}

3. 아스키 코드

간단히

(int)'Z' // 이렇게만 해도 print를 해보면 숫자가 나옴.
(int)'z'
#result
## 90
## 112

결론 아스키코드 대문자와 소문자는 '32' 차이라는 것을 알 수 있었음.

profile
智(지)! 德(덕)! 體(체)!

0개의 댓글