package com.day08;
import java.util.StringTokenizer;
public class StringTok {
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer("홍길동,장화/홍련/팥쥐/주인공", ",/"); // 앞의 문자를 /와 ,로 구분
System.out.println(st.countTokens()); // 토큰의 수 : 5
int len = st.countTokens();
// 홍길동 장화 홍련 팥쥐 주인공
// for(int i = 0; i < len; i++) { //i=0 i<5까지 돌아감, i=1 i<4, i=2 i<3
// System.out.println("count : " + st.countTokens());
// System.out.println(st.nextToken()); //홍길동 장화 홍련
// } 이렇게 하는 것 보다는 while문 사용하는게 나음
while (st.hasMoreTokens()) {
System.out.println("count : " + st.countTokens());
System.out.println(st.nextToken());
}
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";
//StringTokenizer을 이용해서 16진수, 8진수, 2진수 출력
}
}
2021/01/20 - [공부/자바(java) 융합개발자 2차] - [자바 7일차] 26일차 - 상속, 추상클래스, 추상메서드 , 인터페이스(Do it 공부단 p.234~)
StringTest02.java 다시 보기 + 추가
System.out.println(tmp2.lastIndexOf('d'));//lastIndexOf : 'd'가 마지막으로 나오는 위치 알려줌
29
com.day08
StringTest03.java
package com.day08;
public class StringTest03 {
public static void main(String[] args) {
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";//배열X, 처음부터 끝까지 문자
}
}
//tmp길이 구하기
package com.day08;
public class StringTest03 {
public static void main(String[] args) {
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";//배열X, 처음부터 끝까지 문자
//tmp길이 구하기
System.out.println("tmp 길이 : " + tmp.length());
}
}
tmp 길이 : 32
//tmp 마지막 숫자 구하기
package com.day08;
public class StringTest03 {
public static void main(String[] args) {
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";//배열X, 처음부터 끝까지 문자
//tmp길이 구하기
System.out.println("tmp 길이 : " + tmp.length());
//tmp 마지막 문자(숫자)
System.out.println("tmp 마지막 숫자 : " + tmp.charAt(tmp.length()-1));
}
}
tmp 길이 : 32
tmp 마지막 숫자 : 4
//숫자의 합 구하기
1. 배열의 길이 구하기
package com.day08;
public class StringTest03 {
public static void main(String[] args) {
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";//배열X, 처음부터 끝까지 문자
//tmp길이 구하기
System.out.println("tmp 길이 : " + tmp.length());
//tmp 마지막 문자(숫자)
System.out.println("tmp 마지막 숫자 : " + tmp.charAt(tmp.length()-1));
//숫자의 합 구하기 -> 이걸 하나의 문자라고생각하면 안 되고, 공백으로 나누어 1 0 15 .. 를 각각 더해야 함
String[] arr = tmp.split(" "); //split(구분자) -> 여기서는 공백이 구분자이므로 " " 라고 적어줌 -> 공백으로 구분해 배열에 담는다
System.out.println("arr의 길이 : " + arr.length); //배열의 길이 구하기
}
}
tmp 길이 : 32
tmp 마지막 숫자 : 4
arr의 길이 : 12
2. //마지막 숫자가 있는 위치
package com.day08;
public class StringTest03 {
public static void main(String[] args) {
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";//배열X, 처음부터 끝까지 문자
//tmp길이 구하기
System.out.println("tmp 길이 : " + tmp.length());
//tmp 마지막 문자(숫자)
System.out.println("tmp 마지막 숫자 : " + tmp.charAt(tmp.length()-1));
//숫자의 합 구하기 -> 이걸 하나의 문자라고생각하면 안 되고, 공백으로 나누어 1 0 15 .. 를 각각 더해야 함
String[] arr = tmp.split(" "); //split(구분자) -> 여기서는 공백이 구분자이므로 " " 라고 적어줌 -> 공백으로 구분해 배열에 담는다
System.out.println("arr의 길이 : " + arr.length); //배열의 길이 구하기
//마지막 숫자가 있는 위치
System.out.println("arr의 길이 : " + arr[arr.length-1]);
}
}
tmp 길이 : 32
tmp 마지막 숫자 : 4
arr의 길이 : 12
arr의 길이 : 14
3. 숫자의 합 구하기
숫자를 더해야 하는데.. arr[i] 속 내용은 -> 문자형임
-> 문자 -> 숫자로 바꾸는 작업이 필요
api > java.lang > Classes > Interger >
()안에 문자가 들어가면 return값이 int
- 앞에 static이 붙어 있다 -> 클래스 이름으로 접근해야 한다.
package com.day08;
public class StringTest03 {
public static void main(String[] args) {
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";//배열X, 처음부터 끝까지 문자
//tmp길이 구하기
System.out.println("tmp 길이 : " + tmp.length());
//tmp 마지막 문자(숫자)
System.out.println("tmp 마지막 숫자 : " + tmp.charAt(tmp.length()-1));
//숫자의 합 구하기 -> 이걸 하나의 문자라고생각하면 안 되고, 공백으로 나누어 1 0 15 .. 를 각각 더해야 함
String[] arr = tmp.split(" "); //split(구분자) -> 여기서는 공백이 구분자이므로 " " 라고 적어줌 -> 공백으로 구분해 배열에 담는다
System.out.println("arr의 길이 : " + arr.length); //배열의 길이 구하기
//마지막 숫자가 있는 위치
System.out.println("arr의 길이 : " + arr[arr.length-1]);
//배열에 들어있는 숫자의 합 구하기
int sum = 0;
for(int i = 0; i < arr.length; i++) {
// sum += arr[i];//arr[i]에 저장되어있는 내용 -> 문자 : 문자 -> 숫자로 바꾸는 작업이 필요함
sum += Integer.parseInt(arr[i]);
}
System.out.println("arr에 들어있는 숫자의 합 : " + sum);
}
}
tmp 길이 : 32
tmp 마지막 숫자 : 4
arr의 길이 : 12
arr의 길이 : 14
arr에 들어있는 숫자의 합 : 143
이런 클래스가 있다는 얘기는 : 메서드가 있다는 얘기
-> 클래스 : 메서드를 가지고 있기 때문에 다양한 형태로 바꿀 수 있다.
Interger : 래퍼 클래스
//sum을 16진수로 표현하기
- 숫자 관련 : api에서 찾아보기
package com.day08;
public class StringTest03 {
public static void main(String[] args) {
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";//배열X, 처음부터 끝까지 문자
//tmp길이 구하기
System.out.println("tmp 길이 : " + tmp.length());
//tmp 마지막 문자(숫자)
System.out.println("tmp 마지막 숫자 : " + tmp.charAt(tmp.length()-1));
//숫자의 합 구하기 -> 이걸 하나의 문자라고생각하면 안 되고, 공백으로 나누어 1 0 15 .. 를 각각 더해야 함
String[] arr = tmp.split(" "); //split(구분자) -> 여기서는 공백이 구분자이므로 " " 라고 적어줌 -> 공백으로 구분해 배열에 담는다
System.out.println("arr의 길이 : " + arr.length); //배열의 길이 구하기
//마지막 숫자가 있는 위치
System.out.println("arr의 길이 : " + arr[arr.length-1]);
//배열에 들어있는 숫자의 합 구하기
int sum = 0;
for(int i = 0; i < arr.length; i++) {
// sum += arr[i];//arr[i]에 저장되어있는 내용 -> 문자 : 문자 -> 숫자로 바꾸는 작업이 필요함
sum += Integer.parseInt(arr[i]);
}
System.out.println("arr에 들어있는 숫자의 합 : " + sum);
//sum을 16진수로 표현하기 //8f가 나올 것
System.out.println("sum을 16진수로 표현 : " + Integer.toHexString(sum)); //8f(8*16 + 15*1)
}
}
tmp 길이 : 32
tmp 마지막 숫자 : 4
arr의 길이 : 12
arr의 길이 : 14
arr에 들어있는 숫자의 합 : 143
sum을 16진수로 표현 : 8f
ex) 987 (10진수)
100 10 1의 자리
9 8 7
================
f 6 (f : 15)
16진수 : 0~15까지를 얘기함, 9까지는 표현 가능, 10부터는 a b c d e f -> f : 15
//16진수 표기를 대문자로 표기해달라
위에서 8f는 문자로 반환된 것이므로
package com.day08;
public class StringTest03 {
public static void main(String[] args) {
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";//배열X, 처음부터 끝까지 문자
//tmp길이 구하기
System.out.println("tmp 길이 : " + tmp.length());
//tmp 마지막 문자(숫자)
System.out.println("tmp 마지막 숫자 : " + tmp.charAt(tmp.length()-1));
//숫자의 합 구하기 -> 이걸 하나의 문자라고생각하면 안 되고, 공백으로 나누어 1 0 15 .. 를 각각 더해야 함
String[] arr = tmp.split(" "); //split(구분자) -> 여기서는 공백이 구분자이므로 " " 라고 적어줌 -> 공백으로 구분해 배열에 담는다
System.out.println("arr의 길이 : " + arr.length); //배열의 길이 구하기
//마지막 숫자가 있는 위치
System.out.println("arr의 길이 : " + arr[arr.length-1]);
//배열에 들어있는 숫자의 합 구하기
int sum = 0;
for(int i = 0; i < arr.length; i++) {
// sum += arr[i];//arr[i]에 저장되어있는 내용 -> 문자 : 문자 -> 숫자로 바꾸는 작업이 필요함
sum += Integer.parseInt(arr[i]);
}
System.out.println("arr에 들어있는 숫자의 합 : " + sum);
//sum을 16진수로 표현하기 //8f가 나올 것
System.out.println("sum을 16진수로 표현 : " + Integer.toHexString(sum)); //8f(8*16 + 15*1) -> 문자로 반환됨
//16진수 표기를 대문자로 표기해달라
System.out.println("sum을 16진수로 표현 : " + Integer.toHexString(sum).toUpperCase());
}
}
tmp 길이 : 32
tmp 마지막 숫자 : 4
arr의 길이 : 12
arr의 길이 : 14
arr에 들어있는 숫자의 합 : 143
sum을 16진수로 표현 : 8f
sum을 16진수로 표현 : 8F
//arr의 값을 16, 8, 2진수로 표현하기
package com.day08;
public class StringTest03 {
public static void main(String[] args) {
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";//배열X, 처음부터 끝까지 문자
//tmp길이 구하기
System.out.println("tmp 길이 : " + tmp.length());
//tmp 마지막 문자(숫자)
System.out.println("tmp 마지막 숫자 : " + tmp.charAt(tmp.length()-1));
//숫자의 합 구하기 -> 이걸 하나의 문자라고생각하면 안 되고, 공백으로 나누어 1 0 15 .. 를 각각 더해야 함
String[] arr = tmp.split(" "); //split(구분자) -> 여기서는 공백이 구분자이므로 " " 라고 적어줌 -> 공백으로 구분해 배열에 담는다
System.out.println("arr의 길이 : " + arr.length); //배열의 길이 구하기
//마지막 숫자가 있는 위치
System.out.println("arr의 길이 : " + arr[arr.length-1]);
//배열에 들어있는 숫자의 합 구하기
int sum = 0;
for(int i = 0; i < arr.length; i++) {
// sum += arr[i];//arr[i]에 저장되어있는 내용 -> 문자 : 문자 -> 숫자로 바꾸는 작업이 필요함
sum += Integer.parseInt(arr[i]);
}
System.out.println("arr에 들어있는 숫자의 합 : " + sum);
//sum을 16진수로 표현하기 //8f가 나올 것
System.out.println("sum을 16진수로 표현 : " + Integer.toHexString(sum)); //8f(8*16 + 15*1) -> 문자로 반환됨
//16진수 표기를 대문자로 표기해달라
System.out.println("sum을 16진수로 표현 : " + Integer.toHexString(sum).toUpperCase());
String hex="";
String oct="";
String bin="";
//arr의 값을 16, 8, 2진수로 표현하기
System.out.println("16진수 : " + Integer.toHexString(hex)); //16진수
System.out.println("8진수 : " + oct); //8진수
System.out.println("2진수 : " + bin); //2진수
}
}
==>
toHexString()안에는 int형이 들어가야 하는데 arr[i]는 문자형이므로 에러남
-> 넣기 전에 int형으로 바꿔주어야 함
package com.day08;
public class StringTest03 {
public static void main(String[] args) {
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";//배열X, 처음부터 끝까지 문자
//tmp길이 구하기
System.out.println("tmp 길이 : " + tmp.length());
//tmp 마지막 문자(숫자)
System.out.println("tmp 마지막 숫자 : " + tmp.charAt(tmp.length()-1));
//숫자의 합 구하기 -> 이걸 하나의 문자라고생각하면 안 되고, 공백으로 나누어 1 0 15 .. 를 각각 더해야 함
String[] arr = tmp.split(" "); //split(구분자) -> 여기서는 공백이 구분자이므로 " " 라고 적어줌 -> 공백으로 구분해 배열에 담는다
System.out.println("arr의 길이 : " + arr.length); //배열의 길이 구하기
//마지막 숫자가 있는 위치
System.out.println("arr의 길이 : " + arr[arr.length-1]);
//배열에 들어있는 숫자의 합 구하기
int sum = 0;
for(int i = 0; i < arr.length; i++) {
// sum += arr[i];//arr[i]에 저장되어있는 내용 -> 문자 : 문자 -> 숫자로 바꾸는 작업이 필요함
sum += Integer.parseInt(arr[i]);
}
System.out.println("arr에 들어있는 숫자의 합 : " + sum);
//sum을 16진수로 표현하기 //8f가 나올 것
System.out.println("sum을 16진수로 표현 : " + Integer.toHexString(sum)); //8f(8*16 + 15*1) -> 문자로 반환됨
//16진수 표기를 대문자로 표기해달라
System.out.println("sum을 16진수로 표현 : " + Integer.toHexString(sum).toUpperCase());
String hex="";
String oct="";
String bin="";
//arr의 값을 16, 8, 2진수로 표현하기
for(int i = 0; i < arr.length; i++) {
int v = Integer.parseInt(arr[i]);//문자 -> 숫자로 변환
hex += Integer.toHexString(v) + " ";//toHexString()안에는 int형이 들어가야 하는데 arr[i]는 문자형이므로 에러남 -> 넣기 전에 int형으로 바꿔주어야 함
oct += Integer.toOctalString(v) + " ";
bin += Integer.toBinaryString(v) + " ";
}
System.out.println("16진수 : " + hex); //16진수
System.out.println("8진수 : " + oct); //8진수
System.out.println("2진수 : " + bin); //2진수
}
}
tmp 길이 : 32
tmp 마지막 숫자 : 4
arr의 길이 : 12
arr의 길이 : 14
arr에 들어있는 숫자의 합 : 143
sum을 16진수로 표현 : 8f
sum을 16진수로 표현 : 8F
16진수 : 1 0 f 17 6 15 11 a b c d e
8진수 : 1 0 17 27 6 25 21 12 13 14 15 16
2진수 : 1 0 1111 10111 110 10101 10001 1010 1011 1100 1101 1110
//substring 으로 문자 추출하기
package com.day08;
public class StringTest03 {
public static void main(String[] args) {
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";//배열X, 처음부터 끝까지 문자
//tmp길이 구하기
System.out.println("tmp 길이 : " + tmp.length());
//tmp 마지막 문자(숫자)
System.out.println("tmp 마지막 숫자 : " + tmp.charAt(tmp.length()-1));
//숫자의 합 구하기 -> 이걸 하나의 문자라고생각하면 안 되고, 공백으로 나누어 1 0 15 .. 를 각각 더해야 함
String[] arr = tmp.split(" "); //split(구분자) -> 여기서는 공백이 구분자이므로 " " 라고 적어줌 -> 공백으로 구분해 배열에 담는다
System.out.println("arr의 길이 : " + arr.length); //배열의 길이 구하기
//마지막 숫자가 있는 위치
System.out.println("arr의 길이 : " + arr[arr.length-1]);
//배열에 들어있는 숫자의 합 구하기
int sum = 0;
for(int i = 0; i < arr.length; i++) {
// sum += arr[i];//arr[i]에 저장되어있는 내용 -> 문자 : 문자 -> 숫자로 바꾸는 작업이 필요함
sum += Integer.parseInt(arr[i]);
}
System.out.println("arr에 들어있는 숫자의 합 : " + sum);
//sum을 16진수로 표현하기 //8f가 나올 것
System.out.println("sum을 16진수로 표현 : " + Integer.toHexString(sum)); //8f(8*16 + 15*1) -> 문자로 반환됨
//16진수 표기를 대문자로 표기해달라
System.out.println("sum을 16진수로 표현 : " + Integer.toHexString(sum).toUpperCase());
String hex="";
String oct="";
String bin="";
//arr의 값을 16, 8, 2진수로 표현하기
for(int i = 0; i < arr.length; i++) {
int v = Integer.parseInt(arr[i]);//문자 -> 숫자로 변환
hex += Integer.toHexString(v) + " ";//toHexString()안에는 int형이 들어가야 하는데 arr[i]는 문자형이므로 에러남 -> 넣기 전에 int형으로 바꿔주어야 함
oct += Integer.toOctalString(v) + " ";
bin += Integer.toBinaryString(v) + " ";
}
System.out.println("16진수 : " + hex); //16진수
System.out.println("8진수 : " + oct); //8진수
System.out.println("2진수 : " + bin); //2진수
// 012345678
String test = "abce test hi java";
System.out.println(test.substring(3, 8));//3은 e, 8은 e로, 3~8번째 Index까지를 가져와서 문자 추출
}
}
tmp 길이 : 32
tmp 마지막 숫자 : 4
arr의 길이 : 12
arr의 길이 : 14
arr에 들어있는 숫자의 합 : 143
sum을 16진수로 표현 : 8f
sum을 16진수로 표현 : 8F
16진수 : 1 0 f 17 6 15 11 a b c d e
8진수 : 1 0 17 27 6 25 21 12 13 14 15 16
2진수 : 1 0 1111 10111 110 10101 10001 1010 1011 1100 1101 1110
e tes
package com.day08;
public class StringTest03 {
public static void main(String[] args) {
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";//배열X, 처음부터 끝까지 문자
//tmp길이 구하기
System.out.println("tmp 길이 : " + tmp.length());
//tmp 마지막 문자(숫자)
System.out.println("tmp 마지막 숫자 : " + tmp.charAt(tmp.length()-1));
//숫자의 합 구하기 -> 이걸 하나의 문자라고생각하면 안 되고, 공백으로 나누어 1 0 15 .. 를 각각 더해야 함
String[] arr = tmp.split(" "); //split(구분자) -> 여기서는 공백이 구분자이므로 " " 라고 적어줌 -> 공백으로 구분해 배열에 담는다
System.out.println("arr의 길이 : " + arr.length); //배열의 길이 구하기
//마지막 숫자가 있는 위치
System.out.println("arr의 길이 : " + arr[arr.length-1]);
//배열에 들어있는 숫자의 합 구하기
int sum = 0;
for(int i = 0; i < arr.length; i++) {
// sum += arr[i];//arr[i]에 저장되어있는 내용 -> 문자 : 문자 -> 숫자로 바꾸는 작업이 필요함
sum += Integer.parseInt(arr[i]);
}
System.out.println("arr에 들어있는 숫자의 합 : " + sum);
//sum을 16진수로 표현하기 //8f가 나올 것
System.out.println("sum을 16진수로 표현 : " + Integer.toHexString(sum)); //8f(8*16 + 15*1) -> 문자로 반환됨
//16진수 표기를 대문자로 표기해달라
System.out.println("sum을 16진수로 표현 : " + Integer.toHexString(sum).toUpperCase());
String hex="";
String oct="";
String bin="";
//arr의 값을 16, 8, 2진수로 표현하기
for(int i = 0; i < arr.length; i++) {
int v = Integer.parseInt(arr[i]);//문자 -> 숫자로 변환
hex += Integer.toHexString(v) + " ";//toHexString()안에는 int형이 들어가야 하는데 arr[i]는 문자형이므로 에러남 -> 넣기 전에 int형으로 바꿔주어야 함
oct += Integer.toOctalString(v) + " ";
bin += Integer.toBinaryString(v) + " ";
}
System.out.println("16진수 : " + hex); //16진수
System.out.println("8진수 : " + oct); //8진수
System.out.println("2진수 : " + bin); //2진수
// 012345678
String test = "abce test hi java";
System.out.println(test.substring(3, 8));//3은 e, 8은 e로, 3~8번째 Index까지를 가져와서 문자 추출
System.out.println(test.substring(3));
//java 추출
System.out.println(test.substring(13, 17));
}
}
tmp 길이 : 32
tmp 마지막 숫자 : 4
arr의 길이 : 12
arr의 길이 : 14
arr에 들어있는 숫자의 합 : 143
sum을 16진수로 표현 : 8f
sum을 16진수로 표현 : 8F
16진수 : 1 0 f 17 6 15 11 a b c d e
8진수 : 1 0 17 27 6 25 21 12 13 14 15 16
2진수 : 1 0 1111 10111 110 10101 10001 1010 1011 1100 1101 1110
e tes
e test hi java
java
// java를 검색해서 위치를 추출하면 되지 않을까?
package com.day08;
public class StringTest03 {
public static void main(String[] args) {
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";//배열X, 처음부터 끝까지 문자
//tmp길이 구하기
System.out.println("tmp 길이 : " + tmp.length());
//tmp 마지막 문자(숫자)
System.out.println("tmp 마지막 숫자 : " + tmp.charAt(tmp.length()-1));
//숫자의 합 구하기 -> 이걸 하나의 문자라고생각하면 안 되고, 공백으로 나누어 1 0 15 .. 를 각각 더해야 함
String[] arr = tmp.split(" "); //split(구분자) -> 여기서는 공백이 구분자이므로 " " 라고 적어줌 -> 공백으로 구분해 배열에 담는다
System.out.println("arr의 길이 : " + arr.length); //배열의 길이 구하기
//마지막 숫자가 있는 위치
System.out.println("arr의 길이 : " + arr[arr.length-1]);
//배열에 들어있는 숫자의 합 구하기
int sum = 0;
for(int i = 0; i < arr.length; i++) {
// sum += arr[i];//arr[i]에 저장되어있는 내용 -> 문자 : 문자 -> 숫자로 바꾸는 작업이 필요함
sum += Integer.parseInt(arr[i]);
}
System.out.println("arr에 들어있는 숫자의 합 : " + sum);
//sum을 16진수로 표현하기 //8f가 나올 것
System.out.println("sum을 16진수로 표현 : " + Integer.toHexString(sum)); //8f(8*16 + 15*1) -> 문자로 반환됨
//16진수 표기를 대문자로 표기해달라
System.out.println("sum을 16진수로 표현 : " + Integer.toHexString(sum).toUpperCase());
String hex="";
String oct="";
String bin="";
//arr의 값을 16, 8, 2진수로 표현하기
for(int i = 0; i < arr.length; i++) {
int v = Integer.parseInt(arr[i]);//문자 -> 숫자로 변환
hex += Integer.toHexString(v) + " ";//toHexString()안에는 int형이 들어가야 하는데 arr[i]는 문자형이므로 에러남 -> 넣기 전에 int형으로 바꿔주어야 함
oct += Integer.toOctalString(v) + " ";
bin += Integer.toBinaryString(v) + " ";
}
System.out.println("16진수 : " + hex); //16진수
System.out.println("8진수 : " + oct); //8진수
System.out.println("2진수 : " + bin); //2진수
// 012345678
String test = "abce test hi java";
System.out.println(test.substring(3, 8));//3은 e, 8은 e로, 3~8번째 Index까지를 가져와서 문자 추출
System.out.println(test.substring(3));
//substring 사용하여 java 추출
System.out.println(test.substring(13, 17));
//이렇게 하지 말고 java를 검색해서 위치를 추출하면 되지 않을까?
int i = test.indexOf('j');
System.out.println(test.substring(i, i+4));
}
}
tmp 길이 : 32
tmp 마지막 숫자 : 4
arr의 길이 : 12
arr의 길이 : 14
arr에 들어있는 숫자의 합 : 143
sum을 16진수로 표현 : 8f
sum을 16진수로 표현 : 8F
16진수 : 1 0 f 17 6 15 11 a b c d e
8진수 : 1 0 17 27 6 25 21 12 13 14 15 16
2진수 : 1 0 1111 10111 110 10101 10001 1010 1011 1100 1101 1110
e tes
e test hi java
java
java
StringTest04.java
package com.day08;
public class StringTest04 {
public static void main(String[] args) {
String msg = "This/is/a/java";
//split()을 이용해서 java a is This 출력하기
}
}
//split()을 이용해서 java a is This 출력하기
package com.day08;
public class StringTest04 {
public static void main(String[] args) {
String msg = "This/is/a/java";
//split()을 이용해서 java a is This 출력하기
String[] arr = msg.split("/");
for(int i = arr.length-1; i >= 0; i--) {
System.out.print(arr[i] + "\t");
}
}
}
java a is This
//This is a java ===> java a is This ==> avaja a si sihT
package com.day08;
public class StringTest04 {
public static void main(String[] args) {
String msg = "This/is/a/java";
//split()을 이용해서 java a is This 출력하기
String[] arr = msg.split("/");
for(int i = arr.length-1; i >= 0; i--) {
System.out.print(arr[i] + "\t");
}
System.out.println();
//This is a java ===> java a is This ==> avaja a si sihT
for(int i = arr.length-1; i >= 0; i--) {
for(int j = arr[i].length()-1; j>=0; j--) {
System.out.print(arr[i].charAt(j));
}
System.out.print(" ");
}
System.out.println();
}
}
java a is This
avaj a si sihT
package com.day08;
public class StringTest04 {
public static void main(String[] args) {
String msg = "This/is/a/java";
//split()을 이용해서 java a is This 출력하기
String[] arr = msg.split("/");
for(int i = arr.length-1; i >= 0; i--) {
System.out.print(arr[i] + "\t");
}
System.out.println();
//This is a java ===> java a is This ==> avaja a si sihT
for(int i = arr.length-1; i >= 0; i--) {
for(int j = arr[i].length()-1; j>=0; j--) {
System.out.print(arr[i].charAt(j));
}
System.out.print(" ");
}
System.out.println();
String str = "Hi...Glad to meet you!!!!!";
for(int i = 0; i < str.length(); i++) {
System.out.print(str.charAt(i)+2);
}
System.out.println();
}
}
java a is This
avaj a si sihT
7410748484873110991023411811334111103103118341231131193535353535
아스키 코드 값을 숫자로 생각하고 +2한 결과
package com.day08;
public class StringTest04 {
public static void main(String[] args) {
String msg = "This/is/a/java";
//split()을 이용해서 java a is This 출력하기
String[] arr = msg.split("/");
for(int i = arr.length-1; i >= 0; i--) {
System.out.print(arr[i] + "\t");
}
System.out.println();
//This is a java ===> java a is This ==> avaja a si sihT
for(int i = arr.length-1; i >= 0; i--) {
for(int j = arr[i].length()-1; j>=0; j--) {
System.out.print(arr[i].charAt(j));
}
System.out.print(" ");
}
System.out.println();
String str = "Hi...Glad to meet you!!!!!";
for(int i = 0; i < str.length(); i++) {
System.out.print((char)(str.charAt(i)+2));
}
System.out.println();
}
}
java a is This
avaj a si sihT
Jk000Incf"vq"oggv"{qw#####
StringExam01.java
// split() 이용하여 입력한 문장의 단어와 총 단어 수 출력
package com.day08;
import java.util.Scanner;
public class StringExam01 {
public static void main(String[] args) {
// split() 이용하여 입력한 문장의 단어와 총 단어 수 출력
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("문장을 입력하세요. 종료는 exit >>");
String line = sc.nextLine();
if (line.equals("exit"))
break;
String[] arr = line.split(" ");
System.out.println("단어수 : " + arr.length);
for (String word : arr) {
System.out.println("단어 : " + word);
}
sc.close();
}
}
}
돌고 있는데 sc.close()를 해버려서 에러
package com.day08;
import java.util.Scanner;
public class StringExam01 {
public static void main(String[] args) {
// split() 이용하여 입력한 문장의 단어와 총 단어 수 출력
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("문장을 입력하세요. 종료는 exit >>");
String line = sc.nextLine();
if (line.equals("exit"))
break;
String[] arr = line.split(" ");
System.out.println("단어수 : " + arr.length);
for (String word : arr) {
System.out.println("단어 : " + word);
}
}
sc.close();
}
}
Exit를 입력했을 때는 종료가 안됨. 첫 글자가 대문자라서
package com.day08;
import java.util.Scanner;
public class StringExam01 {
public static void main(String[] args) {
// split() 이용하여 입력한 문장의 단어와 총 단어 수 출력
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("문장을 입력하세요. 종료는 exit >>");
String line = sc.nextLine();
//if (line.equals("exit")) break;
if(line.toLowerCase().equals("exit")) break; //또는 대문자로 바쭤주고 "EXIT"와 일치하면 break;
String[] arr = line.split(" ");
System.out.println("단어수 : " + arr.length);
for (String word : arr) {
System.out.println("단어 : " + word);
}
}
sc.close();
}
}
또는
package com.day08;
import java.util.Scanner;
public class StringExam01 {
public static void main(String[] args) {
// split() 이용하여 입력한 문장의 단어와 총 단어 수 출력
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("문장을 입력하세요. 종료는 exit >>");
String line = sc.nextLine();
//if (line.equals("exit")) break;
//if(line.toLowerCase().equals("exit")) break; //또는 대문자로 바쭤주고 "EXIT"와 일치하면 break;
if(line.toUpperCase().equals("EXIT")) break;
String[] arr = line.split(" ");
System.out.println("단어수 : " + arr.length);
for (String word : arr) {
System.out.println("단어 : " + word);
}
}
sc.close();
}
}
또는
package com.day08;
import java.util.Scanner;
public class StringExam01 {
public static void main(String[] args) {
// split() 이용하여 입력한 문장의 단어와 총 단어 수 출력
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("문장을 입력하세요. 종료는 exit >>");
String line = sc.nextLine();
//if (line.equals("exit")) break;
//if(line.toLowerCase().equals("exit")) break; //또는 대문자로 바쭤주고 "EXIT"와 일치하면 break;
//if(line.toUpperCase().equals("EXIT")) break;
if(line.equalsIgnoreCase("exit")) break; //대, 소문자 구분하지 않겠다.
String[] arr = line.split(" ");
System.out.println("단어수 : " + arr.length);
for (String word : arr) {
System.out.println("단어 : " + word);
}
}
sc.close();
}
}
//배열 -> 순서에 의미를 두는 것, 중복 허용 -> 우리는 아직 중복을 구분하지 못함
break; 대신 system.exit(0); 써도 되긴 하지만 반복문을 벗어나는 것은 break;
그런데 여기서는 break;가 프로그램 종료의 의미로 쓰였기 때문에 대신 system.exti(0);을 써주어도 됨
split(); () 속 문자 등으로 구분 -> 이러한 기능을 구현한 클래스가 있다.
api > java.util > classes > StringTokenizer >
생성자는 안에 문자열 인수가 있어야 한다.
구분자없으면 공백이 기준
StringTok.java
//클래스 이름을 StringTokenizer로 하면 안됨 -> 자바에서 만든 StringTokenizer를 사용하지 못함 : 자기 클래스가 우선이므로 클래스 내에서 StringTokenizer를찾음..
package com.day08;
import java.util.StringTokenizer;
public class StringTok {
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer("홍길동,장화/홍련/팥쥐/주인공","/"); //앞의 문자를 /로 구분 -> 4개가 만들어질 것
System.out.println(st.countTokens());
}
}
4
//쉼표도 넣어 보면?
package com.day08;
import java.util.StringTokenizer;
public class StringTok {
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer("홍길동,장화/홍련/팥쥐/주인공",",/"); //앞의 문자를 /와 ,로 구분
System.out.println(st.countTokens());
}
}
5
package com.day08;
import java.util.StringTokenizer;
public class StringTok {
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer("홍길동,장화/홍련/팥쥐/주인공",",/"); //앞의 문자를 /와 ,로 구분
System.out.println(st.countTokens());
for(int i = 0; i < st.countTokens(); i++) {
System.out.println(st.nextToken());
}
}
}
5
홍길동
장화
홍련
5
count : 5
홍길동
count : 4
장화
count : 3
홍련
token 수가 계속 줄어든다.
package com.day08;
import java.util.StringTokenizer;
public class StringTok {
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer("홍길동,장화/홍련/팥쥐/주인공",",/"); //앞의 문자를 /와 ,로 구분
System.out.println(st.countTokens()); //토큰의 수 : 5
int len = st.countTokens();
//홍길동 장화 홍련 팥쥐 주인공
for(int i = 0; i < len; i++) { //i=0 i<5까지 돌아감, i=1 i<4, i=2 i<3
System.out.println("count : " + st.countTokens());
System.out.println(st.nextToken()); //홍길동 장화 홍련
}
}
}
5
count : 5
홍길동
count : 4
장화
count : 3
홍련
count : 2
팥쥐
count : 1
주인공
package com.day08;
import java.util.StringTokenizer;
public class StringTok {
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer("홍길동,장화/홍련/팥쥐/주인공", ",/"); // 앞의 문자를 /와 ,로 구분
System.out.println(st.countTokens()); // 토큰의 수 : 5
int len = st.countTokens();
// 홍길동 장화 홍련 팥쥐 주인공
// for(int i = 0; i < len; i++) { //i=0 i<5까지 돌아감, i=1 i<4, i=2 i<3
// System.out.println("count : " + st.countTokens());
// System.out.println(st.nextToken()); //홍길동 장화 홍련
// } 이렇게 하는 것 보다는 while문 사용하는게 나음
while (st.hasMoreTokens()) {
System.out.println("count : " + st.countTokens());
System.out.println(st.nextToken());
}
}
}
5
count : 5
홍길동
count : 4
장화
count : 3
홍련
count : 2
팥쥐
count : 1
주인공
StringTest03의 String tmp = "1 0 15 23 6 21 17 10 11 12 13 14"; 그대로 복사
//StringTokenizer을 이용해서 16진수, 8진수, 2진수 출력
package com.day08;
import java.util.StringTokenizer;
public class StringTok {
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer("홍길동,장화/홍련/팥쥐/주인공", ",/"); // 앞의 문자를 /와 ,로 구분
System.out.println(st.countTokens()); // 토큰의 수 : 5
int len = st.countTokens();
// 홍길동 장화 홍련 팥쥐 주인공
// for(int i = 0; i < len; i++) { //i=0 i<5까지 돌아감, i=1 i<4, i=2 i<3
// System.out.println("count : " + st.countTokens());
// System.out.println(st.nextToken()); //홍길동 장화 홍련
// } 이렇게 하는 것 보다는 while문 사용하는게 나음
while (st.hasMoreTokens()) {
System.out.println("count : " + st.countTokens());
System.out.println(st.nextToken());
}
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";
//StringTokenizer을 이용해서 16진수, 8진수, 2진수 출력
StringTokenizer stk = new StringTokenizer(tmp); //tmp 속 문자를 기본인 " " 으로 구분
String hex="";
String oct="";
String bin="";
while (stk.hasMoreTokens() ) {
String value = stk.nextToken(); //1
hex += Integer.toHexString(Integer.parseInt(value)) + " ";
oct += Integer.toOctalString(Integer.parseInt(value)) + " ";
bin += Integer.toBinaryString(Integer.parseInt(value)) + " ";
}
System.out.println("16진수 : " + hex); //16진수
System.out.println("8진수 : " + oct); //8진수
System.out.println("2진수 : " + bin); //2진수
}
}
또는 간단하게
package com.day08;
import java.util.StringTokenizer;
public class StringTok {
public static void main(String[] args) {
StringTokenizer st = new StringTokenizer("홍길동,장화/홍련/팥쥐/주인공", ",/"); // 앞의 문자를 /와 ,로 구분
System.out.println(st.countTokens()); // 토큰의 수 : 5
int len = st.countTokens();
// 홍길동 장화 홍련 팥쥐 주인공
// for(int i = 0; i < len; i++) { //i=0 i<5까지 돌아감, i=1 i<4, i=2 i<3
// System.out.println("count : " + st.countTokens());
// System.out.println(st.nextToken()); //홍길동 장화 홍련
// } 이렇게 하는 것 보다는 while문 사용하는게 나음
while (st.hasMoreTokens()) {
System.out.println("count : " + st.countTokens());
System.out.println(st.nextToken());
}
String tmp = "1 0 15 23 6 21 17 10 11 12 13 14";
//StringTokenizer을 이용해서 16진수, 8진수, 2진수 출력
StringTokenizer stk = new StringTokenizer(tmp); //tmp 속 문자를 기본인 " " 으로 구분
String hex="";
String oct="";
String bin="";
while (stk.hasMoreTokens() ) {
// String value = stk.nextToken(); //1
int value = Integer.parseInt(stk.nextToken());
hex += Integer.toHexString(value) + " ";
oct += Integer.toOctalString(value) + " ";
bin += Integer.toBinaryString(value) + " ";
}
System.out.println("16진수 : " + hex); //16진수
System.out.println("8진수 : " + oct); //8진수
System.out.println("2진수 : " + bin); //2진수
}
}
5
count : 5
홍길동
count : 4
장화
count : 3
홍련
count : 2
팥쥐
count : 1
주인공
16진수 : 1 0 f 17 6 15 11 a b c d e
8진수 : 1 0 17 27 6 25 21 12 13 14 15 16
2진수 : 1 0 1111 10111 110 10101 10001 1010 1011 1100 1101 1110
StringExam01을 복사해서 StringExam02.java 만들기
package com.day08;
import java.util.Scanner;
public class StringExam02 {
public static void main(String[] args) {
// StringTokenizer() 이용하여 문장의 단어와 총 단어 수 출력
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("문장을 입력하세요. 종료는 exit >>");
String line = sc.nextLine();
if(line.equalsIgnoreCase("exit")) break; //대, 소문자 구분하지 않겠다.
//StringTokenizer stk 생성
System.out.println("단어수 : " + arr.length);
for (String word : arr) {
System.out.println("단어 : " + word);
}
}
sc.close();
}
}
StringTokenizer로 바꿔보기
package com.day08;
import java.util.Scanner;
import java.util.StringTokenizer;
public class StringExam02 {
public static void main(String[] args) {
// StringTokenizer() 이용하여 문장의 단어와 총 단어 수 출력
Scanner sc = new Scanner(System.in);
while (true) {
System.out.println("문장을 입력하세요. 종료는 exit >>");
String line = sc.nextLine();
if(line.equalsIgnoreCase("exit")) break; //대, 소문자 구분하지 않겠다.
//StringTokenizer stk 생성
StringTokenizer stk = new StringTokenizer(line);
System.out.println("단어수 : " + stk.countTokens());
while (stk.hasMoreTokens()) {
System.out.println("단어 : " + stk.nextToken());
}
}
sc.close();
}
}
문장을 입력하세요. 종료는 exit >>
dskfjdskfj dskfjsdkfj eorjeoiei dkfjdkfk fdkfjkd
단어수 : 5
단어 : dskfjdskfj
단어 : dskfjsdkfj
단어 : eorjeoiei
단어 : dkfjdkfk
단어 : fdkfjkd
문장을 입력하세요. 종료는 exit >>
dhfld kfddjkf eifhowe qperesak dkfdjfk
단어수 : 5
단어 : dhfld
단어 : kfddjkf
단어 : eifhowe
단어 : qperesak
단어 : dkfdjfk
문장을 입력하세요. 종료는 exit >>
exit
StringBuilderTest.java
//String : 정적클래스로 한 번 만들어지면 변경 안 됨 -> 바꾸면 없어지고 새로 만들어짐
//내용이 자꾸 바뀔것 같으면 String같은 정적 클래스 사용 시 : 부하가 많이 걸림
//정적 클래스가 아닌 동적 클래스로 만들어 주자.
StringBuffer : 동기화 -> 조금 더 안정적임 -> 그러나 속도 등에서 보면 Builder를 쓰는 것이 더 낫다
StringBuilder
package com.day08;
public class StringBuilderTest {
public static void main(String[] args) {
//String : 정적클래스로 한 번 만들어지면 변경 안 됨 -> 바꾸면 없어지고 새로 만들어짐
//내용이 자꾸 바뀔것 같으면 String같은 정적 클래스 사용 시 : 부하가 많이 걸림
//정적 클래스가 아닌 동적 클래스로 만들어 주자.
String str = "Hi.. Glad to meet you!!";
StringBuilder sb = new StringBuilder(str);
System.out.println(sb);
}
}
Hi.. Glad to meet you!!
package com.day08;
public class StringBuilderTest {
public static void main(String[] args) {
//String : 정적클래스로 한 번 만들어지면 변경 안 됨 -> 바꾸면 없어지고 새로 만들어짐
//내용이 자꾸 바뀔것 같으면 String같은 정적 클래스 사용 시 : 부하가 많이 걸림
//정적 클래스가 아닌 동적 클래스로 만들어 주자.
String str = "Hi.. Glad to meet you!!";
StringBuilder sb = new StringBuilder(str);
System.out.println(sb);
System.out.println("길이 : " + sb.length());
}
}
Hi.. Glad to meet you!!
길이 : 23
package com.day08;
public class StringBuilderTest {
public static void main(String[] args) {
//String : 정적클래스로 한 번 만들어지면 변경 안 됨 -> 바꾸면 없어지고 새로 만들어짐
//내용이 자꾸 바뀔것 같으면 String같은 정적 클래스 사용 시 : 부하가 많이 걸림
//정적 클래스가 아닌 동적 클래스로 만들어 주자.
String str = "Hi.. Glad to meet you!!";
StringBuilder sb = new StringBuilder(str); //얘는 내용이 바뀌어질 수 있음
System.out.println(sb);
System.out.println("길이 : " + sb.length());
System.out.println("반대로 출력 : " + sb.reverse()); //바뀐대로 들어감
sb.append("java");
System.out.println(sb);
sb.insert(2, "oracle");
System.out.println(sb);
sb.replace(2, 4, " database ");
System.out.println(sb);
sb.delete(2, 6);
System.out.println(sb);
System.out.println(sb.charAt(5));
}
}
Hi.. Glad to meet you!!
길이 : 23
반대로 출력 : !!uoy teem ot dalG ..iH
!!uoy teem ot dalG ..iHjava
!!oracleuoy teem ot dalG ..iHjava
!! database acleuoy teem ot dalG ..iHjava
!!tabase acleuoy teem ot dalG ..iHjava
a
따라서 계속 변하는 내용은 정적 클래스 String이 아니라 동적 클래스 Stringbuilder 같은 것으로 사용해주기
EncTest.java
package com.day08;
public class EncTest {
public static void main(String[] args) {
EncTest enc = new EncTest();
String msg = "Hi.. Glad to meet you!!!";
System.out.println("암호화 전 : " + msg);
String str = enc.encrypt(msg); //+2
System.out.println("암호화 후 : " + str);
System.out.println("복호화 후 : " + enc.decrypt(str)); //-2
}
}
오류 없도록 만들기
package com.day08;
public class EncTest {
public String encrypt(String msg) {
return null;
}
private String decrypt(String msg) {
return null;
}
public static void main(String[] args) {
EncTest enc = new EncTest();
String msg = "Hi.. Glad to meet you!!!";
System.out.println("암호화 전 : " + msg);
String str = enc.encrypt(msg); //+2
System.out.println("암호화 후 : " + str);
System.out.println("복호화 후 : " + enc.decrypt(str)); //-2
}
}
암호화 전 : Hi.. Glad to meet you!!!
암호화 후 : null
복호화 후 : null
오류 사라지고 실행 됨 : 암호화 2씩 증가, 복호화 2씩 감소 시키기(StringTest04.java 참고)
현재 msg 에는 Hi.. Glad to meet you!! 들어있음
package com.day08;
public class EncTest {
public String encrypt(String msg) {
String result = "";
for(int i = 0; i < msg.length(); i++) {
result += (char)(msg.charAt(i)+2);
}
return result;
}
private String decrypt(String msg) {
String result = "";
for(int i = 0; i < msg.length(); i++) {
result += (char)(msg.charAt(i)-2);
}
return result;
}
public static void main(String[] args) {
EncTest enc = new EncTest();
String msg = "Hi.. Glad to meet you!!!";
System.out.println("암호화 전 : " + msg);
String str = enc.encrypt(msg); //+2
System.out.println("암호화 후 : " + str);
System.out.println("복호화 후 : " + enc.decrypt(str)); //-2
}
}
암호화 전 : Hi.. Glad to meet you!!!
암호화 후 : Jk00"Incf"vq"oggv"{qw###
복호화 후 : Hi.. Glad to meet you!!!
조건 : 공백은 +2하지 않고 그대로 출력
package com.day08;
public class EncTest {
public String encrypt(String msg) {
// 단, 공백은 그대로 출력 -> 공백이 아닐 때만 +2
String result = "";
for (int i = 0; i < msg.length(); i++) {
if (msg.charAt(i) == ' ') {
result += msg.charAt(i); //charAt()은 문자 하나 리턴(문자 하나는 ' ' 홑따옴표)
} else {
result += (char) (msg.charAt(i) + 2);
}
}
return result;
}
private String decrypt(String msg) {
String result = "";
for (int i = 0; i < msg.length(); i++) {
if (msg.charAt(i) == ' ') {
result += msg.charAt(i); //charAt()은 문자 하나 리턴(문자 하나는 ' ' 홑따옴표)
} else {
result += (char) (msg.charAt(i) - 2);
}
}
return result;
}
public static void main(String[] args) {
EncTest enc = new EncTest();
String msg = "Hi.. Glad to meet you!!!";
System.out.println("암호화 전 : " + msg);
String str = enc.encrypt(msg); // +2
System.out.println("암호화 후 : " + str);
System.out.println("복호화 후 : " + enc.decrypt(str)); // -2
}
}
암호화 전 : Hi.. Glad to meet you!!!
암호화 후 : Jk00 Incf vq oggv {qw###
복호화 후 : Hi.. Glad to meet you!!!
EncTest2.java -> EncTest.java 복사
package com.day08;
public class EncTest2 {
public String encrypt(String msg) {
// 단, 공백은 그대로 출력 -> 공백이 아닐 때만 +2
//String result = "";
//StringBuilder 사용
for (int i = 0; i < msg.length(); i++) {
if (msg.charAt(i) == ' ') {
result += msg.charAt(i); //charAt()은 문자 하나 리턴(문자 하나는 ' ' 홑따옴표)
} else {
result += (char) (msg.charAt(i) + 2);
}
}
return result;
}
private String decrypt(String msg) {
//String result = "";
//StringBuilder 사용
for (int i = 0; i < msg.length(); i++) {
if (msg.charAt(i) == ' ') {
result += msg.charAt(i); //charAt()은 문자 하나 리턴(문자 하나는 ' ' 홑따옴표)
} else {
result += (char) (msg.charAt(i) - 2);
}
}
return result;
}
public static void main(String[] args) {
EncTest2 enc = new EncTest2();
String msg = "Hi.. Glad to meet you!!!";
System.out.println("암호화 전 : " + msg);
String str = enc.encrypt(msg); // +2
System.out.println("암호화 후 : " + str);
System.out.println("복호화 후 : " + enc.decrypt(str)); // -2
}
}
==> StringBuilder 사용해서 바꾸기
package com.day08;
public class EncTest2 {
public String encrypt(String msg) {
// 단, 공백은 그대로 출력 -> 공백이 아닐 때만 +2
//String result = "";
//StringBuilder 사용
//StringBuilder sb = new StringBuilder(msg); 또는 추가(append)시킬거니까 msg 안적고 () 만 적어도 됨
StringBuilder sb = new StringBuilder();
for (int i = 0; i < msg.length(); i++) {
if (msg.charAt(i) == ' ') {
sb.append(msg.charAt(i));
} else {
sb.append((char)(msg.charAt(i)+2));
}
}
return sb.toString();
}
private String decrypt(String msg) {
//String result = "";
//StringBuilder 사용
StringBuilder sb = new StringBuilder();
for (int i = 0; i < msg.length(); i++) {
if (msg.charAt(i) == ' ') {
sb.append(msg.charAt(i));
} else {
sb.append((char)(msg.charAt(i)-2));
}
}
return sb.toString();
}
public static void main(String[] args) {
EncTest2 enc = new EncTest2();
String msg = "Hi.. Glad to meet you!!!";
System.out.println("암호화 전 : " + msg);
String str = enc.encrypt(msg); // +2
System.out.println("암호화 후 : " + str);
System.out.println("복호화 후 : " + enc.decrypt(str)); // -2
}
}
암호화 전 : Hi.. Glad to meet you!!!
암호화 후 : Jk00 Incf vq oggv {qw###
복호화 후 : Hi.. Glad to meet you!!!
MathEx.java
package com.day08;
public class MathEx {
public static void main(String[] args) {
double a = Math.PI;
System.out.println(a); //원주율
System.out.println(Math.ceil(a)); //올림
System.out.println(Math.floor(a)); //버림
System.out.println(Math.round(a)); //반올림
System.out.println(Math.round(3.6)); //반올림
System.out.println(Math.sqrt(9)); //제곱근
System.out.println(Math.exp(2)); //e의 2승
//난수(0~1사이 난수)
System.out.println(Math.random());
}
}
3.141592653589793
4.0
3.0
3
4
3.0
7.38905609893065
0.9152348924275858
조퇴 후 수업내용
CalendarEx.java
api > java.util > Classes > Calendar
캘린더(날짜와 관련됨)라는 클래스는 추상 클래스로, 추상 클래스는 생성할 수 없다 -> 아래의 getInstance()같은 함수를 이용해서 Calendar라는객체를 만든다
인자가 없을 수도 있고
Locale, TimeZone 같은 인자를 받을 수도 있다.
=> static이므로 new라는 이름으로 객체를 객성하지 않고 getInstance(~)같은 함수를 이용해서 static Calendar라는 객체를 return 시킨다.
package com.day08;
import java.util.Calendar;
public class CalendarEx {
public static void main(String[] args) {
Calendar now = Calendar.getInstance(); //new로 생성X -> 현재 날짜 알려줌
CalendarEx.printCalendar("현재 : ", now); //이건 강사님이 만든 것, 클래스 이름으로 접근 -> 6번에 적어줌
}
}
-> 더 입력
package com.day08;
import java.util.Calendar;
public class CalendarEx {
public static void printCalendar(String msg, Calendar cal) { //static을 쓰지 않으려면 CalendarEx에 대한 객체를 만들면 되는데 현재는 만들지 않은 상태라서 static이라고 써줘야 함
}
public static void main(String[] args) {
Calendar now = Calendar.getInstance(); //new로 생성하지 않고 now라는 객체 만듦 -> 아무 조건을 주지 않았기 때문에 현재 날짜 알려줌
CalendarEx.printCalendar("현재 : ", now); //이건 강사님이 만든 것, 클래스 이름으로 접근 -> 6번에 적어줌
}
}
-> 더 입력
package com.day08;
import java.util.Calendar;
public class CalendarEx {
public static void printCalendar(String msg, Calendar cal) { //static을 쓰지 않으려면 CalendarEx에 대한 객체를 만들면 되는데 현재는 만들지 않은 상태라서 static이라고 써줘야 함
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH);
System.out.println(msg + " : " + year + "/" + month);
}
public static void main(String[] args) {
Calendar now = Calendar.getInstance(); //new로 생성하지 않고 now라는 객체 만듦 -> 아무 조건을 주지 않았기 때문에 현재 날짜 알려줌
CalendarEx.printCalendar("현재 : ", now); //이건 강사님이 만든 것, 클래스 이름으로 접근 -> 6번에 적어줌
}
}
현재 : : 2021/0
달은 0부터 count 함 -> 1월 : 0 -> +1을 해주어야 우리가 아는 달로 표시 가능
package com.day08;
import java.util.Calendar;
public class CalendarEx {
public static void printCalendar(String msg, Calendar cal) { //static을 쓰지 않으려면 CalendarEx에 대한 객체를 만들면 되는데 현재는 만들지 않은 상태라서 static이라고 써줘야 함
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)+1; //0부터 시작하므로 +1 해주어야 함
int day = cal.get(Calendar.DAY_OF_MONTH);//한 달에 몇 번째
System.out.println(msg + " : " + year + "/" + month + "/" + day);
}
public static void main(String[] args) {
Calendar now = Calendar.getInstance(); //new로 생성하지 않고 now라는 객체 만듦 -> 아무 조건을 주지 않았기 때문에 현재 날짜 알려줌
CalendarEx.printCalendar("현재 : ", now); //이건 강사님이 만든 것, 클래스 이름으로 접근 -> 6번에 적어줌
}
}
현재 : : 2021/1/21
- 현재 연, 월, 일이 나왔다!
-> 요일 구하기
int dayOfweek = cal.get(Calendar.DAY_OF_WEEK);
System.out.println("요일 : " + dayOfweek);
요일 : 5
우리가 아는 대로 '목요일' 이라고 알려주지 않고 int형으로 알려준다.
문자형으로 바꾸어 주자 : switch문 이용
package com.day08;
import java.util.Calendar;
public class CalendarEx {
public static void printCalendar(String msg, Calendar cal) { //static을 쓰지 않으려면 CalendarEx에 대한 객체를 만들면 되는데 현재는 만들지 않은 상태라서 static이라고 써줘야 함
int dayOfweek = cal.get(Calendar.DAY_OF_WEEK);
System.out.println("요일 : " + dayOfweek); //int형으로, 숫자로 요일 알려줌, 일요일~토요일 : 1~7
switch(dayOfweek) {
case 1 : System.out.println("일요일"); break;
case 2 : System.out.println("월요일"); break;
case 3 : System.out.println("화요일"); break;
case 4 : System.out.println("수요일"); break;
case 5 : System.out.println("목요일"); break;
case 6 : System.out.println("금요일"); break;
case 7 : System.out.println("토요일"); break;
}
}
public static void main(String[] args) {
Calendar now = Calendar.getInstance(); //new로 생성하지 않고 now라는 객체 만듦 -> 아무 조건을 주지 않았기 때문에 현재 날짜 알려줌
CalendarEx.printCalendar("현재 : ", now); //이건 강사님이 만든 것, 클래스 이름으로 접근 -> 6번에 적어줌
}
}
요일 : 5
목요일
그러나 우리가 1이 일요일이다 이런걸 모를 수도 있음! 따라서 다른 방법으로 적어줘보자
package com.day08;
import java.util.Calendar;
public class CalendarEx {
public static void printCalendar(String msg, Calendar cal) { //static을 쓰지 않으려면 CalendarEx에 대한 객체를 만들면 되는데 현재는 만들지 않은 상태라서 static이라고 써줘야 함
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)+1; //0부터 시작하므로 +1 해주어야 함
int day = cal.get(Calendar.DAY_OF_MONTH);//한 달에 몇 번째
int dayOfweek = cal.get(Calendar.DAY_OF_WEEK);
System.out.println(msg + " : " + year + "/" + month + "/" + day);
System.out.println("요일 : " + dayOfweek); //int형으로, 숫자로 요일 알려줌, 일요일~토요일 : 1~7
switch(dayOfweek) {
case Calendar.SUNDAY : System.out.println("일요일"); break;
case Calendar.MONDAY : System.out.println("월요일"); break;
case Calendar.TUESDAY : System.out.println("화요일"); break;
case Calendar.WEDNESDAY : System.out.println("수요일"); break;
case Calendar.THURSDAY : System.out.println("목요일"); break;
case Calendar.FRIDAY : System.out.println("금요일"); break;
case Calendar.SATURDAY : System.out.println("토요일"); break;
}
}
public static void main(String[] args) {
Calendar now = Calendar.getInstance(); //new로 생성하지 않고 now라는 객체 만듦 -> 아무 조건을 주지 않았기 때문에 현재 날짜 알려줌
CalendarEx.printCalendar("현재 : ", now); //이건 강사님이 만든 것, 클래스 이름으로 접근 -> 6번에 적어줌
}
}
현재 : : 2021/1/21
요일 : 5
목요일
또 다른 방법 : 배열 이용하기
package com.day08;
import java.util.Calendar;
public class CalendarEx {
public static void printCalendar(String msg, Calendar cal) { //static을 쓰지 않으려면 CalendarEx에 대한 객체를 만들면 되는데 현재는 만들지 않은 상태라서 static이라고 써줘야 함
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)+1; //0부터 시작하므로 +1 해주어야 함
int day = cal.get(Calendar.DAY_OF_MONTH);//한 달에 몇 번째
int dayOfweek = cal.get(Calendar.DAY_OF_WEEK);
System.out.println(msg + " : " + year + "/" + month + "/" + day);
System.out.println("요일 : " + dayOfweek); //int형으로, 숫자로 요일 알려줌, 일요일~토요일 : 1~7
switch(dayOfweek) {
case Calendar.SUNDAY : System.out.println("일요일"); break;
case Calendar.MONDAY : System.out.println("월요일"); break;
case Calendar.TUESDAY : System.out.println("화요일"); break;
case Calendar.WEDNESDAY : System.out.println("수요일"); break;
case Calendar.THURSDAY : System.out.println("목요일"); break;
case Calendar.FRIDAY : System.out.println("금요일"); break;
case Calendar.SATURDAY : System.out.println("토요일"); break;
}
//배열로 int형으로 출력된 요일을 우리가 아는 문자로 바꾸기
String[] days = {"일", "월", "화", "수", "목", "금", "토"};
System.out.println("배열요일 : " + days[dayOfweek-1]);
}
public static void main(String[] args) {
Calendar now = Calendar.getInstance(); //new로 생성하지 않고 now라는 객체 만듦 -> 아무 조건을 주지 않았기 때문에 현재 날짜 알려줌
CalendarEx.printCalendar("현재 : ", now); //이건 강사님이 만든 것, 클래스 이름으로 접근 -> 6번에 적어줌
}
}
현재 : : 2021/1/21
요일 : 5
목요일
배열요일 : 목
배열로 구할 때는 일요일을 맨 앞에 넣어주기!
static은 클래스 이름으로 접근 가능 -> new로 객체를 만들지 않고 그냥 부르면 됨.
CalendarEx. 이렇게
항상 매개변수는 위치와 형을 정확하게 매치 시켜주면 된다.
오전 : 0, 오후 : 1
특정 날짜 구하기
- 객체 만들고, 날짜 지정 후 출력
package com.day08;
import java.util.Calendar;
public class CalendarEx {
public static void printCalendar(String msg, Calendar cal) { //static을 쓰지 않으려면 CalendarEx에 대한 객체를 만들면 되는데 현재는 만들지 않은 상태라서 static이라고 써줘야 함
}
public static void main(String[] args) {
//특정 날짜 구하기
Calendar someday = Calendar.getInstance();
someday.set(2020, 11, 25);
CalendarEx.printCalendar("어느 날 ", someday);
}
}
어느 날 : 2020/12/25
요일 : 6
금요일
배열요일 : 금
=================
7 : 51 : 20 : 666
ampm : 1
오후
아 월은 0부터 시작하니까 2020 11 25 라고 하면 작년인 20/12/25이고 그 날은 금요일.
시간은 따로 정해주지 않아서 현재 내 시간 나옴
package com.day08;
import java.util.Calendar;
public class CalendarEx {
public static void printCalendar(String msg, Calendar cal) { //static을 쓰지 않으려면 CalendarEx에 대한 객체를 만들면 되는데 현재는 만들지 않은 상태라서 static이라고 써줘야 함
int year = cal.get(Calendar.YEAR);
int month = cal.get(Calendar.MONTH)+1; //0부터 시작하므로 +1 해주어야 함
int day = cal.get(Calendar.DAY_OF_MONTH);//한 달에 몇 번째
int dayOfweek = cal.get(Calendar.DAY_OF_WEEK);
System.out.println(msg + " : " + year + "/" + month + "/" + day);
System.out.println("요일 : " + dayOfweek); //int형으로, 숫자로 요일 알려줌, 일요일~토요일 : 1~7
switch(dayOfweek) {
case Calendar.SUNDAY : System.out.println("일요일"); break;
case Calendar.MONDAY : System.out.println("월요일"); break;
case Calendar.TUESDAY : System.out.println("화요일"); break;
case Calendar.WEDNESDAY : System.out.println("수요일"); break;
case Calendar.THURSDAY : System.out.println("목요일"); break;
case Calendar.FRIDAY : System.out.println("금요일"); break;
case Calendar.SATURDAY : System.out.println("토요일"); break;
}
//배열로 int형으로 출력된 요일을 우리가 아는 문자로 바꾸기
String[] days = {"일", "월", "화", "수", "목", "금", "토"};
System.out.println("배열요일 : " + days[dayOfweek-1]);
System.out.println("=================");
int hour = cal.get(Calendar.HOUR); //Caldenar라는 객체에 HOUR라는게 있다.
int min = cal.get(Calendar.MINUTE);
int sec = cal.get(Calendar.SECOND);
int millis = cal.get(Calendar.MILLISECOND); // 1sec = 1000ms
int ampm = cal.get(Calendar.AM_PM);
System.out.println(hour + " : " + min + " : " + sec + " : " + millis);
System.out.println("ampm : " + ampm);
if(ampm == Calendar.AM) {
System.out.println("오전");
} else { //ampm = Calendar.PM
System.out.println("오후");
}
}
public static void main(String[] args) {
Calendar now = Calendar.getInstance(); //new로 생성하지 않고 now라는 객체 만듦 -> 아무 조건을 주지 않았기 때문에 현재 날짜 알려줌
CalendarEx.printCalendar("현재 : ", now); //이건 강사님이 만든 것, 클래스 이름으로 접근 -> 6번에 적어줌
//특정 날짜 구하기
Calendar someday = Calendar.getInstance();
someday.set(2020, 11, 25);
CalendarEx.printCalendar("어느 날 ", someday);
}
}
현재 : : 2021/1/21
요일 : 5
목요일
배열요일 : 목
=================
7 : 51 : 20 : 648
ampm : 1
오후
어느 날 : 2020/12/25
요일 : 6
금요일
배열요일 : 금
=================
7 : 51 : 20 : 666
ampm : 1
오후
아~ 이런 것이 있구나~ 정도만 알고 기억이 안나면 나중에 찾아서 쓰면 된다!
CalendarTest.java 생년월일을 입력 받아서 나이, 태어난 요일을 알려주기
package com.day08;
import java.util.Scanner;
public class CalendarTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//생년월일 입력 받기
System.out.println("생년월일 입력(yyyyMMdd >>"); //19801115 이런 식으로 입력
String birth = sc.next(); //19801115
//나이, 성별, 태어난 요일 알려주기
System.out.println("나이 : "); //2021-1980
System.out.println("성별 : ");
System.out.println("태어난 날의 요일 : ");
}
}
==>
package com.day08;
import java.util.Calendar;
import java.util.Scanner;
public class CalendarTest {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
//생년월일 입력 받기
System.out.println("생년월일 입력(yyyyMMdd) >>"); //19801115 이런 식으로 입력
Calendar today = Calendar.getInstance();
String birth = sc.next(); //19801115 -> 문자열로 받는 것이 나음
//나이, 성별, 태어난 요일 알려주기
int year = Integer.parseInt(birth.substring(0,4));//1980 연도만 추출한 뒤 문자형 -> int형으로 변경해주기
System.out.println("나이 : " + (today.get(Calendar.YEAR)-year)); //올해연도-입력받은 년도
int month = Integer.parseInt(birth.substring(4,6));
int day = Integer.parseInt(birth.substring(6,8));
Calendar birthday = Calendar.getInstance();
birthday.set(year, month-1, day);
String[] arr = {"일","월","화","수","목","금","토"};
System.out.println("태어난 요일 : " + arr[birthday.get(Calendar.DAY_OF_WEEK)-1]);//0부터 카운트 되므로 -> 금요일이면 6을 알려줬을 것. 위의 배열에서 금요일의 위치는 5이므로 -1해줘야 함
}
}
생년월일 입력(yyyyMMdd) >>
20201225
나이 : 1
태어난 요일 : 금
ObjectPropertyEx.java
package com.day08;
class Point{
private int x;
private int y;
public Point(int x, int y) { //생성자
this.x = x;
this.y = y;
}
}
public class ObjectPropertyEx {
public static void main(String[] args) {
Point p = new Point(2, 3); //Point 객체 만들기
ObjectPropertyEx.print(p); //클래스 이름으로 print에 접근했다? -> static으로 만들겠다는 소리
}
}
package com.day08;
class Point{
private int x;
private int y;
public Point(int x, int y) { //생성자
this.x = x;
this.y = y;
}
}
public class ObjectPropertyEx {
public static void print(Object obj) { //return값 없음 : void
System.out.println(obj.getClass().getName()); //클래스 객체를 가져와서 이름 출력 -> com.day08.Point : 클래스를 가져오는 방법
System.out.println(obj.hashCode()); //p.363 index처럼 주소값 알려줌 -> 1435084085
System.out.println(obj); //com.day08.Point@5594a1b5 -> getClass().getName() + @ + hashCode(); 16진수로 바꿔서 표현
System.out.println(obj.toString());//com.day08.Point@5594a1b5 -> 이렇게 주소값을 찍어주기보다는 toString을 오버라이드해서 객체에 대한 정보를 알아보기 쉽게 알려주기
}
public static void main(String[] args) {
Point p = new Point(2, 3); //Point 객체 만들기
ObjectPropertyEx.print(p); //클래스 이름으로 print에 접근했다? -> static으로 만들겠다는 소리
}
}
com.day08.Point
1435804085
com.day08.Point@5594a1b5
com.day08.Point@5594a1b5
package com.day08;
class Point{
private int x;
private int y;
public Point(int x, int y) { //생성자
this.x = x;
this.y = y;
}
@Override
public String toString() {
return "(" + x + "," + y + ")";
}
}
public class ObjectPropertyEx {
public static void print(Object obj) { //return값 없음 : void
System.out.println(obj.getClass().getName()); //클래스 객체를 가져와서 이름 출력 -> com.day08.Point : 클래스를 가져오는 방법
System.out.println(obj.hashCode()); //p.363 index처럼 주소값 알려줌 -> 1435084085
System.out.println(obj); //com.day08.Point@5594a1b5 -> getClass().getName() + @ + hashCode(); 16진수로 바꿔서 표현
System.out.println(obj.toString());//com.day08.Point@5594a1b5 -> 이렇게 주소값을 찍어주기보다는 toString을 오버라이드해서 객체에 대한 정보를 알아보기 쉽게 알려주기
}
public static void main(String[] args) {
Point p = new Point(2, 3); //Point 객체 만들기
ObjectPropertyEx.print(p); //클래스 이름으로 print에 접근했다? -> static으로 만들겠다는 소리
}
}
com.day08.Point
1435804085
(2,3)
(2,3)
기본적으로 obj는 toString을 부르기 때문에 System.out.println(obj); 했을 때 오버라이딩 전처럼 com.day08.Point@5594a1b5이 나오는게 아니라 둘 다 toString을 오버라이딩 한 후 값인 (2,3)이 나오는 것
p와 p2는 같다고 할 수 있을까?
아무것도 출력되지 않음
package com.day08;
class Point{
private int x;
private int y;
public Point(int x, int y) { //생성자
this.x = x;
this.y = y;
}
@Override
public String toString() {
return "(" + x + "," + y + ")";
}
}
public class ObjectPropertyEx {
public static void print(Object obj) { //return값 없음 : void
System.out.println(obj.getClass().getName()); //클래스 객체를 가져와서 이름 출력 -> com.day08.Point : 클래스를 가져오는 방법
System.out.println(obj.hashCode()); //p.363 index처럼 주소값 알려줌 -> 1435084085
System.out.println(obj); //com.day08.Point@5594a1b5 -> getClass().getName() + @ + hashCode(); 16진수로 바꿔서 표현
System.out.println(obj.toString());//com.day08.Point@5594a1b5 -> 이렇게 주소값을 찍어주기보다는 toString을 오버라이드해서 객체에 대한 정보를 알아보기 쉽게 알려주기
}
public static void main(String[] args) {
Point p = new Point(2, 3); //Point 객체 만들기
ObjectPropertyEx.print(p); //클래스 이름으로 print에 접근했다? -> static으로 만들겠다는 소리
Point p1 = new Point(2, 3);
Point p2 = new Point(3, 4); //p와 p1은 같다고 할 수 있을까?
if(p==p1) { //당연히 주소 다름
System.out.println("p==p1");
} if(p.equals(p1)) { //p와 p1의 내용 비교 -> 객체의 내용이 같을 때 같다고 함 -> 어디까지가 객체인가? -> 두 사람이 같다는 것은 성적이 같다? 평균이 같다? 키가 같다? 같다는 말이 애매모호하다. -> equals라는 걸 재정의해줄 필요가 있다 -> equals를 오버라이딩 시키자.
System.out.println("p equals p1");
} if(p.equals(p2)) {
System.out.println("p equals p2");
}
}
}
p와 p1은 당연히 주소 다름
-> 출력X
p와 p1의 객체의 내용이 같은가?
p와 p2의 객체의 내용이 같은가?
equals
어디까지가 객체인가? -> 두 사람이 같다는 것은 성적이 같다? 평균이 같다? 키가 같다? 같다는 말이 애매모호하다. -> equals라는 걸 재정의해줄 필요가 있다 -> equals를 오버라이딩 시키자.
package com.day08;
class Point{
private int x;
private int y;
public Point(int x, int y) { //생성자
this.x = x;
this.y = y;
}
@Override
public String toString() {
return "(" + x + "," + y + ")";
}
@Override
public boolean equals(Object obj) {//Object로 받음 -> 특정 객체, ex Point 로 변환 되어져야 함
// 두 좌표가 같다면 같은 걸로 정의해주어야 같은지 다른지 비교가 가능
Point p = (Point) obj;
if(x==p.x && y==p.y) return true;
else return false;
} //equals는 Object가 가지고 있는 것이기 때문에 오버라이딩 할 수 있다.
}
public class ObjectPropertyEx {
public static void print(Object obj) { //return값 없음 : void
System.out.println(obj.getClass().getName()); //클래스 객체를 가져와서 이름 출력 -> com.day08.Point : 클래스를 가져오는 방법
System.out.println(obj.hashCode()); //p.363 index처럼 주소값 알려줌 -> 1435084085
System.out.println(obj); //com.day08.Point@5594a1b5 -> getClass().getName() + @ + hashCode(); 16진수로 바꿔서 표현
System.out.println(obj.toString());//com.day08.Point@5594a1b5 -> 이렇게 주소값을 찍어주기보다는 toString을 오버라이드해서 객체에 대한 정보를 알아보기 쉽게 알려주기
}
public static void main(String[] args) {
Point p = new Point(2, 3); //Point 객체 만들기
ObjectPropertyEx.print(p); //클래스 이름으로 print에 접근했다? -> static으로 만들겠다는 소리
Point p1 = new Point(2, 3);
Point p2 = new Point(3, 4); //p와 p1은 같다고 할 수 있을까?
if(p==p1) { //당연히 주소 다름
System.out.println("p==p1");
} if(p.equals(p1)) { //p와 p1의 내용 비교 -> 객체의 내용이 같을 때 같다고 함 -> 어디까지가 객체인가? -> 두 사람이 같다는 것은 성적이 같다? 평균이 같다? 키가 같다? 같다는 말이 애매모호하다. -> equals라는 걸 재정의해줄 필요가 있다 -> equals를 오버라이딩 시키자.
System.out.println("p equals p1");
} if(p.equals(p2)) {
System.out.println("p equals p2");
}
}
}
com.day08.Point
1435804085
(2,3)
(2,3)
p equals p1
equals는 Object가 가지고 있는 것이기 때문에 오버라이딩 할 수 있다.
상속 예제
ShapeMain.java
package com.day08;
import java.util.Scanner;
class ShapeManager {
//도형 입력(원 또는 사각형) -> 원 : 중심좌표 x, y와 반지름 r 입력받고, 사각형 : x, y, 가로와 세로 w, h
public void inputData(int choice) { //choice가 1이면 원, 2이면 사각형
System.out.println("도형입력...");
System.out.println("x좌표 >> "); //원, 사각형 모두 공통되는 중심좌표 x, y 먼저 물어보기
int x = ShapeMain.sc.nextInt();
System.out.println("y좌표 >> "); //원, 사각형 모두 공통되는 중심좌표 x, y 먼저 물어보기
int y = ShapeMain.sc.nextInt();
if(choice == 1) { //원
System.out.println("반지름 >> ");
int r = ShapeMain.sc.nextInt();
} else if(choice == 2) { //사각형
System.out.println("가로 폭 >> ");
int w = ShapeMain.sc.nextInt();
System.out.println("세로 높이 >> ");
int h = ShapeMain.sc.nextInt();
}
}
public void viewData() {
}
}
public class ShapeMain {
static Scanner sc = new Scanner(System.in);
static void showMenu() {
System.out.println("선택하세요");
System.out.println("1.원, 2.사각형, 3.보기, 4.종료");
}
public static void main(String[] args) {
ShapeManager sm = new ShapeManager();
while(true) { //언제까지 돌릴지 모르니까 while(true)
ShapeMain.showMenu(); //일부러 static으로 접근
int choice = ShapeMain.sc.nextInt();
switch(choice) {
case 1 : //원 -> 어차피 아래 inputData()로 내려가니까 적어주지 않음
case 2 : sm.inputData(choice); break; //1, 2둘 다 inputData();
case 3 : sm.viewData(); break;
case 4 : System.out.println("종료");
System.exit(0);
default : System.out.println("입력오류");
}
}
}
}
여기까지 함께 입력하고 조건을 주면 혼자 해보기
ArrayList 이용
원 ==> Circle
사각형 ==> Square
부모 ==> Shape
출력 : 입력한 좌표 x, y +원 : 반지름r, 사각형 : 가로 세로 w, h까지 출력
==> ArrayList 만들고 객체를 원, 사각형 만들고 이 두개를 아우르는 부모 Shape 까지 합해서 3개의 클래스(Circle, Square, Shape) 만들기
package com.day08;
import java.util.ArrayList;
import java.util.Scanner;
//ArrayList 이용 -> 매니저가 가지고 있어야 함
// 원 ==> Circle
// 사각형 ==> Square
// 부모 ==> Shape
// 출력 : 입력한 x, y좌표 + 원이면 반지름 r까지, 사각형이면 가로 세로 w, h까지 출력
class Shape {
private int x, y; //자식이 공통으로 가지는 것
public Shape(int x, int y) {
this.x = x;
this.y = y;
}
}
class Circle extends Shape {
private int r; //공통으로 가지는 것 외에 자기만 가지는 것 : 반지름 r
public Circle(int x, int y, int r) {//x, y는 부모가 가지고 있음
super(x,y);
this.r = r;
}
}
class Square extends Shape {
private int w, h; //공통으로 가지는 것 외에 자기만 가지는 것 : 가로 w, 세로 h
public Square(int x, int y, int w, int h) { //x, y는 부모가 가지고 있음
super(x,y);
this.w = w;
this.h = h;
}
}
class ShapeManager {
//도형 입력(원 또는 사각형) -> 원 : 중심좌표 x, y와 반지름 r 입력받고, 사각형 : x, y, 가로와 세로 w, h
ArrayList<Shape> alist = new ArrayList<>(); //alist는 Circle형과 Square형을 아우르는 부모 Shape형을 가져야 한다
public void inputData(int choice) { //choice가 1이면 원, 2이면 사각형
System.out.println("도형입력...");
System.out.println("x좌표 >> "); //원, 사각형 모두 공통되는 중심좌표 x, y 먼저 물어보기
int x = ShapeMain.sc.nextInt();
System.out.println("y좌표 >> "); //원, 사각형 모두 공통되는 중심좌표 x, y 먼저 물어보기
int y = ShapeMain.sc.nextInt();
if(choice == 1) { //원
System.out.println("반지름 >> ");
int r = ShapeMain.sc.nextInt();
alist.add(new Circle(x,y,r)); //인자 있는 생성자 필요 -> 16번
} else if(choice == 2) { //사각형
System.out.println("가로 폭 >> ");
int w = ShapeMain.sc.nextInt();
System.out.println("세로 높이 >> ");
int h = ShapeMain.sc.nextInt();
alist.add(new Square(x,y,w,h));
}
}
public void viewData() {
}
}
public class ShapeMain {
static Scanner sc = new Scanner(System.in);
static void showMenu() {
System.out.println("선택하세요");
System.out.println("1.원, 2.사각형, 3.보기, 4.종료");
}
public static void main(String[] args) {
ShapeManager sm = new ShapeManager();
while(true) { //언제까지 돌릴지 모르니까 while(true)
ShapeMain.showMenu(); //일부러 static으로 접근
int choice = ShapeMain.sc.nextInt();
switch(choice) {
case 1 : //원 -> 어차피 아래 inputData()로 내려가니까 적어주지 않음
case 2 : sm.inputData(choice); break; //1, 2둘 다 inputData();
case 3 : sm.viewData(); break;
case 4 : System.out.println("종료");
System.exit(0);
default : System.out.println("입력오류");
}
}
}
}
이제 viewData() 남음!
이렇게 해주면 x, y만 출력 가능..
그러나 Circle은 r도 출력해야하고 Square은 w, h도 출력 해야 함 -> print()를 오버라이딩 시켜주기!
package com.day08;
import java.util.ArrayList;
import java.util.Scanner;
//ArrayList 이용 -> 매니저가 가지고 있어야 함
// 원 ==> Circle
// 사각형 ==> Square
// 부모 ==> Shape
// 출력 : 입력한 x, y좌표 + 원이면 반지름 r까지, 사각형이면 가로 세로 w, h까지 출력
class Shape {
private int x, y; //자식이 공통으로 가지는 것
public Shape(int x, int y) {
this.x = x;
this.y = y;
}
public void print() {
System.out.println("좌표(x,y) = " + x + "," + y);
}
}
class Circle extends Shape {
private int r; //공통으로 가지는 것 외에 자기만 가지는 것 : 반지름 r
public Circle(int x, int y, int r) {//x, y는 부모가 가지고 있음
super(x,y);
this.r = r;
}
@Override
public void print() {
super.print();
System.out.println("반지름 : " + r);
}
}
class Square extends Shape {
private int w, h; //공통으로 가지는 것 외에 자기만 가지는 것 : 가로 w, 세로 h
public Square(int x, int y, int w, int h) { //x, y는 부모가 가지고 있음
super(x,y);
this.w = w;
this.h = h;
}
@Override
public void print() {
super.print();
System.out.println("가로 : " + w + "세로 : " + h );
}
}
class ShapeManager {
//도형 입력(원 또는 사각형) -> 원 : 중심좌표 x, y와 반지름 r 입력받고, 사각형 : x, y, 가로와 세로 w, h
ArrayList<Shape> alist = new ArrayList<>(); //alist는 Circle형과 Square형을 아우르는 부모 Shape형을 가져야 한다
public void inputData(int choice) { //choice가 1이면 원, 2이면 사각형
System.out.println("도형입력...");
System.out.println("x좌표 >> "); //원, 사각형 모두 공통되는 중심좌표 x, y 먼저 물어보기
int x = ShapeMain.sc.nextInt();
System.out.println("y좌표 >> "); //원, 사각형 모두 공통되는 중심좌표 x, y 먼저 물어보기
int y = ShapeMain.sc.nextInt();
if(choice == 1) { //원
System.out.println("반지름 >> ");
int r = ShapeMain.sc.nextInt();
alist.add(new Circle(x,y,r)); //인자 있는 생성자 필요 -> 16번
} else if(choice == 2) { //사각형
System.out.println("가로 폭 >> ");
int w = ShapeMain.sc.nextInt();
System.out.println("세로 높이 >> ");
int h = ShapeMain.sc.nextInt();
alist.add(new Square(x,y,w,h));
}
}
public void viewData() {
for(Shape s : alist) {
s.print(); //좌표 두개는 부모가 가지고 있다. -> Shape에 print() 추가 해주기
}
}
}
public class ShapeMain {
static Scanner sc = new Scanner(System.in);
static void showMenu() {
System.out.println("선택하세요");
System.out.println("1.원, 2.사각형, 3.보기, 4.종료");
}
public static void main(String[] args) {
ShapeManager sm = new ShapeManager();
while(true) { //언제까지 돌릴지 모르니까 while(true)
ShapeMain.showMenu(); //일부러 static으로 접근
int choice = ShapeMain.sc.nextInt();
switch(choice) {
case 1 : //원 -> 어차피 아래 inputData()로 내려가니까 적어주지 않음
case 2 : sm.inputData(choice); break; //1, 2둘 다 inputData();
case 3 : sm.viewData(); break;
case 4 : System.out.println("종료");
System.exit(0);
default : System.out.println("입력오류");
}
}
}
}
선택하세요
1.원, 2.사각형, 3.보기, 4.종료
1
도형입력...
x좌표 >>
3
y좌표 >>
4
반지름 >>
3
선택하세요
1.원, 2.사각형, 3.보기, 4.종료
2
도형입력...
x좌표 >>
1
y좌표 >>
2
가로 폭 >>
3
세로 높이 >>
1
선택하세요
1.원, 2.사각형, 3.보기, 4.종료
1
도형입력...
x좌표 >>
4
y좌표 >>
6
반지름 >>
4
선택하세요
1.원, 2.사각형, 3.보기, 4.종료
2
도형입력...
x좌표 >>
2
y좌표 >>
3
가로 폭 >>
4
세로 높이 >>
2
선택하세요
1.원, 2.사각형, 3.보기, 4.종료
3
좌표(x,y) = 3,4
반지름 : 3
좌표(x,y) = 1,2
가로 : 3세로 : 1
좌표(x,y) = 4,6
반지름 : 4
좌표(x,y) = 2,3
가로 : 4세로 : 2
선택하세요
1.원, 2.사각형, 3.보기, 4.종료
4
종료
조금 더 보기 쉽도록 만들어주기
package com.day08;
import java.util.ArrayList;
import java.util.Scanner;
//ArrayList 이용 -> 매니저가 가지고 있어야 함
// 원 ==> Circle
// 사각형 ==> Square
// 부모 ==> Shape
// 출력 : 입력한 x, y좌표 + 원이면 반지름 r까지, 사각형이면 가로 세로 w, h까지 출력
class Shape {
private int x, y; //자식이 공통으로 가지는 것
public Shape(int x, int y) {
this.x = x;
this.y = y;
}
public void print() {
System.out.println("좌표(x,y) = " + x + "," + y);
}
}
class Circle extends Shape {
private int r; //공통으로 가지는 것 외에 자기만 가지는 것 : 반지름 r
public Circle(int x, int y, int r) {//x, y는 부모가 가지고 있음
super(x,y);
this.r = r;
}
@Override
public void print() {
super.print();
System.out.println("반지름 : " + r);
System.out.println();
}
}
class Square extends Shape {
private int w, h; //공통으로 가지는 것 외에 자기만 가지는 것 : 가로 w, 세로 h
public Square(int x, int y, int w, int h) { //x, y는 부모가 가지고 있음
super(x,y);
this.w = w;
this.h = h;
}
@Override
public void print() {
super.print();
System.out.println("가로 폭 : " + w);
System.out.println("세로 높이 : " + h);
System.out.println();
}
}
class ShapeManager {
//도형 입력(원 또는 사각형) -> 원 : 중심좌표 x, y와 반지름 r 입력받고, 사각형 : x, y, 가로와 세로 w, h
ArrayList<Shape> alist = new ArrayList<>(); //alist는 Circle형과 Square형을 아우르는 부모 Shape형을 가져야 한다
public void inputData(int choice) { //choice가 1이면 원, 2이면 사각형
System.out.println("도형입력...");
System.out.println("x좌표 >> "); //원, 사각형 모두 공통되는 중심좌표 x, y 먼저 물어보기
int x = ShapeMain.sc.nextInt();
System.out.println("y좌표 >> "); //원, 사각형 모두 공통되는 중심좌표 x, y 먼저 물어보기
int y = ShapeMain.sc.nextInt();
if(choice == 1) { //원
System.out.println("반지름 >> ");
int r = ShapeMain.sc.nextInt();
alist.add(new Circle(x,y,r)); //인자 있는 생성자 필요 -> 16번
} else if(choice == 2) { //사각형
System.out.println("가로 폭 >> ");
int w = ShapeMain.sc.nextInt();
System.out.println("세로 높이 >> ");
int h = ShapeMain.sc.nextInt();
alist.add(new Square(x,y,w,h));
}
}
public void viewData() {
for(Shape s : alist) {
s.print(); //좌표 두개는 부모가 가지고 있다. -> Shape에 print() 추가 해주기
}
}
}
public class ShapeMain {
static Scanner sc = new Scanner(System.in);
static void showMenu() {
System.out.println("선택하세요");
System.out.println("1.원, 2.사각형, 3.보기, 4.종료");
}
public static void main(String[] args) {
ShapeManager sm = new ShapeManager();
while(true) { //언제까지 돌릴지 모르니까 while(true)
ShapeMain.showMenu(); //일부러 static으로 접근
int choice = ShapeMain.sc.nextInt();
switch(choice) {
case 1 : //원 -> 어차피 아래 inputData()로 내려가니까 적어주지 않음
case 2 : sm.inputData(choice); break; //1, 2둘 다 inputData();
case 3 : sm.viewData(); break;
case 4 : System.out.println("종료");
System.exit(0);
default : System.out.println("입력오류");
}
}
}
}
선택하세요
1.원, 2.사각형, 3.보기, 4.종료
1
도형입력...
x좌표 >>
2
y좌표 >>
2
반지름 >>
4
선택하세요
1.원, 2.사각형, 3.보기, 4.종료
2
도형입력...
x좌표 >>
3
y좌표 >>
3
가로 폭 >>
4
세로 높이 >>
2
선택하세요
1.원, 2.사각형, 3.보기, 4.종료
1
도형입력...
x좌표 >>
3
y좌표 >>
3
반지름 >>
5
선택하세요
1.원, 2.사각형, 3.보기, 4.종료
2
도형입력...
x좌표 >>
4
y좌표 >>
6
가로 폭 >>
3
세로 높이 >>
4
선택하세요
1.원, 2.사각형, 3.보기, 4.종료
3
좌표(x,y) = 2,2
반지름 : 4
좌표(x,y) = 3,3
가로 폭 : 4
세로 높이 : 2
좌표(x,y) = 3,3
반지름 : 5
좌표(x,y) = 4,6
가로 폭 : 3
세로 높이 : 4
선택하세요
1.원, 2.사각형, 3.보기, 4.종료
4
종료
오버라이딩 : 부모에게 있는 원본을 자식이 자기에게 맞게 가져다 바꿔서 사용하는 것
'프로그래밍 > 자바(java) 융합개발자 2차' 카테고리의 다른 글
[자바 10일차] 29일차 - Thread, 예외처리 (p.487~) (0) | 2021.01.25 |
---|---|
[자바 9일차] 28일차 - 컬렉션 프레임워크 (p.404~447) (0) | 2021.01.22 |
[자바 7일차] 26일차 - 상속, 추상클래스, 추상메서드 , 인터페이스(Do it 공부단 p.234~) (0) | 2021.01.20 |
[자바 6일차] 25일차 - 다차원 배열, 상속(Do it 공부단 p.219~) (0) | 2021.01.20 |
[자바 5일차] 24일 - ArrayList (0) | 2021.01.18 |