Java - Switch, 다중for문, Break문, 반복문복합, Singleton, Prototype패턴, 인터페이스, String, StringBuffer
| Java 2019. 7. 11. 18:56
package Week01;
import java.util.Scanner;
//실습1]
class Father{ // 겟,셋메소드 -> 속성을 private으로 하기때문.
String name;
int age;
String job;
public Father(String name, int age, String job){ //생성자에서 초기화를 해야함.(정답은 없음)
this.name = name;
this.age = age;
this.job = job;
}
void goToWork(int time) {
System.out.println("직업이 " + job + "인 " + age + "세 " + name + "님이 " + time + "시에 출근하다.");
}
void goOffWork(int time) {
System.out.println("직업이 " + job + "인 " + age + "세 " + name + "님이 " + time + "시에 퇴근하다.");
}
}
//실습2]
class Member{
String name; //최상위 클래스에 변수선언해야 자식클래스에서 상속받고 , 재사용 및, 다시 선언안하게됨.
Member(String name) { //속성이 있으므로 무조건 생성자를 만든다.
this.name = name;
}
String getName() { //name은 부모에 있으므로 안써도 됨.
return name;
}
void setName(String name) {
this.name = name;
}
}
class SpecialMember extends Member{
public SpecialMember(String name) {
super(name);
}
}
//실습3]
class Parent {
String name;
int age;
Hobby h;
public void setAge(int age) {
this.age = age;
}
public void setHobby(Hobby h) {
this.h = h;
}
public String toString() {
return h.setHobby();
}
public boolean equals(Object obj) {
if (obj != null && obj instanceof Child) {
return name == ((Child) obj).name;
} else
return false;
}
}
public class Child extends Parent {
Child(String name) {
this.name = name;
}
}
public class 실습3일차 {
public static void main(String[] args) {
/*•실습1: Father에 대한 클래스
- 속성:(String)name, (int)age, (String)job
- 메소드:
void goToWork(int time): ‘출근하다’ 출력
void goOffWork(int time): ‘퇴근하다’ 출력
위 클래스를 사용하여 출근하다, 퇴근하다를 출력해 보기
*/
Father ft = new Father("홍길동", 35, "개발자");
ft.goToWork(9);
ft.goOffWork(18);
/*
•실습2: 다음 클래스 설계
SpecialMember, Member
SpecialMember m = new SpecialMember(“홍길동”);
Member s = m;
s.getName(); // 홍길동
*/
SpecialMember sm = new SpecialMember("홍길동"); //"홍길동"을 인자로 받는다.
Member s = sm; //SpecialMember는 Member를 상속받는다.
System.out.println(s.getName()); // 홍길동
/*
•실습3: 다음을 만족하는 클래스를 작성
Parent, Child, Hobby, Tennis, Piano
Child c = new Child(“홍길동”);
Parent p = c; //상속관계
c.setAge(30); //child로 놓을지, parent로 놓을지는 선택의 문제.
Tennis t = new Tennis();
Hobby b = t; //hobby가 tennis의 부모. 잘알면 실체화시킬수있는 클래스로 만든다. 잘모르면 추상클래스로 만든다.
c.setHobby(t); //parent는 테니스 hobby를 t로 받고있음.
Piano p = new Piano();
Hobby b2 = p;
c.setHobby(p);
Child c2 = new Child(“홍길동”);
System.out.println(c); // 피아노
System.out.println(c.equals(c2));// true
*/
Child c = new Child("홍길동");
Parent p = c;
c.setAge(30);
Tennis t = new Tennis();
Hobby b = t;
c.setHobby(t);
System.out.println(c);
Piano p2 = new Piano();
Hobby b2 = p2;
c.setHobby(p2);
Child c2 = new Child("홍길동");
System.out.println(c); // 피아노
System.out.println(c.equals(c2));// true
}
}
-----------------------------------------------------------------------------
package Week01;
import java.util.*;
public class Switch예제 {
public static void main(String[] args) {
char gender;
String regNo = "";
System.out.println("당신의 주민번호를 입력하세요.ex)011231-1111222");
Scanner sc = new Scanner(System.in);
regNo = sc.nextLine();
gender = regNo.charAt(7); //입력받은 번호의 8번째 문자를 gender에 저장. 인덱스처리는 0번째부터 시작함.
switch(gender) {
case '1':
case '3':
switch(gender) {
case'1':
System.out.println("당신은 2000년 이전에 출생한 남자입니다.");
break; //break는 {}속해있는 블록을 탈출하는 거임.
case'3':
System.out.println("당신은 2000년 이후에 출생한 남자입니다.");
}
break; //이 break문을 빼먹지 않도록 주의
case '2':
case '4':
switch(gender) {
case'2':
System.out.println("당신은 2000년 이전에 출생한 여자입니다.");
break;
case'4':
System.out.println("당신은 2000년 이후에 출생한 여자입니다.");
break;
}
break; //이 break문을 빼먹지 않도록 주의
default: //만족하는 case가 없는경우 default 출력.
System.out.println("유효하지 않는 주민등록번호입니다.");
}
} // main의 끝
}
--------------------------------------------------------------------------
package Week01;
public class 다중For문 {
public static void main(String[] args) {
for(int i = 1; i<=5; i++) { //이 안에서 int 선언해주는 것이 좋음. 밖에서 선언할경우 에러날수도 있다. {}블록범위를 잘 파악해라.
for(int j = 1; j<=10; j++) {
System.out.print("*");
}
System.out.println();
}
}//main의 끝
}
--------------------------------------------------------------------------
package Week01;
public class Break문예제 {
public static void main(String[] args) {
int sum = 0;
int i = 0;
while(true) {
if(sum>100) //실무시 break if 조건 바로 오른쪽에. 블록반드시 쓸것.
break;
++i;
sum+=i;
}// end of while
System.out.println("i=" + i); //14
System.out.println("sum=" + sum); //105
}
}
--------------------------------------------------------------------------
package Week01;
import java.util.Scanner;
public class 반복문복합예제 {
public static void main(String[] args) {
int menu = 0;
int num = 0;
Scanner sc = new Scanner(System.in);
outer: //반복문에 이름부여. 잘안쓰임. 많이쓰면 추적하기 어려워짐.
while(true) {
System.out.println("(1)sqaure");
System.out.println("(2)sqaure root");
System.out.println("(3)log");
System.out.print("원하는 메뉴(1~3)를 선택하세요.(종료:0)");
String tmp = sc.nextLine(); //화면에서 입력받은 내용을 tmp에 저장
menu = Integer.parseInt(tmp);
if(menu==0) {
System.out.println("프로그램을 종료합니다.");
break;
} else if (!(1<=menu && menu <=3)){ //! : boolean 반대로
System.out.println("메뉴를 잘못 선택하셨습니다. (종료는 0)");
continue;
}
for(;;) {
System.out.println("계산할 값을 입력하세요(계산종료0, 전체종료99)");
tmp = sc.nextLine(); //화면에서 입력받은 내용을 tmp에 저장
num = Integer.parseInt(tmp); //입력받은 문자열(tmp)을 숫자로 변환
if(num==0)
break; //계산종료, for문을 벗어난다
if(num==99)
break outer; //전체종료, for문과 while문을 모두 벗어난다. break할 대상을 지정함.
switch(menu) {
case 1:
System.out.println("result =" + num*num);
break;
case 2:
System.out.println("result =" + Math.sqrt(num));
break;
case 3:
System.out.println("result =" + Math.log(num));
break;
}
} //for(;;)
} //while의 끝
} // main의 끝
}
--------------------------------------------------------------------------
package Week01;
public class Singleton { //싱글톤 -> 많이 쓰임. 힙에 자신의 인스턴스는 1개만 존재하도록 해놓은 규칙.
private Singleton() {}
private static Singleton instance = null;
public static synchronized Singleton getInstance() { //
if(instance == null) {
instance = new Singleton(); //단 하나의 스레드만 들어와서 실행할 수 있음.
}
return instance;
}
}
--------------------------------------------------------------------------
package Week01;
import java.util.ArrayList;
import java.util.List;
//인스턴스에 대한 카피본을 만드는 소스
public class Prototype패턴 implements Cloneable {
private List<String> userList; //userList :자바에서 제공하는 라이브러리
public Prototype패턴() {
userList = new ArrayList();
}
public Prototype패턴(List list) {
this.userList = list;
}
public void loadData() {
userList.add("1");
userList.add("2");
userList.add("3");
userList.add("4");
}
public void print() {
System.out.println(userList);
}
public List<String> getUserList(){
return userList;
}
public Object clone() throws CloneNotSupportedException{
List<String> temp = new ArrayList();
for(String s : this.getUserList()) {
temp.add(s);
}
return new Prototype패턴(temp);
}
public static void main(String[] args) throws Exception{
Prototype패턴 orginUsers = new Prototype패턴();
orginUsers.loadData();
Prototype패턴 cloneUsers = (Prototype패턴)orginUsers.clone();
cloneUsers.print();
}
}
--------------------------------------------------------------------------
package Week01;
interface A3{
int x = 100;
public static class B3{
private int y;
public B3() {
this.y = 200;
}
public void disp() {
System.out.println("x = " + x); //A.x
System.out.println("y = " + y); //this.y
}
}
}
public class Interface01예제 {
public static void main(String[] args) {
A3.B3 bp = new A3.B3();
bp.disp(); // x = 100, y = 200 출력
}
}
--------------------------------------------------------------------------
package Week01;
interface MyInterface {
default void method1() {
System.out.println("method1() in MyInterface");
}
default void method2() {
System.out.println("method2() in MyInterface");
}
static void staticMethod() {
System.out.println("staticMethod() in MyInterface"); // 인터페이스.메소드명으로 호출 static이므로 출력
}
}
interface MyInterface2{
default void method1() {
System.out.println("method1() in MyInterface2");
}
static void staticMethod() {
System.out.println("staticMethod() in MyInterface2"); // 인터페이스.메소드명으로 호출 static이므로 출력
}
}
public class Interface02예제 {
public static void main(String[] args) {
Child c = new Child();
c.method1(); // method1() in Child 출력
c.method2(); // method2() in Parent 출력
MyInterface.staticMethod(); // staticMethod() in MyInterface 출력
MyInterface2.staticMethod(); // staticMethod() in MyInterface2 출력
}
}
class Child extends Parent implements MyInterface, MyInterface2{
public void method1() {
System.out.println("method1() in Child"); //오버라이딩
}
}
class Parent{
public void method2() {
System.out.println("method2() in Parent");
}
}
--------------------------------------------------------------------------
package Week01;
import java.util.Arrays;
public class StringTest {
public static void main(String[] args) {
//여기있는 메소드를 잘 활용해라. 메소드 만드는데 시간허비하지 말것.
//1.String(char[] value) 메소드
char[] c = {'H', 'e', 'l', 'l', 'o'};
String s = new String(c);
System.out.println(s); //Hello 출력
//2.String(StringBuffer buf) 메소드 : 루프안에서는 스프링버퍼를 써야함.
StringBuffer sb = new StringBuffer("Hello");
String s2 = new String(sb);
System.out.println(s2); //Hello 출력
//3. char charAt(int index) 메소드
String s3 = "Hello";
char c2 = s3.charAt(1); //index가 0부터 시작.
System.out.println(c2); // e출력
//4. int compareTo(String str) : 사전순으로 비교 -1/0/1 -> 습관적으로 1,2개씩 바꿔가면서 해보는게 나중에 큰차이!!!(오류잡는 방법)★★★
int l = "aaa".compareTo("aaa");
int m = "aaa".compareTo("aaa1");
int n = "aaa".compareTo("aa");
System.out.println(l); // 0출력
System.out.println(m); // -1출력
System.out.println(n); // 1출력
//5. String concat(String str) : 문자열 덧붙임
String s4 = "Hello";
String s5 = s4.concat(" World");
System.out.println(s5); // Hello World 출력
//6. boolean contains(CharSequence s) : 지정된 문자열이 포함되었는지 검사
String s6 = "abcdefg";
boolean b = s6.contains("bc");
System.out.println(b); // true
//7. boolean endsWith(String suffix) : 지정된 문자열로 끝나는지 검사
String file = "Hello.txt";
boolean b2 = file.endsWith("txt");
System.out.println(b2); //true
//8. int indexOf(int ch) : 문자(ch)가 존재하는 위치(0부터 시작). 많이쓰임★★★
String s7 = "Hello";
int idx1 = s7.indexOf('o');
System.out.println(idx1); //4 출력
//9. int indexOf(int ch, int pos) : 문자(ch)가 존재하는 위치를 pos부터 확인하여 index를 알려줌
String s8 = "Hello";
int idx2 = s8.indexOf('e',0); //1
int idx3 = s8.indexOf('e',2); //-1 (e가 기준점 l로부터 왼쪽 첫번째에 있으므로 -1임)
System.out.println(idx2);
System.out.println(idx3);
//10. int indexOf(String str) : 문자열이 존재하는 위치
String s9 = "ABCDEFG";
int idx4 = s9.indexOf("CD");
System.out.println(idx4); //2 출력
//11. int lastIndexOf(int ch) : 문자를 오른쪽 끝에서 찾아서 위치리턴
String s10 = "java.lang.Object";
int idx5 = s10.lastIndexOf('.');
System.out.println(idx5); //9출력. index 순서는 왼쪽부터
//12. String replace(char old, char nw) : old문자를 nw로 변경. 많이쓰임★★★
String s11 = "Hello";
String s12 = s11.replace('H', 'C');
System.out.println(s11); //Hello
System.out.println(s12); //Cello
//13. String replaceAll(Sting regex, String nw) : 전체변경
String sb2 = "AABBAABB";
String r = sb2.replaceAll("BB", "bb");
System.out.println(r); //AAbbAAbb
//14. String replaceFirst(String regex, String nw) : 일치하는 것중 첫번째 것만 변경
String sb3 = "AABBAABB";
String r2 = sb3.replaceFirst("BB", "bb");
System.out.println(r2); //AAbbAABB
//15. String[] split(String regex) : 분리자로 나누어 배열을 반환. 많이쓰임★★★
String animals = "dog,cat/bear";
String[] arr = animals.split(",|/"); //cf. | 멀티지정 구분자.
System.out.println(arr[2]); // bear
//16. String[] split(String argex, int limit) : 분리하되 문자열을 limit 수만큼 자른다.
String animals2 = "dog, cat, bear";
String[] arr2 = animals.split(",", 2); //arr[0] : dog, arr[1] : cat, bear
//17. boolean startWith(String prefix) : 주어진 문자열로 시작하는지 검사
String s13 = "java.lang.Object";
boolean b3 = s13.startsWith("java");
System.out.println(b3);//true
//18. String trim() : 문자열의 왼쪽, 오른쪽 끝에 있는 공백을 없앤 결과를 반환. 많이쓰임★★★. R trim, L trim
String s14 = " Hello World ";
String s15 = s14.trim();
System.out.println(s15); //Hello World
//19. static String valueOf(boolean b);
// boolean대신 -> char/int/long/float/double/Object 값들이 올수있고 : 지정된 값을 문자열로 반환
String b4 = String.valueOf(123456);
System.out.println(b4); //true
//20. static String join(CharSequence arg(), CharSequence... arg1). 많이쓰임★★★. 한줄로 만들어서 보냄.
String[] arr3 = {"A", "B", "C"};
String s16 = String.join("-", arr3);
System.out.println(s16); //A-B-C
}
}
--------------------------------------------------------------------------
package Week01;
public class StringBufferTest {
public static void main(String[] args) {
// StringBufferTest
//1. StringBuffer(String str)
StringBuffer sb = new StringBuffer("H1");
System.out.println(sb); //H1
//2. StringBufer append(boolean b)
//기본자료형 / char[]/ Object /String 문자열 뒤에 붙이기
StringBuffer sb2 = new StringBuffer("abc");
System.out.println(sb2.append("abc")); //abcabc
//3. char charAt(int index)
StringBuffer sb3 = new StringBuffer("abc");
char c = sb3.charAt(2);
System.out.println(c); //c
//4. StringBuffer delete(int start, int end)
//start ~ end 사이의 문자를 제거
StringBuffer sb4 = new StringBuffer("0123456");
StringBuffer c2 = sb4.delete(0, 5); // 56 (0번째에서 5번째까지 삭제)
System.out.println(c2);
//5. StringBuffer deleteCharAt(int index)
//지정된 위치의 문자 제거
StringBuffer sb5 = new StringBuffer("0123456");
StringBuffer c3 = sb5.deleteCharAt(3); //3번째 문자 제거
System.out.println(c3); // 012456
//6. StringBuffer insert(int pos, boolean b)
// boolean대신 -> char/char[]/int/long/float/double/Object/String 값들이 올수있고 : 지정된 값을 문자열로 변환하여 pos에 추가
StringBuffer sb6 = new StringBuffer("0123456");
System.out.println(sb6.insert(4, ',')); // 0123,456
//7. StringBuffer replace(int start, int end, String str)
//지정된 범위의 문자열을 주어진 문자열로 바꾼다.
StringBuffer sb7 = new StringBuffer("0123456");
System.out.println(sb7.replace(3, 6, "AB")); //012AB6
//8. StringBuffer reverse()
// 문자열 순서를 거꾸로
StringBuffer sb8 = new StringBuffer("0123456");
System.out.println(sb8.reverse()); //6543210
//9. String substring(int start)
// String substring(int start, int end) // 범위에 해당하는 값 출력.
StringBuffer sb9 = new StringBuffer("0123456");
String str = sb9.substring(3);
System.out.println(str); //3456
String str2 = sb9.substring(3,5);
System.out.println(str2); //34
}
}
'Java' 카테고리의 다른 글
Java - 자료구조(Collection), Random, Wrapper (0) | 2019.07.15 |
---|---|
Java - 다형성, 상속, 예외 (0) | 2019.07.12 |
Java - 다형성, equals, 정렬로직, 인터페이스, template 패턴 (0) | 2019.07.10 |
Java - 일반화, 추상화, 클래스(생성자, this, super, 접근제한자, static, final), is a/has a, 상속, object class, 연산자, state 패턴, 클래스 다이어그램, 재귀함수 (0) | 2019.07.09 |
기본 알고리즘 (0) | 2019.07.08 |