3. Student 클래스를 작성하되, Object의 equals() 와 hashCode()를 오버라이딩해서 Student의 학번(studentNum)이 같으면 동등 객체가 될 수 있도록 하시오. hashCode()의 리턴값은 studentNum 필드값의 해시코드를 리턴하도록 하시오.
[Student.java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
|
public class Student {
private String studentNum;
public Student(String studentNum) {
this.studentNum = studentNum;
}
public String getStudentNum() {
return studentNum;
}
@Override
public boolean equals(Object o) {
if (o instanceof Student) {
Student student = (Student) o;
if (studentNum.equals(student.studentNum)) {
return true;
}
}
return false;
}
@Override
public int hashCode() {
return studentNum.hashCode();
}
}
|
cs |
[StudentExample.java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
|
import java.util.HashMap;
public class StudentExample {
public static void main(String[] args) {
//Student 키로 총점을 저장하는 HashMap 객체 생성
HashMap<Student, String> hashMap = new HashMap<Student, String>();
//new Student("1")의 점수 95 저장
hashMap.put(new Student("1"), "95");
//new Student("1")로 점수를 읽어옴
String score = hashMap.get(new Student("1"));
System.out.println("1번 학생의 총점 : "+score);
}
}
|
cs |
4. Member 클래스를 작성하되, Object의 toString() 메소드를 오버라이딩해서 MemberExample 클래스의 실행 결과처럼 나오도록 작성하자.
[Member.java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
public class Member {
private String id;
private String name;
public Member(String id, String name) {
this.id = id;
this.name = name;
}
@Override
public String toString() {
return id + " : " + name;
}
}
|
cs |
[MemberExample.java]
1
2
3
4
5
6
7
8
|
public class MemberExample {
public static void main(String[] args) {
Member member = new Member("blue", "이파란");
System.out.println(member);
}
}
|
cs |
5. Class 객체에 대한 설명 중 틀린 것은 무엇인가?
1) Class.forName() 메소드 또는 객체의 getClass() 메소드로 얻을 수 있다.
2) 클래스의 생성자, 필드, 메소드에 대한 정보를 알아낼 수 있다.
3) newInstance() 메소드는 기본 생성자를 이용해서 객체를 생성시킨다.
4) newInstance()의 리턴 타입은 생성된 객체의 클래스 타입이다.
newInstance() 메소드의 리턴타입은 Object이므로 원래 클래스 타입으로 변환해야만 메소드를 사용할 수 있다.
6. 다음에 주어진 바이트 배열을 문자열로 변환시켜보자.
{73, 32, 108, 111, 118, 101, 32, 121, 111, 117};
1
2
3
4
5
6
7
8
|
public class BytesToStringExample {
public static void main(String[] args) {
byte[] bytes = {73, 32, 108, 111, 118, 101, 32, 121, 111, 117};
String str = new String(bytes);
System.out.println(str);
}
}
|
cs |
결과
7. 다음 문자열에서 "자바" 문자열이 포함되어 있는지 확인하고, "자바"를 Java로 대치한 새로운
문자열을 만들어보자.
"모든 프로그램은 자바 언어로 개발될 수 있다."
[FindAndReplaceExample.java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class FindAndReplaceExample {
public static void main(String[] args) {
String str = "모든 프로그램은 자바 언어로 개발될 수 있다.";
int index = str.indexOf("자바");
if (index == -1) {
System.out.println("자바 문자열이 포함되어 있지 않습니다.");
} else {
System.out.println("자바 문자열이 포함되어 있습니다.");
str = str.replace("자바", "Java");
System.out.println("-->" + str);
}
}
}
|
cs |
결과
8. 다음 문자열에서 쉼표(,)로 구분되어 있는 문자열을 String의 split() 또는 StringTokenizer를 이용해서 분리해보자.
아이디, 이름, 패스워드
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
|
import java.util.StringTokenizer;
public class SplitExample {
public static void main(String[] args) {
String str = "아이디,이름,패스워드";
//방법1 (split() 메소드 사용)
String[] str1 = str.split(",");
for (int i = 0 ; i < str1.length; i++) {
System.out.println(str1[i]);
}
System.out.println();
//방법2 StringTokenizer 사용
StringTokenizer st = new StringTokenizer(str);
while (st.hasMoreTokens()) {
System.out.println(st.nextToken(","));
}
}
}
|
cs |
9. 다음 코드는 1부터 100까지의 숫자를 통 문자열로 만들기 위해서 += 연산자를 이용해서 100번 반복하고 있다. 이것은 곧 100개 이상의 String 객체를 생성하는 결과를 반들기 때문에 좋은 코드라고 볼 수 없다. StringBuilder를 사용해서 좀 더 효율적인 코드로 개선시켜 보자.
[StringBuilderExample.java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
|
public class StringBuilderExample {
public static void main(String[] args) {
String str = "";
for (int i = 0 ; i <= 100; i++) {
str += i;
}
System.out.println(str);
// 개선 코드 작성 위치
StringBuilder sb = new StringBuilder();
for (int i = 0 ; i <= 100; i++) {
sb.append(i);
}
System.out.println(sb);
}
}
|
cs |
10. 첫 번째는 알파벳으로 시작하고 두 번째부터 숫자와 알파벳으로 구성된 8자~12자 사이의 ID값인지 검사하고 싶다. 알파벳은 대소문자를 모두 허용할 경우에 정규 표현식을 이용해서 검증하는 코드를 작성해보자.
[PatternMatcherExample.java]
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
import java.util.regex.Pattern;
public class PatternMatcherExample {
public static void main(String[] args) {
String id = "5Angel1004";
String regExp = "[a-zA-Z][a-zA-Z0-9]{7,11}";
boolean isMatch = Pattern.matches(regExp, id);
if (isMatch) {
System.out.println("ID로 사용할 수 있습니다.");
} else {
System.out.println("ID로 사용할 수 없다.");
}
}
}
|
cs |
11. 숫자 100과 300으로 각각 박싱된 Integer 객체를 == 연산자로 비교하였다. 100을 박싱한 Integer 객체는 true가 나오는데, 300을 박싱한 Integer 객체는 false가 나오는 이유를 설명하시오.
1
2
3
4
5
6
7
8
9
10
11
12
|
public class IntegerCompareExample {
public static void main(String[] args) {
Integer obj1 = 100;
Integer obj2 = 100;
Integer obj3 = 300;
Integer obj4 = 300;
System.out.println( obj1 == obj2);
System.out.println( obj3 == obj4);
}
}
|
cs |
이유 : int값이 -128 ~ 127 사이라면 내부의 값을 비교 가능하지만 범위를 벗어나면 객체의 번지를 비교하기 때문이다.
12. 문자열 "200"을 정수로 변환하는 코드와 숫자 150을 문자열로 변환하는 코드를 작성해보자.
1
2
3
4
5
6
7
8
9
10
|
public class StringConvertExample {
public static void main(String[] args) {
String strData1 = "200";
int intData1 = Integer.parseInt(strData1);
int intData2 = 150;
String strData2 = Integer.toString(150);
}
}
|
cs |
13. SimpleDateFormat 클래스를 이용해서 오늘의 날짜를 다음과 같이 출력하는 코드를 작성해보자.
2024년 05월 08일 화요일 10시 30분
1
2
3
4
5
6
7
8
9
10
11
12
|
import java.text.SimpleDateFormat;
import java.util.Date;
public class DatePrintExample {
public static void main(String[] args) {
Date now = new Date();
System.out.println(now);
SimpleDateFormat sdf = new SimpleDateFormat("YYYY년 MM월 DD일 E요일 k시 m분");
System.out.println(sdf.format(now));
}
}
|
cs |
'IT > 연습문제' 카테고리의 다른 글
이것이 자바다 13장 연습문제 : 제네릭 (0) | 2020.09.21 |
---|---|
이것이 자바다 12장 연습문제 : 멀티 스레드 (0) | 2020.09.20 |
자바 연습문제 : 예외처리(try~catch) (0) | 2020.09.12 |
자바 연습문제 : 인터페이스와 구현 클래스 작성 (0) | 2020.09.09 |
자바 연습문제 : Up&Down 게임 (0) | 2020.09.08 |