[계산] class Rectangle7 { private int x; private int x1; private int y; private int y1; Rectangle7(int x, int y, int x1, int y1) { this.x = x; this.y = y; this.x1 = x1; this.y1 = y1; } int square() { return x1 * y1; } void show() { System.out.println("(" + x + "," + y + ")에서 크기가 " + x1 + "x" + y1 + "인 사각형"); } boolean contains(Rectangle7 r) { if (this.x <= r.x && this.y <= r.y) { if ((this.x + this.x1) >= (r.x + r.x1) && (this.y + this.y1) >= (r.y + r.y1)) { return true; } } return false; } } public class Test29 { public static void main(String[] args) { Rectangle7 r = new Rectangle7(2, 2, 8, 7); Rectangle7 s = new Rectangle7(5, 5, 6, 6); Rectangle7 t = new Rectangle7(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을 포함합니다. t는 s를 포함합니다.
String str = "abcdefg";
str.substring(2);
>> 인덱스2 이후의 내용으로 이뤄진 문자열 "cdefg" 반환
(2, 4) > 시작 : 0,1,2(start index)
마지막 : 4-1 = 3 (end index를 뜻함.)
compareTo :
[계산] public class SubString { public static void main(String[] args) { String str = "abcdefg"; System.out.println(str.substring(2)); // 인덱스2 이후의 내용으로 이뤄진 문자열 "cdefg" 반환 System.out.println(str.substring(2, 4)); // 인덱스 2~3에 위치한 내용의 문자열 반환 } }
[결과값] cdefg cd
[계산] public class Equals { public static void main(String[] args) { String st1 = "Lexicographically"; String st2 = "lexicographically"; int cmp; if (st1.equals(st2)) System.out.println("두 문자열은 같습니다."); else System.out.println("두 문자열은 다릅니다."); cmp = st1.compareTo(st2); // L : 10쪽 | l : 11쪽 | 10쪽-11쪽=-1이므로 사전 앞에 위치하는 문자 st1을 출력하게 된다. // 대문자가 더 앞에 있다! if (cmp == 0) System.out.println("두 문자열은 일치합니다."); else if (cmp < 0) System.out.println("사전의 앞에 위치하는 문자: " + st1); else System.out.println("사전의 앞에 위치하는 문자: " + st2); if (st1.compareToIgnoreCase(st2) == 0) // 대소문자를 무시하고 비교하라. System.out.println("두 문자열은 같습니다."); else System.out.println("두 문자열은 다릅니다."); } }
[결과값] 두 문자열은 다릅니다. 사전의 앞에 위치하는 문자: Lexicographically 두 문자열은 같습니다.
double e = 2.718281;
String se = String valueOf(e);
결과 : 문자열로 바뀜 "2.718281" > 해당 아스키 코드 값에 대한 폰트를 뿌림
.concat : 두 개의 문자열을 하나의 문자열로 만들어주는 함수
but 연결할 내용의 데이터 타입이 서로 다를 경우 둘 중 하나의 데이터 타입으로 컴파일러에 의해 자동 변형됨.
String str = "age: " + 17;
↓
String str = "age: ".concat(String.valueOf(17));
System.out.println("funny"+ "camp"); // 컴파일러에 의한 자동 변환
System.out.println("funny".concat("camp"));
String str = "funny";
str += "camp"; // str = str + "camp"
str=str.concat("camp")
StringBuilder 와 String의 차이
String str = "123";
값이 추가될 때마다 메모리 생성(불변)
StringBuilder sb = "123";
첫번째 메모리에 값을 그대로 덮어서 입력함(가변)
메모리가 훨씬 절약된다.
append() : 문자열 덧붙이기
delete() : 문자열 일부 삭제
replace() : 문자열 일부 교체
reverse : 문자열 내용 뒤집기
substring() : 일부만 문자열로 반환
[계산] public class StringBuilderEx { public static void main(String[] args) { // 문자열"123"이 저장된 인스턴스의 생성 StringBuilder stbuf = new StringBuilder("123"); stbuf.append(45678); // 문자열 덧붙이기 System.out.println(stbuf.toString()); stbuf.delete(0, 2); // 문자열 일부 삭제 // 0번째 지우고, 0,1번째 지움 System.out.println(stbuf.toString()); stbuf.replace(0, 3, "AB"); // 문자열 일부 교체 System.out.println(stbuf.toString()); stbuf.reverse(); // 문자열 내용 뒤집기 System.out.println(stbuf.toString()); String sub = stbuf.substring(2, 4); // 일부만 문자열로 반환 System.out.println(sub); } }
[결과값] 12345678 345678 AB678 876BA 6B
[계산] StringBuilder stbuf = new StringBuilder("0"); for(int i=0; i<=1000;i++) { stbuf.append(i); System.out.println(stbuf);
[결과값] 1000까지 반복
정수 : %d
실수 : %f
문자 : %c
[계산] public class StringBuilderEx { public static void main(String[] args) { System.out.printf("정수는 %d, 실수는 %f, 문자는 %c", 12, 24.5, 'A'); } }
[결과값] 정수는 12, 실수는 24.500000, 문자는 A
입력받는 기능을 가진 클래스
[계산] import java.util.Scanner; public class ScannerEx { public static void main(String[] args) { String source = "10 30 50"; // 공백 기준으로 데이터를 꺼낸다. Scanner sc = new Scanner(source); // Scanner 인스턴스 생성 int num1 = sc.nextInt(); // int형 데이터 추출 int num2 = sc.nextInt(); // int형 데이터 추출 int num3 = sc.nextInt(); // int형 데이터 추출 int sum = num1 + num2 + num3; System.out.println(num1 + " + " + num2 + " + " + num3 + " = " + sum); } } // Scanner 클래스의 인스턴스 생성은 데이터를 뽑아 올 대상과의 연결을 의미한다. // 연결 후에는 데이터 스캔 가능!
[결과값] 10 + 30 + 50 = 90
[계산] import java.util.Scanner; public class ScannerEx { public static void main(String[] args) { String source = "10 30 50"; // 공백 기준으로 데이터를 꺼낸다. Scanner sc = new Scanner(System.in); // 키보드 역할 System.out.print("국어:"); int num1 = sc.nextInt(); // Enter칠 때까지(키보드 입력) while문이 계속 돈다. System.out.print("영어:"); int num2 = sc.nextInt(); // Enter칠 때까지(키보드 입력) while문이 계속 돈다. System.out.print("수학:"); int num3 = sc.nextInt(); // Enter칠 때까지(키보드 입력) while문이 계속 돈다. int sum = num1 + num2 + num3; System.out.println(num1 + " + " + num2 + " + " + num3 + " = " + sum); } } // Scanner 클래스의 인스턴스 생성은 데이터를 뽑아 올 대상과의 연결을 의미한다. // 연결 후에는 데이터 스캔 가능!
[결과값] 국어:90 영어:80 수학:70 90 + 80 + 70 = 240
[계산] public class Test28 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); String eng = sc.nextLine(); for (int i = 0; i < eng.length(); i++) { System.out.print(eng.charAt(eng.length() - i - 1)); } } }
[결과값] next >>직접 입력한 값 txen >>출력한 값
[계산] import java.util.Scanner; class Grade5 { int kor, eng, math; int sum; double avg; char grade; Grade5(int kor, int eng, int math) { this.kor = kor; this.eng = eng; this.math = math; } double avg() { return (kor + eng + math) / 3.0; } int sum() { return kor + eng + math; } char grade() { grade = '가'; if (this.avg() >= 90) { grade = '수'; } else if (this.avg() >= 80) { grade = '우'; } else if (this.avg() >= 70) { grade = '미'; } else if (this.avg() >= 60) { grade = '양'; } else { grade = '가'; } return grade; } } public class Test28 { public static void main(String[] args) { Scanner sc = new Scanner(System.in); System.out.print("kor: "); int str1 = sc.nextInt(); System.out.print("eng: "); int str2 = sc.nextInt(); System.out.print("math: "); int str3 = sc.nextInt(); Grade5 a = new Grade5(str1, str2, str3); System.out.println("총점: " + a.sum()); System.out.println("평균: " + a.avg()); System.out.println("학점은 " + a.grade() + "입니다."); } }
[결과값] kor: 10 eng: 10 math: 10 총점: 30 평균: 10.0 학점은 가입니다.
★가위바위보 놀이★ [계산] import java.util.Scanner; public class RockPaperScissors { public static void main(String[] args) { System.out.println("1:바위, 2:보, 3:가위"); Scanner sc = new Scanner(System.in); System.out.print("선택: "); int player = sc.nextInt(); int com = (int) (Math.random() * 3 + 1); System.out.println(com); if (com == player) { System.out.println("draw"); } else if ((com == 1 && player == 2) || (com == 2 && player == 3) || (com == 3 && player == 1)) { System.out.println("you win"); } else if ((com == 1 && player == 3) || (com == 2 && player == 1) || (com == 3 && player == 2)) { System.out.println("you lose"); } else { System.out.println("오류"); } } }
[결과값] [1:바위, 2:보, 3:가위] >> 출력 값 선택: 3 >> 입력 값 3 >> com 랜덤값 draw >>결과