써놓고 비공개로 냅뒀네.. 이틀날부터 무순129
쓰긴했다구욘¯_(ツ)_/¯
- 논리형 : boolean(1byte)
- 정수형 : byte(1byte), short(2byte), int(4byte), long(8byte), char(2byte)
- 실수형 : float(4byte), double(8byte)
실수는 정수랑 저장하는 방식이 다른데 지수와 가수표기법이 있어요.(있다는 것만 알아두자)
값의 손실을 막기 위해선 소수점 이하의 정밀도를 챙겨야 하는데요 float는 6자리, double은 15자리까지 표현할 수 있어요. double이 float보다 소수점 이하 자리수가 크니까 보다 더 크고 정밀한 수를 표현할 수 있습니다
문자는 정수형입니다. 컴퓨터는 문자를 인식할 수 없어서 미국표준인 아스키코드를 이용해서 숫자에 대응하는 문자로 변환해준거예요. 문자는 음수를 저장할 필요가 없으니 0부터 시작합니다
문자열은 string으로 표현하는데 문자를 나열한 것입니다.
문자는 작은 따옴표('') 를 사용하고 문자열은 큰 따옴표("") 를 사용합니다.
- charAt(n) : 문자열에서 인덱스 번호 n의 문자만 출력할 때 사용. char형 반환
- length() : 문자열의 길이 출력
- next() : 문자열 변수에서 문자 하나만 입력받기
참(true) 또는 거짓(false) 만 저장하는 type입니다. boolean변수에는 비교연산자를 통해 true or false가 출력되는 방식으로도 대입할 수 있어요 문자도 정수니까 char도 표현할 수 있겠죠
8bit = 1byte
1bit로 표현할 수 있는 숫자는 0과 1만 가능합니다. 값을 저장할 수 있는 칸이 1칸이라고 생각하면 돼요 그러면 2bit에 들어갈수있는 수는 00 01 10 11로 경우의 수가 4개네요 2의 2제곱이 경우의 수가 됩니다. 3bit는 2의 3제곱으로 즉, 변수의 사이즈는 2의 n제곱으로 계산하면 돼요.
8bit중 한 칸은 컴퓨터가 음수 양수를 구분할 수 있는 칸으로 씁니다.0이면 양수, 1이면 음수로 인식해요
프로그램을 설치할 때 32bit 운영체제와 64bit 운영체제에 따라 설치파일이 나누어져 있는 것을 볼 수 있는데요. 32bit와 64bit의 차이는 계산방식입니다. 64bit의 프로그램을 32bit의 OS는 두번 나눠서 계산하고 64bit는 한번에 계산할 수 있어요 계산체계가 달라서 64bit 프로그램을 32bit에서 실행하면 오류가 생길 수 있어 32bit와 64bit용 프로그램이 나뉘는 것입니다
변경이 불가능한 것을 상수, 리터럴이라고 합니다.
java는 기본적으로 int 타입으로 인식하는데요 long으로 인식시키려면 숫자뒤에 L/l을 붙이면 됩니다.
정수 리터럴을 byte나 short에 저장하려면 해당 타입에 저장할 수 있는 범위만 넘지 않으면 자동형변환해서 저장됩니다.
int y=100L //오류.
int에서 long으로 변환하는 방식은 불가능해요 long이 더 크기때문이겠죠
실수 리터럴의 기본타입은 double입니다.
float y=3.14f;
//3.14는 float보다 커서 숫자뒤에 f를 넣어야함
double n1=123; //int->double 자동형변환
double n2=100;
double에 정수를 저장하면 123.0, 100.0으로 저장됩니다. 자동으로 형변환이 된건데요 정수 123과 변환된 123.0는 엄연히 다른숫자예요 인식하는게 다르거든요
문자 리터럴은 ''으로 문자열 리터럴은 ""으로 저장해야합니다
System.out.println("ch1="+(int)ch1);
강제형변환은 데이터타입을 강제로 지정한 타입으로 변환시켜 타입에 맞춰 값이 변하는거예요. 모든 상황에서 되는건 아니고 문자같은경우 내부적으로 숫자라는 것이 인식되어있기 때문에 가능합니다.
아스키코드의 경우 외울필요없이 이런식으로 문자의 아스키코드번호를 알아내면 되겠어용
저는 '1'과 (char)1이 같은 결과가 나올거라고 생각했어요 그러나 이 둘이 같은 값이 아닌이유는?
char ch3 ='1'; char ch4=(char)1;
정답은 아스키코드에 있어요. '1'은 문자이며 10진수로 49입니다. 그런데 10진수인 1은 아무리 (char)형변환했다해도 숫자 1은 문자로 SOH로 출력되지 '1'이 되는 것은 아니었습니다!
import java.util.Scanner;
...
Scanner sc=new Scanner(System.in);
...
sc.close();
마우스, 키보드같은 입력기기로 받은 입력을 간단하게 받아낼수있는 편한방법으로 scanner 변수를 사용할 수 있어요
nextInt() : 정수를 입력받는 메소드
nextDouble() : 실수 입력 메소드
nextLine() : 문자열 입력 메소드
sc.nextLine();
숫자 입력 후에 바로 문자열 입력하면 입력이 안됩니다. 왜냐면 숫자 입력 후 누르는 엔터를 문자로 인식하기 때문에 입력이 끝나버려요 그래서 엔터 제거 코드가 먼저 나와야하는 점 주의하세용
키보드로 국영수 점수 입력하고 총점과 평균 출력하기
1. 입력 준비
2. int로 국영수 저장
3. 국영수 점수 출력
4. 총점 계산 출력
5. 평균 소수점 셋째자리까지 계산 출력 (참고:정수/실수=실수)
6. 스캐너종료
System.out.println("총점 계산 프로그램");
Scanner sc=new Scanner(System.in);
System.out.println("국어/영어/수학 점수 입력>>");
int kor=sc.nextInt(), eng=sc.nextInt(), math=sc.nextInt();
System.out.println("국어 : "+kor+", 영어 : "+eng+", 수학 : "+math);
int total = kor+eng+math;
System.out.println("총점 : "+ total);
double avg=total/3.0;
System.out.printf("평균 : %.3f", avg);
sc.close();
평균을 출력하려면 avg=total/3 라고 생각했으나 실수로 출력해야하기 때문에 total을 double로 선언했었어요. 그런데 이러면 총점까지 실수가 되기때문에 이게 맞는지 확신하지 못했거든요 출력형태가 표시되어있지 않았기때문에 완전히 틀린건 아니었겠지만.. 실수라고 명시한건 평균값뿐이니 평균만 실수로 출력하려면 total이 아니라 3을 실수화시키면되던것..!을 강사님의 풀이로 알아차렸습니다 ㅇㅎ
프로그램 작문규칙
1. 열었으면 닫아라 { }, ( ), Scanner close …
2. 다양한 테스트 케이스에서 PASS해야 완벽한 프로그램.
System.out.println("나눗셈 : "+ (n1/n2));
System.out.printf("나눗셈 : %.5f", (n1/n2));
c언어같은 printf도 사용가능하더라구요 알아둡시당
eclipse 사용 tip❗ #2
- 변수 일부 쓰고 ctrl+spacebar : 변수명 자동완성 선택가능
- ctrl+/ : 주석처리 및 해제
- ctrl+shift+F : 자동 줄맞춤
package의 용도는 보통 기능별 혹은 주제별로 모아놓기 위함입니다.
내가 온전히 창조하는건 거의 없음 패턴을 모방하자
1순위 내가 원하는 거 만들 줄 알아야함. 그 다음 2순위 효율성을 위해 더 발전시키기
문제 분석
1. 문자열 1개 입력
2. 문자열 길이까지 반복하며 한글자씩 출력
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
String eng = sc.nextLine();
for (int i = 0; i < eng.length(); i++) {
System.out.println("'" + eng.charAt(i) + "'");
}
sc.close();
}
}
문제 분석
1. 최대 경기시간은 90 미만, 성익은 5마다 1득점
2. 현재 경기시간과 우리반의 득점 입력
3. 현재 경기시간부터 +5, 득점 +1을 반복
4. 90 이상 시 경기 종료. 우리반 득점 출력
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int now=sc.nextInt(), goal=sc.nextInt();
for(int i=now; i<90; i+=5) {
goal++;
}
System.out.println(goal);
sc.close();
}
}