Notice
Recent Posts
Recent Comments
Link
«   2025/08   »
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
31
Archives
Today
Total
관리 메뉴

스포츠마케터의 초보 개발자 도전기

JAVA study 08 본문

develop/JAVA

JAVA study 08

teammate brothers 2024. 3. 7. 22:34

오늘 아침 지하철에서 핸드폰으로 무슨 영상을 봤는데  "인간은 망각의 동물이라 오래 기억 못한다. 그래서 나쁜일을 잊을 수 있어서 참 다행이다."라고 그러더라... 근데 문제가 공부한것까지 함께 날아가서 참...

 

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