TIL

day7 TIL

dalooong 2023. 7. 7. 00:43

23.04.25

CS 16진수

0~15 총 16개로 표현하는 수 체계

0~F까지로 씁니다.

  • 10진수 대신 16진수를 쓰는 이유?

= 컴퓨터는 2진수(반도체)기반이라 16진수가 더 익숙함. 왜냐하면 2를 거듭제곱 하면 되기 때문.

2진수, 8진수, 10진수, 16진수

  • 1~16 = 컴퓨터 0~15 총 16개, 0~9 → 10개
  • 2진수 - binary = 0, 1
  • 8진수 - octal = 1 ~ 8
  • 10진수 - decimal = 1~10
  • 16진수 - hexadecimal 6개

16진수 → 16개 숫자

0~9 → 10개 10 11 12 13 14 15 → 6개
0 1 2 3 4 5 6 7 8 9 a b c d e f

2^4 = 16

2 * 2 * 2 * 2 = 16

4 * 4 = 16

변수 이름을 잘 지어야 하는 이유

: 내 코드에서 방향을 잃지 않기 위해.

특히 초보자라면 더욱 중요합니다.

*// 10진수 -> 8진수*
Scanner sc = **new** Scanner(System.in);
**int** iDecimal = sc.nextInt();
String hexadecimal = Integer.toHexString(iDecimal);
System.out.println(hexadecimal.toUpperCase());

이 코드의 경우 iDecimal 이라는 변수명으로 int를 입력 받는 다는 것을 표현 할 수 있습니다.

변수명 hexadecimal의 경우 이 변수에는 16진수 값이 들어간다는 것에 집중 할 수 있습니다.

  • 앞에서 받은 iDecimal이 int라는 것을 변수명에서 알 수 있기 때문에

10진수를 16진수로 바꾼다는 흐름이 자연스럽게 그려집니다.

hexadecimal.toUpperCase()

16진수는 0 ~ f까지 이므로 String타입 이어야 하고 .toUpperCase()는 16진수를 대문자로 표현한다는 흐름이 코드에 보입니다.

아래와 같이 a, b로 쓰면 스스로 함정에 빠지게 될 수 있습니다.

int a = sc.nextInt();


String 타입

: 문자열은 String으로 표현, 참조타입

String str = “Hello, World!”; //str 변수 선언

String은 클래스 이므로 문자열 연결, 비교, 검색,추출, 분리, 길이 세기 등의 기능이 있다.

문자열 연결

: 문자열 연결은 + 연산자를 사용하거나 .concat()을 이용한다.

String str1 = "Hello";
String str2 = "World";
String result = str1 + str2;
//"HelloWorld!" 출력 

String result = str1 + " " + str2; // 띄어쓰기 할 때
//"Hello World!"출력 

문자열과 변수 연결

public class StringConcat {
public static void main(String[] args) {
String name = "가나다";
int balance = 10000;
String message = name + "님의 통장 잔고는 " + balance + "원입니다.";
System.out.println(message);
}
} //가나다님의 통장 잔고는 10000원입니다. 출력

문자열 포매팅 : String.format();

: 문자열 사이에 변수를 넣어서 메시지를 만들고 싶을 때 +연산자를 이용할 수 있지만, .pringf()와 같이 포매팅 방식을 이용할 수 있다.

package week2.day7;
public class StringFormating {    
public static void main(String[] args) {        
String name = "유다언";        
int balance = 20000000;        
System.*out*.printf("%s님의 통장 잔고는 %d원 입니다.", name, balance);    
	}
}

문자열 자르기 : substring()

: 문자열을 자를 때에는 .substring 이용

방법:

.substring(시작_인덱스, 미만_인덱스);

.substring(시작_인덱스);

//인덱스는 0부터 센다.

예제)

String str = "Hello";
String firstLetter = str.substring(0, 1); // 첫 번째 글자(H) 자르기
System.out.println(firstLetter); 
//H출력

String str = "대한민국";
String subStr = str.substring(0, 2); // 인덱스 0부터 2 이전까지 자르기
System.out.println(subStr);
//대한 출력

String str = "대한민국";
String result = str.substring(2);
System.out.println(result);
//민국 출력

String str = "대한민국";
String result = str.substring(1, 3);
// 한민 출

실습)

package week2.day7;

public class StringSub {
    public static void main(String[] args) {
        String str = "Hello";
        System.out.println(str.substring(0, 1)); // h
        System.out.println(str.substring(0, 2)); //he
        System.out.println(str.substring(1, 3)); //el 만 분리
    }
}

문자열 비교 : .equals( ) **

: 문자열을 비교할 때 .equals() 이용

== 비교 연산자

= 대입연산자

String클래스는 char[ ] 배열로 만들어져 있다. ⇒ String은 Immutable(불변) 객체이다.

String → 참조 타입(Reference Type)

타입에는 Stack영역(원시타입)과 Heap영역(참조타입)이 있음

Heap영역에 생성된 객체를 참조하는 것이 참조타입

방법:

“문자열1”.equals(“문자열2")

String str1 = “GOLD”;
129
Strint str2 = “GODL”;
str1.equals(str2);
public class StringEquals {
public static void main(String[] args) {
System.out.println("GOLD" == "GOLD");
	}
} //true출력

public class StringEqualsSubstring {
public static void main(String[] args) {
String str1 = "GOLD";
String str2 = "G"; //GOLD와 G가 같니?
System.out.println(str1.substring(0, 1) == str2);
}
}
//false 출력

public class StringEqualsSubstring {
public static void main(String[] args) {
String str1 = "GOLD";
String str2 = "G";
System.out.println(str1.substring(0, 1).equals(str2));
}
}
//true 

자바에서는 객체끼리 ==로 비교연산을 할 때는 저 hash값(메모리의 특정위치-주소)

주소가 달라서 false가 나온다.

문자열 분리 - .split()

예시

public class StringSplit {
    public static void main(String[] args) {
        String str = "10 3 19 28 7 488";
        String[] strArr = str.split(" ");

        System.out.println(strArr[0]); //10
        System.out.println(strArr[1]); //3
        System.out.println(strArr[2]); //19
        System.out.println(strArr[3]); //28
        System.out.println(strArr[4]); // 7
        System.out.println(strArr[5]); //488 출력 
    }
}

(codeup1019 spilt 사용 문제)

import java.util.Scanner;
public class codeup1019 {
    public static void main(String[] args) {
        Scanner sc = new Scanner(System.in);
        String str = sc.next();
        String[] arr = str.split("\\\\.");

        int val1 = Integer.valueOf(arr[0]);
        int val2 = Integer.valueOf(arr[1]);
        int val3 = Integer.valueOf(arr[2]);

        System.out.printf("%04d.%02d.%02d",val1,val2,val3);
    }
} //2013.8.5 입력시 2013.08.05 출력 

배열(Array)

: 같은 타입의 여러 값을 한 개의 변수에 저장하기 위해 사용한다.

여러개의 변수를 선언하고 관리 할 때 배열을 쓴다. 길이는 고정이고 가변형은 아니다. (↔ 고정이 아닌것 Collection)

  • 배열 선언하기 : 변수 타입[] 변수명;

int iVal = 10; → int 타의 변수

int[] iVals; → int 타의 배열

배열은 선언하고 초기화를 반드시 해주어야 합니다. 초기화는 new 연산자를 이용하고 변수 타입과 개수를 지정합니다.

  • 변수명 = new 변수 타입[개수];

예시)

int[] iArr;

iArr = new int[5];

→ 배열은 선언하고 초기화할 때 개수를 반드시 지정해주어야한다.

배열을 선언 할 때 개수를 지정한다는 것은?

  1. 지정한 개수 만큼 메모리 공간을 미리 잡아 놓는다는 것
  2. 이미 선언한 배열의 개수를 바꿀 수 없다.
  • 배열을 선언하면서 초기화하기
public class DefAndInitArr {
    public static void main(String[] args) {
        int[] iArr = new int[5]; //배열의 개수를 정하기
        System.out.println(iArr);
    }
}
 //[I@448139f0 해시 코드가 출력됨 

*** 해시코드란?*

메모리의 특정 위치를 찾아갈 수 있게 부여된 주소입니다. 그리고 [I는 int타입의 배열을 나타내며 @는 구분자입니다.

사용 :[I@해시 코드

  • 배열에서 값 뽑기

: 배열에 있는 값을 출력하기 위해서는 배열을 그대로 출력하는 것이 아닌 배열의 인덱스를 통해 배열요소에 직접 접근해야한다.

인덱스는 ‘방 번호’ 0부터 시작하고 0,1,2,3과 같이 0부터 세는 것을 인덱스라고 한다.

  1. int[] iArr = new int[3]; // 세 칸 배열 생성
  2. iArr[0]; //배열명에 [] 대괄호를 붙이고 몇번째 인덱스로 접근할 것인지 적어주기
public class DefAndInitArr {
    public static void main(String[] args) {
        int[] iArr = new int[5]; //배열의 개수를 정하기
        System.out.println(iArr[0]); //첫번째 요소인 0 출력 
        System.out.println(iArr[1]); 
        System.out.println(iArr[2]);
    }
}

  • Arrays.toString()을 이용하면 배열의 모든 내용을 콘솔에 출력할 수 있습니다.

예제)Arrays.toString()

  • 배열에 값 넣기

: 139

예제)

import java.util.Arrays;

public class ArrayToString {
    public static void main(String[] args) {
        int[] iArr = new int[5];
        iArr[0] = 2;
        iArr[1] = 4;
        iArr[2] = 7;
        System.out.println(Arrays.toString(iArr));
    }
}

  • 연결 리스트 (Linked List): 배열처럼 크기만큼 메모리 공간을 미리 만들어 놓는 것이 아니라 추가될