8/13 자바 스터디

본 내용은 자바의 정석 - 기초편 강의, 자바의 정석 책을 바탕으로 작성되었습니다.

ch03. 연산자(Operator)

연산자

  • 연산자 : 연산을 수행하는 기호
  • 피연산자 : 연산자의 연산 수행 대상

연산자 우선순위

  1. 산술 >비교 > 논리> 대입. 대입이 제일 마지막
  2. 단항(1) > 이항(2) > 삼항(3) 단항 연산자의 우선순위가 이항연산자보다 높음
  3. 단항 연산자와 대입 연산자를 제외한 모든 연산의 진행방향은 왼쪽-> 오른쪽

산술 변환

연산 전에 피연산자의 타입을 일치시키는 것

  • 두 연산자의 타입을 같게 일치시킨다.(보다 큰 타입으로 일치)
  • 피연산자의 타입이 int보다 작은 타입이면 int로 변환된다.

반올림 - Math.round()

실수를 소수점 첫 째자리에서 반올림한 정수로 반환
long = result Math.round(4.52); // result에 5가 저장된다.

	double pi = 3.141592;
	System.out.println(pi);
	System.out.println(pi*1000);
	System.out.println(Math.round(pi*1000));
	System.out.println(Math.round(pi*1000)/1000);
	System.out.println((double)Math.round(pi*1000)/1000);

조건 연산자 ? :

조건식의 결과에 따라 연산 결과를 달리한다.

  • 조건식 ? 식1(참) : 식2(거짓)
  • Result = (x>y) ? x: y ; // 참이면 x, 거짓이면 y 가 result에 저장됨

ch04. 조건문과 반복문

조건문과 반복문

조건문 : 조건을 만족할때만 {}를 수행 (0~1번)/ if, switch문

반복문 : 조건을 만족하는동안 {}를 수행(0~n번) / for, while문

조건식의 다양한 예

str.equlas(“yes”) -> 문자열 str 내용이 “yes”일 때 (대소문자 구분)
문자열 비교 연산은 == 쓰면 안되고 equls 사용
str.equals.IgnoreCase(“yes”) ->) -> 문자열 str 내용이 “yes”일 때 (대소문자 구분안함)

  		int score = 0; 
		char grade = ' '; // 공백 초기화
		
		System.out.print("점수를 입력하세요.>");
		Scanner scanner = new Scanner(System.in);
		score = scanner.nextInt();
		
		if (score >=90) {
			grade = 'A';
		} else if( score >=80) {
			grade = 'B';
		} else if(score >=70) {
			grade = 'C';
		}else {
			grade = 'D';
		}
		System.out.println("당신의 학점은"+grade+"입니다")

switch문

처리해야 하는 경우의 수가 많을 때 유용한 조건문

  1. 조건식을 계산한다.

  2. 조건식의 결과와 일치하는 case문으로 이동한다.

  3. 이후의 문장들을 수행한다.

  4. break문이나 switch문의 끝을 만나면 switch문 전체를 빠져나간다.

    switch(조건식) {
    	case 값1 : 
    		// 조건식의 결과가 값1과 같을경우 수행될 문장들
    		break;
    	case 값2 :
    		break;
    	default:
    		// 조건식의 결과와 일치하는 case문이 없을 때 수행, 없어도 됨
    }
    

switch문의 제약 조건

  1. switch문의 조건식의 결과는 정수 또는 문자열이어야 한다.
  2. case문의 값은 정수 상수(문자 포함), 변수는X, 문자열만 가능하며, 중복되지 않아야 한다.
    Int num, result;
    final in One = 1; //상수
    switch(result){
    	case ‘1’:			//가능, 문자 리터럴(정수 49와 동일)
    	case one: 		//가능. 정수 상수
    	case “YES” : 		// 가능, 문자열 리터럴 JDK 1.7부터 허용
    	case num : 		// 에러 , 변수는 불가
    	case 1.0:			// 에러. 실수도 불가

임의의 정수 만들기

Math.random() – 0.0과 1.0 사이의 임의의 double값을 반환

0.0 <= Math.random() < 1.0

만약 1~3사이의 정수를 출력하고 싶다면

  1. 각변에 3을 곱한다.
    0.03 <= Math.random() 3 <1.0 *3
  2. 각 변을 int형으로 변환.
    int)0.0 <= (int)(Math.random() *3) <(int)3.0
  3. 각변에 1을 더한다

for 문

조건을 만족하는 동안 블록{}을 반복 – 반복 횟수를 알 떄 적합

for(초기화; 조건식; 증감식){
	수행될 문장
}

while 문

조건을 만족시키는 동안 블록{}을 반복 – 반복 횟수 모를 때

while(조건식){
	// 조건식의 연산결과가 참(true)인 동안, 반복될 문장을 적는다.
}

예제

int num = 12345, sum =0;
//10으로 나머지 연산을 하면 마지막 자리를 얻는다.
//	System.out.println(12345%10);
		
// num =12345, 1234,123,12,1
	for(num =12345; num>0; num= num/10){
		System.out.println(num%10);
		sum+= num%10;
	}
		
	while(num>0){
		sum+= num%10;
		System.out.println("sum="+sum +",num%10"+num%10);
		num = num/10;
    }
System.out.println("각 자리수의 합:"+sum);

do-while 문

블록{}을 최소한 한 번 이상 반복 -사용자 입력을 받을 떄 유용

Do{

} while(조건식); // 끝에 ; 잊지않기

break 문

자신이 포함된 하나의 반복문을 벗어난다.
while 문은 true 생략 불가

continue 문

자신이 포함된 반복문의 끝으로 이동 – 다음 반복으로 넘어감
전체 반복 중에서 특정조건시 반복을 건너뛸 때 유용

이름 붙은 반복문

break; -> 하나의 반복문을 벗어난다.
반복문에 이름을 붙여서 하나 이상의 반복문을 벗어날 수 있다.

Ch05. 배열

배열이란?

배열은 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
Int[] score = new int[5];

배열의 선언과 생성

배열의 선언 – 배열을 다루기 위한 참조변수의 선언

  • 타입[ ] 변수이름; // 배열을 선언(배열을 다루기 위한 참조변수 선언)
  • 변수이름 = new 타입[길이]; // 배열을 생성(실제 생성 공간을 생성)
  • Int[ ] score;
  • Score = new int[5]; // int 타입 값 5개를 저장할 수 있는 배열 생성
int sum =0;
float avg =0;
int score[] = {100,85,70,65,40};
	for(int i =0; i<score.length; i++) {
		sum += score[i];
	}
avg = sum / (float)score.length; // 계산결과를 float로 얻기 위해 형변환

System.out.println("총점 :"+sum);
System.out.println("평점 :"+avg);

배열의 인덱스

배열의 인덱스 – 각 요소에 자동으로 붙는 일련 번호
“인덱스(index)의 범위는 0부터 ‘배열길이-1’ 까지”

배열의 길이

배열이름.length – 배열의 길이(int형 상수)
배열은 한번 생성하면 그 길이를 바꿀 수 없다.

  • 배열의 길이 변경하기 :
     더 큰 배열을 새로 생성한다.
     기존 배열의 내용을 새로운 배열에 복사한다.

배열의 초기화

배열의 각 요소에 처음으로 값을 저장하는 것
배열은 기본적으로 0으로 자동 초기화가 됨
Ex) int[ ] score = {50,60,70,80,90};

배열의 출력

Char[] chArr = {‘a’,’b’, ‘c’, ‘d’ }
System.out.println(chArr); // abcd 출력 그러나 char 배열일때만 제대로된 값 출력됨 , 나머지배열은 쓰레기값 출력됨._
// 배열 iArr의 모든 요소를 출력한다. [100,95,80,70,60]이 출력
System.out.println(Array.toString(iArr));

배열의 활용

  • 예제 1
float avg =0;
int score[] = {100,85,70,65,40};
	for(int i =0; i<score.length; i++) {
		sum += score[i];
	}
avg = sum / (float)score.length; // 계산결과를 float로 얻기 위해 형변환

	System.out.println("총점 :"+sum);
	System.out.println("평점 :"+avg);
}
  • 예제 2
int arr[] = new int[10];
		
	for(int i=0; i<arr.length; i++) {
		arr[i] = i;
		System.out.print(arr[i]);
	}
System.out.println("\n");
		
	for(int i=0; i<100; i++) {
		int tmp = arr[0];
		int n = (int)(Math.random()*10);
		tmp = arr[0];
		arr[0] = arr[n];
		arr[n] = tmp;
	}
System.out.println(Arrays.toString(arr));

String 배열의 선언과 생성

String[] name = new String[3];

커맨드 라인을 통해 입력받기

args(String 배열)
커맨드 라인에 입력한 값이 문자열 배열에 담겨서 전달된다.
이클립스 기준 Run -> Run Configurations -> Arguments 들어가서 값 입력

2차원 배열

Int[][] score = new int[4][3] // 12개의 저장공간이 마련됨
초기화 : int[][] arr = {{1,2,3,}, {4,5,6}}

2차원 배열 예제

int[][] score = {
		  { 100, 100, 100 }
		, { 20, 20, 20 }
		, { 30, 30, 30 }
		, { 40, 40, 40 }
	};
int sum = 0;

	for (int i = 0; i < score.length; i++) {
		for (int j = 0; j < score[i].length; j++) {
			System.out.printf("score[%d][%d]=%d%n", i, j, score[i][j]);

			sum += score[i][j];
		}
	}

System.out.println("sum=" + sum);

String 클래스

  1. String 클래스는 char[]와 메서드(기능)를 결합한 것
    String클래스 = char[] + 메서드(기능)
  2. String 클래스는 내용을 변경할 수 없다(read only)

String 클래스 주요 메서드

  • Char charAt(int index) : 문자열에서 해당 위치(index)에 있는 문자를 반환한다. (str.charAt(3))
  • int length() : 문자열의 길이를 반환한다. (str.length)
  • String substring(int from, int to) : 문자열에서 해당 범위의 문자열을 반환한다 (to는 포함 x) / str.substring(1~4)
  • Boolean equals(Object obj) : 문자열의 내용이 같은지 확인한다. 같으면 true, 다르면 false / str.equls()
  • Char[] toCharArray() : 문자열을 문자배열(char[])로 변환해서 반환한다.
String str = "ABCDE";
char ch = str.charAt(2);
String str2 = str.substring(1,4);
String str3 = str.substring(1,str.length());		
System.out.println(ch); //C
System.out.println(str2); //BCD
System.out.println(str3); //BCDE

Arrays로 배열 다루기

배열의 비교와 출력 –equals(), toString()

  • toString()
    System.out.println(Array.toString(arr)); // 1차원 배열을 문자열로 바뀌줌
    System.out.println(Array.deepToString(arr2D)); // 다차원 배열에서 사용

  • equals
    1차원 : Arrays.equlas(a,b) / 2차원 : Arrays.deepequals(a,b)

배열의 복사 – copeyOf(), copyOfRange()
배열의 정렬 – sort()
Arrays.sort(arr) // 배열 arr을 오름차순으로 정렬

좋은 웹페이지 즐겨찾기