스포츠마케터의 초보 개발자 도전기
JAVA study 08 본문
오늘 아침 지하철에서 핸드폰으로 무슨 영상을 봤는데 "인간은 망각의 동물이라 오래 기억 못한다. 그래서 나쁜일을 잊을 수 있어서 참 다행이다."라고 그러더라... 근데 문제가 공부한것까지 함께 날아가서 참...
1. String class
package ex1_string;
import java.util.Scanner;
public class Ex1_string {
public static void main(String[] args) {
// String class
// String class의 두가지 특징
// 1) 객체 생성방법이 두가지 ( 암시적, 명시적 )
// 1-1) 암시적 객체생성 - stack 메모리에서 A1이 heap 메모리 영역을 콜할때 heap 메모리 영역에 자료가 없으면 새롭게 생성.
// A2가 A1과 같은 값을 만드려고 한다면 A1이 만든 값을 암시적 객체 생성. String은 유일하게 암시적, 명시적이 모두 가능
// 1-2) 명시적 객체생성 - heap 메모리 새로운 주소에 새롭게(new) 만듬
// 2) 한번 생성된 문자열의 내용은 변하지 않는다 (immutable 불변의 특징)
// 암시적 객체생성의 예
/*String s1 = "abc";
String s2 = "abc";
String s3 = new String("abc"); // 명시적 객체생성
// 객체간 비교시 ==은 값이 아닌 "주소"를 비교
if (s1 == s3) {
System.out.println("같습니다.");
} else {
System.out.println("다릅니다.");
}
// 객체간 heap 메모리의 입력값 비교 ().equals()
if ( s1.equals(s3)) {
System.out.println("같습니다.");
}else {
System.out.println("다릅니다.");
}
Scanner sc = new Scanner(System.in);
System.out.println("y or n : ");
String ss = sc.next();
if(ss.equals("y")) {
System.out.println("y입력완료");
}else {
System.out.println("n입력완료");
}*/
// 2) 생성된 문자열의 내용은 변하지 않아서 원래 값에 어떤 값을 추가하면
// 원래내용에 새롭게 추가한 값을 더한 새로운 영역을 만들고 원래 내용만 있는 영역은 heap메모리 영역안에 garbage collector가 자동 삭제한다.
String greet = "hello";
greet += " world";
System.out.println(greet);
String a1 = "abc";
String a2 = "abc";
a2 = "ddd";
}// main
}
2. String Method
package ex2_string_method;
public class Ex1_stringMethod {
public static void main(String[] args) {
// <String Method>
//Method란 어떠한 작업을 수행하기 위한 명령문들의 집합 (method 코드는 기본적으로 ()를 가지고 있다._
//반복적으로 사용되는 코드를 Method의 재활용을 통해 줄여줄 수 있다
String name = "Hong Gil Dong";
// .length 값의 길이
int idx = name.length();
System.out.println("1. name의 길이 : " + idx);
// .indexOf
idx = name.indexOf('o'); //찾는 값의 처음 위치를 알려줌
System.out.println("2. 맨 처음 o의 위치 : " + idx);
idx = name.indexOf('z'); //찾는 값이 없으면 -1을 돌려줌
System.out.println("3. 맨 처음 o의 위치 : " + idx);
idx = name.indexOf("Gil"); //문장 Gil의 시작 위치도 가능
System.out.println("4. 맨 처음 o의 위치 : " + idx);
idx = name.lastIndexOf("o"); //찾는 값의 마지막 위치를 알려줌
System.out.println("5. 마지막 o의 위치 : " + idx);
// .charAt
char c = name.charAt(7);
System.out.println("6. 7번째 위치의 문자 : " + c);
// .substring
String str = name.substring(5, 8); //(0부터 시작)5번째부터 8앞의 (7)번째 값
System.out.println("7. : " + str);
// .split : 공백을 기준으로 배열에 입력
String[] sArr = name.split(" ");
for(int i = 0; i < sArr.length; i++) {
System.out.println("8. 배열에 입력된 값 : " + sArr[i]);
}
// .replace : 문장교체
String greet = "hello world";
String g2 = greet.replace("world", "java");
System.out.println("9. greet을 변경한 g2의 값 : " + g2);
// .trim : 앞뒤 공백 제거
String s1 = " jyh ";
System.out.println("10-1. 이건 몇자지? " + s1.length());
if(s1.trim().equals("jyh")) {
System.out.println("10. trim쓰면 앞뒤 공백이 제거되서 3글자로 값이 같다");
}
// .equalsIgnoreCase : 대소문자 구분없이 같다고 인식
String que = "apple";
String ans = "Apple";
if(que.equalsIgnoreCase(ans)) {
System.out.println("11. 대소문자가 다른 두 글자가 같다고 인식해서 정답");
}
// Integer.parseInt(숫자형태문장) : 숫자형태문장을 실제 정수로 바꿔 줌
String number = "80";
int num = Integer.parseInt(number);
System.out.println("12. 80이 숫자로 바꿔 인식하고 + 1도 잘됨 : " + num + 1);
// <기본 자료형의 wrapper class>
// int - Integer
// char - Character
// boolean - Boolean
// byte - Byte
// short - Shout
// long - Long
// float - Float
// double - Double
}//main
}
예제1) 이메일 받기
package ex2_string_method;
import java.util.Scanner;
public class Ex2_work {
public static void main(String[] args) {
//사용자의 이메일을 입력받ㄷ고 @ 앞의 문장의 길이가 5미만 9초과인 경우
//오류메시지 출력하기
//이메일 : abc@n.com
//이메일의 형식이 올바르지 않습니다.
//이메일 : aabbcc@n.com
//aaccbbs님 환영합니다.
Scanner sc = new Scanner(System.in);
//이메일 입력받기
System.out.println("이메일을 입력하세요");
String email = sc.next();
//이메일 체크받기
String[] check = email.split("@");
int leng = check[0].length();
if(leng < 5 || leng > 9) {
System.out.println("@앞에는 5~9 글자의 이메일을 입력하세요.");
}else{
System.out.println(check[0] + "님 환영합니다.");
}
//tCode
String[] sp = email.split("@");
String res = check[0];
if(res.length() < 5 || res.length() > 9) {
System.out.println("@앞에는 5~9 글자의 이메일을 입력하세요.");
}else{
System.out.println(res + "님 환영합니다.");
}
}//main
}
예제2) 입력받은 값중 소문자a의 갯수
package ex2_string_method;
import java.util.Scanner;
public class Ex3_work {
public static void main(String[] args) {
// 키보드를 통해 공백 없이 아무값이나 입력을 받는다
// 입력받은 문자열에 소문자 a의 갯수를 출력
Scanner sc = new Scanner(System.in);
// 입력받기
System.out.println("키보드를 이용하여 아무값이나 공백없이 입력하세요");
String test = sc.next();
int cnt = 0;
for (int i = 0; i < test.length(); i++) {
if(test.charAt(i) == 'a') {
cnt++;
}
}
System.out.println("a의 갯수는 " + cnt);
}// main
}
예제3) OXOOX
package ex2_string_method;
public class Ex4_work {
public static void main(String[] args) {
// 변수 question에 O, X 값을 집어 넣는다.
// OOXXO 라면 1 + 2 + 0 + 0 + 1의 결과인 4
// OXXOOXOOO 라면 1+0+0+1+2+0+1+2+3의 결과인 10
String question = "OOXXOOXO";
int oPlus = 0;
int sum = 0;
for (int i = 0; i < question.length(); i++) {
if (question.charAt(i) == 'O') {
oPlus++;
sum += oPlus;
} else {
oPlus = 0;
continue;
}
}
System.out.println(sum);
}// main
}
과제) 홀수 마방진 만들기
몇시간을 혼자 끙끙댔는지 모르겠다만, 마방진의 규칙을 알고나니 너무 쉽게 풀려버렸다.
package ex3_work;
import java.util.Scanner;
public class Ex1_square {
public static void main(String[] args) {
// 키보드에서 홀수값을 입력받으면
// 입력받은 값에 따라 규칙을 가지는 "마방진"을 생성한다
// --
// 홀수 : 3 입력시 3X3 배열을 만듬
// 1열의 가운데 1이 찍힘
// 1칸위 (윗칸이 없을시 맨밑에 칸으로) + 오른쪽 한칸에 다음 숫자 찍힘(오른쪽 끝이면 왼쪽끝으로 이동)
// 그자리에 숫자가 있으면 직전 숫자 밑으로
// 각 열, 행, 대각선의 합이 같음
// 08 01 16
// 03 05 07
// 04 09 02
Scanner sc = new Scanner(System.in);
// 배열 크기 입력
System.out.print("배열의 크기를 입력하세요 : ");
int a = sc.nextInt();
int[][] arr = new int[a][a];
// 최초수의 좌표값 및 수 지정
int x = 0;
int y = a / 2;
int s = 1;
while (s <= a * a) {
arr[x][y] = s;
if (s % a == 0) {
x++;
} else {
x--;
y++;
}
if (x < 0)
x = a - 1;
if (x > a - 1)//필요없음
x = 0;//필요없음
if (y > a - 1)
y = 0;
if (y < 0)//필요없음
y = a - 1;//필요없음
s++;
} // while
for (int i = 0; i < a; i++) {
for (int j = 0; j < a; j++) {
System.out.print(arr[i][j] + "\t");
} // inner
System.out.println();
} // outer
}// main
}
과제) 마방진 tCode
package ex3_work;
import java.util.Scanner;
public class Ex1_square_tCode {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int num = 1; //시작수
int y = 0; //행(y)
int x = 0; //열(x)
System.out.print("홀수 : ");
int size = sc.nextInt();
int[][] arr = new int[size][size];
x = size / 2; //열의 가운데 1을 포석
while (num <= size * size) {
arr[y][x] = num;
if (num % size == 0) {
y++;
}else {
y--;
x++;
}
if(y < 0) y = size -1;
if(x >= size) x = 0;
num++;
}//while
for (int i = 0; i < size; i++) {
for (int j = 0; j < size; j++) {
System.out.print(arr[i][j] + "\t");
} // inner
System.out.println();
} // outer
}//main
}
int [][] arr;
arr = new int[][]
이런식으로 배열 먼저 선언 후 나중에 값을 넣어도 됨
'develop > JAVA' 카테고리의 다른 글
JAVA study 10 (0) | 2024.03.11 |
---|---|
JAVA study 09 (0) | 2024.03.08 |
JAVA study 07 (0) | 2024.03.06 |
JAVA study 06 (0) | 2024.03.05 |
JAVA study 05 (0) | 2024.03.05 |