자바 6일차

선장원·2021년 10월 8일

자바

목록 보기
6/24

6일차 (10/08)

어제는 아파트 공사때문에 학원을 갔지만 오늘은 백신 맞아야해서 안나감
아직 괜찮은데?
어젯밤하고 오늘 아침까지 해서 BufferedWrite랑 BufferedReader 사용법을 알아옴
오늘 쓰면서 연습해야지
오늘은 System.out.println 없다!!!!!!!

  • 사실 시간 없어서 몇번씀 ㅎ

While

  • 반복문
  • 무한 반복 등을 사용할 때 많이 쓰임
while (반복조건){
	반복 실행 내용
}

do {
	반복 실행 내용
} while (반복 조건); // 세미콜론을 찍어줘야함

While vs do while

  • while문은 조건이 맞지 않으면 반복실행내용을 전혀 실행하지 않음!
  • do while문은 조건이 맞든 맞지않든 일단 한번은 실행하고 반복조건을 따짐
  • do while문 뒤에 ;(세미콜론)을 찍어줌
  • 주의사항
  1. while(true)일 때 왜 다음 코드가 빨간줄인가?
  2. while(false)일 때 왜 다음 코드가 빨간줄인가?

계속해서 돌아가는 코드 밑에 있어서 실행이 안된다.
Unreachable code
사용할 수 없는 코드, 조건이 맞지않는 코드

while 실습

원하는 값이 되면 정지

		/*
		 * i 값이 123456이 될 때 반복문이 종료되도록 해보세요 
		 */
		
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
		
		boolean run = true;
		int i =1;
		while (run) {
			bw.write(String.valueOf(i)+"\n");
			i++;
			if (i == 12345)
				run = false;
		}
		
		bw.write(String.valueOf(i)); // while 조건이 끝이 안나서 실행 될리가 없는 코드
		bw.flush();
		
		
		
		bw.close();

1~10까지의 합을 출력

		/*
		 * while문을 이용해 1부터 10까지 합계 출력
		 * 
		 */

		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int num = 1, result = 0;

		while (num <= 10) {
			if (num <= 9) {
				bw.write(String.valueOf(num) + "+");
				result += num;
				num++;
			} else {
				result +=num;
				bw.write(String.valueOf(num) + "=" + result+"\n");
				num++;
			}
		}
		bw.flush();

		bw.close();

Random 메서드

  • 랜덤으로 숫자를 출력
  • 특정 범위를 지정하면 해당 범위 내에서 숫자를 무작위로 발생시킴
  • 0~1 사이의 실수
    (int) (Math.random() * 10) + 1;
  • (int) : 실수를 정수로 형변환 자세한건 조금 뒤에
  • (Math.random() * 10) + 1 : 0~1이라 *10을 해서 1~10으로 나오게해줌

정수는 실수로 변환은 다른 코드가 없어도 가능하지만
실수를 정수로 변환은 (int)를 앞에 붙여서 변환을 해줘야한다
실수를 정수로 교환을 할 때는 무조건 소수점 이하는 버린다
random()메서드는 0~1의 작은 실수를 출력해서 (int)를 사용하면 0이 나온다.
반올림이 아니라 소수점이하는 버린다. 그래서 (int)를 사용하면 0이 나온다.
그래서 (int)를 하기 전에 *10을 사용해서 정수부분만 사용하자

Random 메서드와 형 변환 실습

		/*
		 *  Random 메서드
		 *  특정 범위를 지정하면 해당 범위 내에서 숫자를 무작위로 발생시킴
		 *  1~10 사이의 정수 하나를 발생
		 *  (int) (Math.random() * 10) + 1
		 *  
		 */
		
		System.out.println((int) (Math.random() * 10) + 1); // (int) 실수를 정수로 형변환
		System.out.println(Math.random()); // Math 클래스의 random()메서드 호출
		// 우리는 정수가 필요하기 때문에 실수를 정수로 바꾸는 과정이 필요함.
		// 실수 (double) -> 실수(int) : 형 변환
		// 실수 8byte > 실수 4byte : 강제 형 변환(casting)
		
		System.out.println((int) (Math.random() * 10)); // 0~9 정수
		System.out.println((int) (Math.random() * 10) + 1); // 1~10 정수
		System.out.println((int) (Math.random() * 45) + 1); // 1~45
		
		
		
		int intvar = 10;
		double doublevar = 1.234;
		
		doublevar = intvar; // 정수 > 실수 형변환
		System.out.println(doublevar);
		
		intvar = (int) doublevar; // 실수 > 정수 형변환
		System.out.println(intvar);

정수와 실수의 형변환

정수(int) -> 실수 (double) : 형 변환
실수 8byte > 정수 4byte : 강제 형 변환(casting)

실수는 8byte 정수는 4byte라서 정수에서 실수를 가는 형변환은 다른 조치가 없이도 가능
하지만 실수에서 정수로 가는 형 변환은 byte가 줄어드는 형 변환이라서 (int) 라는 코드??가 필요하다.
하지만 (int)를 사용하면 소수점 밑으로 반올림이 아니라 제거다.

주사위 게임

		/*
		 * 주사위(1~6)가 있을 때 주사위를 계속 던져서 6이 나오면 종료가 되는 프로그램을 while로 작성해보시오
		 */

		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int num = 0, i = 0;
		boolean run = true;
		
		bw.write("횟수 : "+String.valueOf(i)+"\n");
		while (run) {
			num = (int) ((Math.random() * 6) + 1);
			i++;
			bw.write("횟수 : "+String.valueOf(i)+"\n");
			if (num == 6) {
				bw.write("주사위 : " + String.valueOf(num) + " 횟수 : " + String.valueOf(i)+"에 종료합니다.\n");
				run = false;
			}
		}
		bw.flush();

		bw.close();

주사위 게임2

		/*
		 * 2개의 주사위를 던겨서 합이 5일 때 종료하는 프로그램
		 */
		BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

		int num1 = 0, num2 = 0, i = 0, result = 0;
		boolean run = true;

		bw.write("횟수 : " + String.valueOf(i) + "\n");
		while (run) {
			num1 = (int) ((Math.random() * 6) + 1);
			num2 = (int) ((Math.random() * 6) + 1);
			result = num1 + num2;
			i++;
			bw.write("횟수 : " + String.valueOf(i) + " 값 : " + String.valueOf(result) + "\n");
			if (result == 5) {
				bw.write("횟수 : " + String.valueOf(i) + " 주사위1 : " + String.valueOf(num1) + " 주사위2 : " + String.valueOf(num2) + " 합 : "
						+ String.valueOf(result) + "에 종료합니다.\n");
				run = false;
			}
		}
		bw.flush();

		bw.close();

Git, Git Hub

소스 관리(형상 관리) 도구
설치하는 거 어려움 잘 따라해야함

git 설치
git hub 설치

프로젝터 생성> 프로젝트 이름 오른쪽클릭 > show in> system explorer
>자바 폴더로 들어가서 위에 파일 > window powershell

git init
git config --local --list
git config --global user.name 'seonjangwon'
git config --global user.email 'wkddnjs740@naver.com'
git config --global --list
차례대로 입력

확인

네임, 이메일 지우는 법
git config --global --unset user.name
git config --global --unset user.email

이제 git hub홈페이지로 들어가서
git hub의 내 정보에서 your repositories에서 new를 눌러서 만들어서

  1. 이름
  2. 저장소 설명
  3. 만들기

다 만들고 나면 이런 페이지가 뜬다.

여기서 빨간 부분을 복사해서 윈도우 파워셀에 입력

git config --local --list 을 입력해서 확인

파워셀에
git status를 입력

빨간색이 수정된 파일들
깃허브랑 지금 파일이랑 다른애들

git add .입력( . 중요)

git commit -m ‘나의 첫 커밋’ 입력

git branch -M main입력

git push -u origin main

git push -u origin master
을 입력하면 처음으로 설정하는 사람은

의 크롬 페이지가 뜨는데 초록색을 눌러주면 된다.


branch를 안하면 master에 해야 하고 main에 사용하려면 git branch -M main입력을 해줘야한다.

이제 처음 등록 끝!
이제부터는 파일을 생성하고나서 올릴 때

이클립스로 파일을 추가하고 git status를 치고

git add .
git status

git commit -m ‘test2’

git push -u origin main

한번더 클래스를 수정을 해보면

git add .
git status
git commit -m '뭐가 수정된 것인지 쓰자'
git push -u origin main

위 과정을 하고 깃 허브에 들어가보면

클래스 안에서 뭐가 수정된 것인지 나온다
빨간줄은 삭제
초록줄은 추가

BufferedWriter와 BufferedReader

import java.io.*; 또는
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
를 먼저 해야함
메인 메서드 앞에서 throws IOException를 하거나 try catch를 해야함
하지만 try catch는 모르지!!!!

BufferedWriter

  • Buffer에 저장해서 flush로 보낸다.
  • BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out)); : 선언
  • bw.write(); : 이거는 문자열 출력, 정수 출력하려면 String.valueOf(); 사용
  • bw.flush(); : 이거는 보낼 때 마다 사용
  • bw.close(); : 이거는 클래스 마지막에 해줘야함
  • bw.flush()메서드를 많이 사용하면 느려짐 한번에 보내는 것이 좋음

BufferedReader

  • Buffer에 저장해서 받는다?
  • BufferedReader br = new BufferedReader(new InputStreamReader(System.in)); : 선언
  • br.readLine(); : 이거는 문자열을 받는다
  • num = Integer.parseInt(br.readLine()); : 정수를 받을 때 문자열로 받아서 정수로 변환
  • String.valueOf() : 정수를 문자로 형변환
  • br.close(); : 클래스 마지막 해줘야함

StringTokenizer

import java.util.StringTokenizer;을 먼저 해줘야한다.

String var = “”; 을 하나 선언해주고 (입력으로 받는다면)

StringTokenizer st = new StringTokenizer(var);을 사용해서 var 변수에 있는 문자열을 띄어쓰기로 구분해서 나눠준다.

num = Integer.parseInt(st.nextToken()); = nextToken()을 이용해서 var에서 첫자리를 가져오고 문자열로 가져왔으니 Integer.parseInt()를 이용해서 정수로 형 변환을 시켜준다.

오늘 BufferedWriter와 BufferedReader와 StringTokenizer를 사용해서 for문에 있는 못푸는 문제를 다 풀어서 for문에 있는 문제를 다 풀었다.ㅎㅎ
처음에 시간초과 나와서 보니까
bw.flush()메서드를 for문 안에 넣어서 오래걸리는 거 였다.

이제 while문으로 가야지 while문은 기본적으로 배열?을 쓰던데
StringTokenizer공부해서 다행이네
IntTokenier은 없나...?

profile
코딩도전기

0개의 댓글