728x90

 

StringBuffer 안에 쓸 수 있는 많이 쓰는 메소드

append(),  insert(), delete(), reverse()

 

 

public class practice_everyday01 {
	public static void main(String[] args) {	
		
		// StringBuffer
		
		// 1) append()
		// 받아온 값을 뒤에 추가로 이어주는 메소드
		StringBuffer sb1 = new StringBuffer();
		sb1.append("a"); // str
		sb1.append('1'); // char
		sb1.append(2);   // int
		System.out.println(sb1); // 문자열 취급 더하기 a+1+2=a12
 		// a12
		
		// 2) insert()
		// 특정 인덱스번호에 문자열 삽입기능
		sb1.insert(1, "b");  	// 인덱스1 위치에 넣으면 원래 1에 있던 문자는 뒤로 밀려난다 
		sb1.insert(2, 'c');  	// 인덱스1 위치에 넣으면 원래 1에 있던 문자는 뒤로 밀려난다 
		System.out.println(sb1);// ""나 ''나 둘 다 작동
		//abc12
		
		// 3)delete 
		// delete(start, end-1)
		sb1.delete(3, 5);  		// end 숫자의 -1까지 삭제한다 1부터5라면 1부터4까지만 지운다
		System.out.println(sb1);
		// abc
		
		// 4)reverse
		sb1.reverse();  // 문자열을 거꾸로 돌려서 출력
		System.out.println(sb1);
		// cba
	}	
}
728x90
반응형
728x90

 

 

 

public class practice_everyday01 {
	public static void main(String[] args) {	
		
		int[] arr = new int[4];
		for(int i = 0; i<arr.length;i++) {
			System.out.println(arr[i] += (10+i));
		}
			
	}
}
728x90
반응형
728x90

생성자 this()

생성자에서 다른 생성자 호출할 때 사용

코드 중복을 제거할려고 this() 사용

 

원래 코드는 Car(color, “auto”, 4)로 호출해야함

this()생성자를  사용하므로써 이렇게 this(color, “auto”, 4) 

 

 

코드의 중복

Car() { // Car()의미는 () 안에 매개변수를 아무 값도 지정하지 않았으면 
        // 디폴트 값으로 아래의 세가지를 넣으라는 것
	color = "white";
	gearType = "auto";
	door = 4;
}

 

이미지 왼쪽의 중복된 코드(변경 전)

class Car{
	String color;
	String gearType;
	int door;
//////////////////////////////////////////////////////////
			Car() {                         // 1번 Car()
				color = "white";
				gearType = "auto";
				door = 4;
			}
			
			Car(String c, String g, int d){ // 2번 Car()
				color = c;
				gearType = g;
				door = d;
			}
}        // 1번 Car()와 2번 Car()가 같은 코드로 중복(bad)

 

이미지 오른쪽에 코드의 중복을 제거한 코드(변경 후)

class Car{
	String color;
	String gearType;
	int door;
//////////////////////////////////////////////////////////
		Car() {
			// Car("white","auto",4);
			this("white","auto",4);   // 바로 Car생성자의 매개변수로 값 대입
		}  // 중복 제거(good)
		
		Car(String c, String g, int d){
			color = c;
			gearType = g;
			door = d;
		}
}

 


 

참조변수 this.

인스턴스 자신을 가리키는 참조변수(reference variable)

 

특징

인스턴스 메서드(생성자 포함)에서만 사용 가능

    - 클래스 메소드(static 메소드)에서 사용 불가

지역변수(lv)와 인스턴스 변수(iv)를 구별할 때 사용

인스턴스의 주소가 저장되어있다

모든 인스턴스 메서드에 지역변수로 숨겨진 채로 존재한다(생략 가능)         

    - 전역변수와 지역변수 구분을 위해 쓰는 경우는 생략하면 에러는 아니나 지역변수 = 지역변수;가 되버려서 의미x

    - this를 선언안해도 사용가능. 선언한 적 없는데 사용할 수 있는 변수

 

ex)

long a ,b;

참조변수 long a ,b의 진짜 이름은 this.a, this.b

long add() {
	return a + b; // return this.a + this.b;

 

 

728x90
반응형
728x90

 

생성자(constructor)

인스턴스가 생성될 때마다 호출되는 ‘인스턴스 초기화 메서드’하는 역할

이외에도 메서드이기 때문에 {}에 작업할 내용을 넣으면 됨

모든 클래스에는 반드시 하나의 생성자가 있어야한다

 

ex) iv 초기화 예시

Time t = new Time();  // 생성자
t.hour = 12;    // 인스턴스 메소드(iv) 초기화
t.minute = 34;  // 인스턴스 메소드(iv) 초기화
t.second = 56;  // 인스턴스 메소드(iv) 초기화

 

 

생성자의 필요성

위처럼 객체생성 후 iv 초기화를 해야하므로 번거롭다

한 줄로 할 수 있다면 직관적이고 편리할 것

 

생성자 예시

	Time t = new Time(12,34,56); // 생성자

위의 4줄이 1줄로

 

생성자 호출이라는 의미

생성자 불러다 썼다는 의미

 

 

생성자의 규칙

1) 클래스명과 생성자명이 같아야한다

2)항상 리턴값이 없다(void 안붙인다)

 

 

 

1) 클래스명과 생성자명이 같아야한다

    같은 이름이 존재할 수 있는건 오버로딩이 가능하기 때문

2)항상 리턴값이 없다(void 안붙인다)

 

 

 

1.기본 생성자(default constructor)

생성자가 하나도 없을 때만 컴파일러가 자동 추가

생성자는 원래는 직접 값을 넣어줘야한다

기본생성자를 안넣어주면 에러메세지가 다른게 나오기에 찾기 힘들다

Card c = new Card(); // 기본생성자

 

 

기본생성자 에러

class Data_1도 생성자가 없지만 에러가 안나는건 값을 안넣어줬기 때문이고, Class Data_2에는 Data_2(int x)라는 값을 임의로 넣어줬기 때문에 생성자도 따로 지정해줬어야 했는데 안했기에 에러가 난 것

 

2.매개변수가 있는 생성자

 

매개변수 생성자가 필요한 이유

4줄이 1줄로

 

Car c = new Car(”while”,”auto”,4); 문장이 실행되는 과정

 

1)참조변수 C가 생성됨

2)new연산자가 객체 및 주소값 생성

3)생성자 호출되면서 객체 초기화

4)변수(Car c)에 주소값이 들어감

 

 

1)참조변수 C가 생성됨

2)new연산자가 객체를 만들고 객체에 주소값 부여

       (객체 멤버 3개 : color, geartype, door)

각 객체 멤버에 데이터타입의 기본값 들어가 있음(String은 null int는 0)

 

3)생성자가 호출되면서 객체를 초기화시킴

생성자 호출로 white, auto, 4의 값이 color, geartype, door로 들어감

 

초기화란?

자기가 원하는 값을 처음으로 넣는 것을 초기화라 부름

 

4)마지막으로 Car c에 주소값이 들어감

객체와 참조변수 연결해야하니까 대입연산자( = )가 객체의 주소를 저장한다

객체의 주소값은 new연산자의 반환값

 

728x90
반응형
728x90

 

평균 계산시, int / int = int가 나오므로 (float or double) 형변환 해줄 것

average = sum / (float)score.length; // 계산 결과를 float타입으로 형변환

 

총점과 평균

package practice03_jungsuk;

public class Ch5_89_array활용 {
	public static void main(String[] args) {
		
		int sum = 0;
		float average = 0f;
		
		int[] score = {100, 88 , 100, 100, 90};
		
		for(int i = 0; i < score.length; i++) {
			sum += score[i];
		}
		average = sum / (float)score.length; // 평균 연산시, 실수 형변환 잊지말것
		// casting안하면 정수로 결과도출 및 데이터 손실. (float)변환시 95.6 int시 95
		
		System.out.println("총점 : " +sum);
		System.out.println("평균 : " +average);
	}	
}

 

 

최대값 최소값

int[] score2 = {79,88,91,33,100,55,95}; 
		
int max = score2[0]; // 배열의 첫번째 값으로 최대값 초기화
int min = score2[0]; // 배열의 첫번째 값으로 최소값 초기화

for(int i=1; i<score2.length; i++) {
	if(score2[i] > max) {
		max = score2[i];
	}else if(score2[i] < min) {
		min = score2[i];
	}
} 

System.out.println("최대값 : " + max);
System.out.println("최소값 : " + min);

 

728x90
반응형
728x90

 

ch5-4 배열의 길이

배열의 길이

배열이름.length - 배열의 길이(int형 상수)

int[] arr = new int[5];  // 길이가 5인 int배열
int tmp = arr.length;    // arr.lenght의 값은 5이고 tmp에 5가 저장된다

 

배열은 한번 생성하면 그 길이를 바꿀 수 없다

why?

int[5]가 4byte인 int가 5개이므로 4x5 =20 byte

여기서 int[5]를 10칸인 int[10]으로 바꾸고 싶다면 4x10=40이므로 두배의 공간이 필요하게 되고 배열은 연속해서 저장공간을 만든다. 새로 만들려면 연속된 공간 저장 확보가 어렵다면 떨어진 곳에 만들어야하는데 자바는 크기를 못 늘리게하고 필요하면 다른 곳으로 옮기게 규칙을 정해놓음

 

 

길이가 부족할 때는?

길이를 늘릴 수 없기에 새로운 걸 큰 걸 만들고 기존의 내용새 배열에 복사

for (int i=0; i < score.length;i++) // 조건식 변경 불필요
		System.out.println(score[i];

 

 


 

ch5-5 배열의 초기화

배열의 초기화

배열의 각 요소에 처음으로 값저장하는 것

int[[ score = new int[5]; // 길이가 5인 int형 배열 생성
score[0] = 50; // ← 배열 초기화
score[1] = 60; // ← 배열 초기화
score[2] = 70; // ← 배열 초기화
score[3] = 80; // ← 배열 초기화
score[4] = 90; // ← 배열 초기화

배열은 기본적으로 인트형으로 자동 초기화

 

반복문으로 초기화 가능

for(int i=0; i<score.length; i++)
	score[i] = i * 10 + 50;

// 결과값으로 
score[0] = 50;
score[1] = 60; 
score[2] = 70; 
score[3] = 80; 
score[4] = 90; 

 

 

간단 초기화 방법

  1. int[] score = new int[] {50, 60 , 70, 80, 90};
  2. int[] score = {50, 60 , 70, 80, 90}; // new int[] 생략가능

대부분 2번으로 많이 사용

 

주의사항

// 아래의 코드는 2)과 같은 코드이나 따로쓰면 error
int[] score;
score = {50, 60 , 70, 80, 90}; // error : new int[] 생략 불가
score = new int[]{50, 60 , 70, 80, 90}; // 가능

 

728x90
반응형
728x90

 

오버플로우(Overflow) 의미

표현 할 수 있는 범위를 넘어섰다

 

2진수 이해가 어려울 때는 10진수와 비교해보면 이해가 쉬워진다

 

 

10진수와 2진수의 이해

 

 

 

10진수

1이 아닌 0부터 시작해서 -1을 하는 것

 

 

2진수

 

규칙

 

 

 

 

728x90
반응형
728x90

 

Scanner란?

화면으로부터 데이터를 입력받는 기능을 제공하는 ‘클래스’

 

1)import문 추가

    - import java.util.*;

 

 

2)Scanner객체의 생성

    - Scanner scanner = new Scanner(System.in)

    - System.in : 화면입력한다는 의미

 

 

3)Scanner객체를 사용

int num = scanner.nextInt();       // 화면에서 입력받은 정수를 num에 저장
String input scanner.nextLine();   // 화면에서 입력받은 내용을 input에 저장.
                                   // nextLine은 한 행을 읽어서 문자로 변환
int num = Integer.parseInt(input); // 문자열(input)을 숫자(num)로 변환

   

     

<실습>

import java.util.*;

public class Ch2_14_Scanner {
	public static void main(String[] args) {
		
		Scanner sc = new Scanner(System.in);
		int num = sc.nextInt();
		int num2 = sc.nextInt();
		int num3 = sc.nextInt();
		System.out.println(num);
		System.out.println(num2);
		System.out.println(num3); // 가로로 공백한칸 띄우고 입력가능
// 입력값 100 200 300
// 결과값
// 100
// 200
// 300

Integer.parseInt()

nextLine() : 라인 단위로 값 입력받기 가능

 

728x90
반응형
728x90

 

오늘 코딩으로 

다량의 주문이나 DB관리 때 런파일에서 간단하게 수치만 바꿔서 관리할 수 있는 아주 편리한 기능을 배웠다!!

 

실행 클래스

public class Run {
	public static void main(String[] args) {	
		Book b1 = new Book();
//		b1.inform();
				
		Book b2 = new Book("책1","출판사1","저자1");
//		b2.inform();
				
		Book b3 = new Book("책2","출판사2","저자2",10000,0.3);
		b3.inform();
				
	}

}

 

 

기능 클래스

public class Book {
	
	private String title;
	private String publisher;
	private String author;
	private int price;
	private double discountRate;
	
	// 기본 생성자
	public Book() {
				
	}
	
	// 매개변수 3개인 생성자
	public Book(String title, String publisher, String author) {
		this.title = title;			// 값넣기까지 초기화 // 값을 대입시키는게 초기화
		this.publisher = publisher;
		this.author = author;
	}
	
	// 매개변수 5개인 생성자
	public Book(String title, String publisher, String author, 
				int price, double discountRate) {
		this.title = title;
		this.publisher = publisher;
		this.author = author;
//		this(title,publisher,author); 	// this() 생성자
		this.price = price;
		this.discountRate = discountRate;
		
	}
	
	public void inform() {
		System.out.printf(" title : %s%n publisher : %s%n author : %s%n price : %d%n 할인율 : %f",title,publisher,author,price,discountRate);
	}
	
}

 

728x90
반응형
728x90

 

println()

printf()

두가지로 추가 연습

 

728x90
반응형

+ Recent posts