Java09

ONLY·2022년 11월 3일
0

Java_질의응답

목록 보기
9/14

1. 문제01

다음 멤버를 가지고 직사각형을 표현하는 Rectangle 클래스를 작성하라.

- int 타입의 x, y, width, height 필드
 : 사각형을 구성하는 점과 크기 정보
- x, y, width, height 값을 매개변수로 받아 
필드를 초기화하는 생성자
- int square() : 사각형 넓이 리턴
- void show() : 사각형의 좌표와 넓이를 화면에 출력
- boolean contatins(Rectangle r) 
 : 매개변수로 받은 r이 현 사각형 안에 있으면 true 리턴
- main() 메소드의 코드와 실행 결과는 다음과 같다
public static void main(String[] args) {
Rectangle r = new Rectangle(2, 2, 8, 7);
Rectangle s = new Rectangle(5, 5, 6, 6);
Rectangle t = new Rectangle(1, 1, 10, 10);
r.show();
System.out.println("s의 면적은 "+s.square());
if(t.contains(r)) System.out.println("t는 r을 포함합니다.");
if(t.contains(s)) System.out.println("t는 s를 포함합니다.");
}
출력
========================
(2,2)에서 크기가 8x7인 사각형
s의 면적은 36
t는 r을 포함합니다.

2. 스트링 객체를 생성하는 2가지 방법

(1) new 연산자로 생성
(2) String 클래스에 직접 생성

3. String 객체가 immutable 인 이유

상수이기 때문에

4. 문제02

사용자로부터 받은 문자열(영문으로)에서 자음과 모음 개수를 계산하는 프로그램을 작성하라.

힌트:String 객체의 charAt 함수를 활용
===
입력:abcd
출력:
총글자수는 4개
자음:3 개
모음:1 개
public class Moeum {

	public static void main(String[] args) {
		
		Scanner scanner = new Scanner(System.in);
		String myAnswer = scanner.next();
		int j = 0;
		int m = 0;
		for (int i = 0; i < myAnswer.length(); i++) {
			if (myAnswer.charAt(i) == 'a' || myAnswer.charAt(i) == 'e' || myAnswer.charAt(i) == 'i' || myAnswer.charAt(i) == 'o' || myAnswer.charAt(i) == 'u')
				{m++;
				} else {
					j++;
				}
		}
		System.out.println("총글자수는 " + myAnswer.length() +"개");
		System.out.println("자음 : " + j +"개");
		System.out.println("모음 : " + m +"개");
	}
}

5. 문제03

사용자에게 받은 문자열을 역순으로 화면에 출력하는 프로그램을 작성하시오.

힌트:String 객체의 charAt 함수를 활용
입력:abcde
출력:edcba
import java.util.Scanner;

public class Reverse {

	public static void main(String[] args) {
		
		Scanner alphabet = new Scanner(System.in);
		String str = alphabet.next();
		
		String j  = "";
		for (int i = str.length()-1; i >= 0; i--) {
			j+=str.charAt(i);
		}
		System.out.println(j);
	}

}

6. String 클래스에서의 concat 메서드

  • 문자열을 연결시키는 메소드
  • "문자열1" + "문자열2" 연결의 경우, "문자열1".concat("문자열2")와 같은 방법으로 연결
  • String으로 생성되는 객체는 immutable이기 때문에 concat() 메소드를 사용해 Stirng 클래스를 붙이면 그때마다 계속 새로운 객체를 생성한다.
  • concat() 메소드는 계속 이어서 호출 가능

7. str.substring(2, 4); substring 사용법

String str = "abcdefg";

str.substring(2);        
//인덱스 2 부터 끝까지. 문자열 "cdefg" 반환
str.substring(2, 4);     
//인덱스 2 ~ 3에 위치한 내용의 문자열 "cd" 반환

//함수 오버로딩 적용됨
//index는 0부터 셈

8. String.valueOf

기본 자료형(모든 타입을)의 값을 문자열로 바꿀 때 사용하는 메소드

9. st1.compareTo(st2);compareTo 사용법

문자열의 내용을 비교해서 사전 상에서 앞에 있는지 뒤에 있는지 알려 줌

()
int cmp;       //리턴값은 정수 int
cmp = st1.compareTo(st2);**

cmp == 0 → 같은 문자열이다.
cmp < 0 → st1이 앞에 나온다.
cmp > 0 → st1이 뒤에 나온다.

10. 문제04

아래의 연산과정에서 호출되는 함수(원리)를 써서 표현해 보세요.

String str = "age: " + 17;

17이 문자열로 변경되어 합쳐진다.

11. StringBuilder 와 String

String은 immutable
StringBuilder와 StringBuffer는 mutable

String은 immutable이기 기존의 메모리를 두고 계속 새로운 객체를 생성한다.

StringBuilder나 StringBuffer에 비해 시간도 오래 걸리고, 메모리공간도 많이 사용하게 되는 단점이 있다.

반면에 StringBilder 와 StirngBuffer는 mutable이라서 최초 한번만 객체를 생성하고 거기에 + ( append() )를 할 경우 같은 주소(가리키고 있는)의 메모리 공간 안에서 객체 크기를 증가 시키며 두 문자열을 더해준다. ([최적화])

0개의 댓글