hbd 02

5w31892p·2022년 12월 16일
0

보충

목록 보기
2/5

:: hbd 01 복습

  • 변수 : 변할 수 있는 값을 담는 저장공간
  • 상수 : 안변함!!

자료형

자료형크기표현범위
boolean1바이트논리값 (true -> 참, false -> 거짓)을 기억
byte1바이트파일 전송 -> 파일 다운로드
char2바이트문자 1개 -> 자바는 UniCode 사용
null값 없음
short2바이트-32768 ~ 32767 사이의 정수
int4바이트-2147483648 ~ 2147483647 사이의 정수
long8바이트-2의 63승 ~ 2의 63승 -1 사이의 정수
float4바이트단정도 실수, 소수점 아래로 6자리 정도
double8바이트배정도 실수, 소수점 아래로 16자리 정도

  • 값은 오른쪽에서 왼쪽에 담긴다.
  • 코드는 위에서 아래로 흐른다.
  • 변수의 선언 방식 (Java : 카멜표기법)

  1. 세 개의 숫자 각 선언 후 총합 인쇄
// 세개의 숫자를 각각 변수 선언하고 세수의 총합을 인쇄해보기
int a = 10;
int b = 20;
int c = 30;
int sum = a+b+c;
System.out.println(sum);

  1. 스캐너 통해 가로 세로 입력 받아 사각형 넓이 구하기
// 스캐너를 통해 가로와 세로를 입력받아 사각형의 넓이를 구해보기
Scanner scanner = new Scanner(System.in);

System.out.println("사각형의 가로 길이를 입력하세요.");
int x = scanner.nextInt();
System.out.println("사각형의 세로 길이를 입력하세요.");
int y = scanner.nextInt();
System.out.println("사각형의 넓이는 " + x + y + "입니다.");

  1. 나이 입력받아 내년 나이 구하기
Scanner scanner = new Scanner(System.in);

System.out.println("2022년 올해 나이를 입력해주세요.");
int age = scanner.nextInt();
System.out.println("2023년 내년에는 " + (age + 1) + "살 입니다.");

  1. 두 수 입력 받아 몫과 나머지 구하기
Scanner scanner = new Scanner(System.in);

System.out.println("첫번째 숫자를 입력해주세요.");
int a = scanner.nextInt();
System.out.println("두번째 숫자를 입력해주세요.");
int b = scanner.nextInt();
System.out.println("두 수를 나눈 몫은 " + (a/b) + "입니다.");
System.out.println("두 수를 나눈 나머지는 " + (a%b) + "입니다.");

:: hbd 02

:: 아스키코드


:: 형변환

  • 명시적 형변환 (casting)
    -> 프로그래머가 그 순간의 자료형을 지정할 수 있음
    (int) a = 'A';
  • 묵시적 형변환
    -> 자료형의 크기가 서로 다른 자료의 연산 결과는 크기가 큰 자료형으로 자!동! 변환

문자를 숫자로

// 문자를 숫자로
Scanner scanner = new Scanner(System.in);

System.out.println("아스키코드를 알고 싶은 알파벳을 입력하세요.");
char a = scanner.nextLine().charAt(0); // 괄호 안은 인덱스번호
int ia = (int) a;
System.out.println("입력하신 알파벳의 아스키 코드는 " + ia + "입니다.");

:: 삼항연산자

자료형1 변수명1 = 값;
자료형2 변수명2 = (변수명1 비교연산자 비교할것) ? "true일 때" : "false일 때"

12시보다 작으면 오전, 크면 오후 출력

int h = 18;
String result = h < 12 ? "am" : "pm";
System.out.println(result);

:: 전위연산자와 후위연산자

전위증감연산자

  • 연산자 우선순위가 높다.
  • a = ++b;
    • b의 값을 1 증가한 후 증가한 b값을 a에 대입

후위증감연산자

  • 연산자 우선순위가 낮다.
  • a = b++;
    • b의 값을 a에 대입한 후 b 값 증가
int a = 10;
int b = 5;

System.out.println("전위 증감 연산자 : " + a * ++b);
// 10 * (1 + 5) = 60;
System.out.println("후위 증감 연산자 : " + a * b++);
// 10 * 6 = 60;
// 뒤에 있는 ++는 출력 후 b값에 +1됨
System.out.println("전위 증감 연산자 : " + a * ++b);
// 10 * (1 + 7) = 80;
// 위에서 출력후 ++ 되서 6에서 7로 바뀌어있는 상태에서 또 ++
int a = 10;
int b;

b = a++;

System.out.println(b); 
// b = a, 10
// ++는 출력 후
System.out.println(a + " & " + b);
// a는 10에서 ++이 되었으니 11
// b는 위에서 값 받은 후 연산 없으니 그대로 10

b = ++a;
System.out.println(b); 
// b = (1+11), 12
// 위에서 a가 11로 바뀌었기 때문
System.out.println(a + " & " + b); 
// a는 위에서 11+1이 되었으니 12
// b는 위에서 값 받은 후 연산 없으니 그대로 12

:: == 와 equals

  1. ==
    -> 해당 문자열의 주소 비교

  2. equals()
    -> 저장된 주소에 실제 저장된 데이터를 비교
    -> 문자 하나하나 비교하여 값이 같으면 true 반환
    -> 기본 자료형과 null을 제외한 클래스로 생성한 객체는 equals로 비교 (== X)

String t1 = "sample";
String t2 = t1;

String t3 = new String("haha");
String t4 = new String("haha");

System.out.println(t1 == t2); // true
System.out.println(t1.equals(t2)); // true
System.out.println(t3 == t4); // false
System.out.println(t3.equals(t4)); // true

:: 배열

배열 선언

이미 선언된 값은 "변수명[인덱스번호] = 값;" 으로 기존 값 덮을 수 있음

자료형[] 변수명 = new 자료형[인덱스길이];
변수명[인덱스번호] = 넣을 값; // 값 넣는 방식
 
 
자료형[] 변수명 new 자료형 {,,, ...} 
// 위의 방식과 다르게 값이 이미 들어가 있어서 값 넣을 필요 없음

리스트 형식으로 출력

System.out.println(Arrays.toString(변수명));

변수의 길이 구하는 것

변수명.length;

변수의 마지막 값 출력

변수명[변수명.length -1]

사계절 출력 후 배열의 마지막 값 출력

// 봄여름가을겨울 출력 , 마지막 값도 출력

String[] seasons = {"봄", "여름", "가을", "겨울"};
System.out.println(Arrays.toString(seasons));
System.out.println(seasons[seasons.length-1]);

:: ArrayList

  • 정보를 묶을 때 List 사용
  • 순서 개중요
  • 같은 자료형만
  • 넣을때는 add, 조회는 get, 제거는 remove
  • 참고로 ArrayList에서 가장 많이 보게 될 에러는 ArrayIndexOutOfBoundsException

List 길이 구하는 것은 size();

// 과일 목록 차례대로 인쇄하기 - 반복문과 함께
List<String> fruits = new ArrayList<>();
fruits.add("바나나");
fruits.add("배");
fruits.add("딸기");
fruits.add("감");
fruits.add("수박");
fruits.add("딸기");
fruits.add("바나나");
System.out.println(fruits);

for (int i = 0; i < fruits.size(); i++) {
    String fruit = fruits.get(i);
    System.out.println(fruit);

역순은 i는 0보다 크거나 같고, 변수명.size()-1이 i와 같으며, i--임

-> (i = 변수명.size()-1; i >= 0; i--)

// 숫자 5개 띄어쓰기로 구분하여 입력한 후 역순으로 출력하기
Scanner scanner = new Scanner(System.in);

System.out.println("숫자 5개를 띄어쓰기로 구분하여 입력하세요.");
int[] a = new int[5];
for (int i = 0; i < a.length; i++) {
    a[i] = scanner.nextInt();
    System.out.println(a[i]);
}

// 거꾸로 출력하기
for (int i = a.length-1; i>= 0; i--) { // length는 인덱스라 -1
    System.out.println(a[i]);
}

:: Random 클래스

  • Random은 난수발생기
  • 일정 범위가 주어지면 그 사이의 수 중 하나를 임의로 선택
  • nextInt()가 가장 많이 쓰임
// Math.random(): 0 이상이고 1 미만인 무작위수를 발생시킨다.
System.out.println(Math.random());
// 1~6 중에 하나 랜덤. int형이므로
// +1을 안하면 1-5 까지 숫자 중에서 고름
System.out.println((int) (Math.random() * 6) + 1);

:: 숙제

랜덤으로 정수 10개 저장 후 최소값 구하기

  • 리스트에 담기 (반복문 밖에서 해야함)
    -> Arrays.toString(변수명);
  • 최소값
    -> Arrays.stream(변수명).min().getAsInt();
  • 최대값
    -> Arrays.stream(변수명).max().getAsInt();

숙제 코드보기

0개의 댓글