26일차 java 연산(2023-01-30)

권단비·2023년 1월 30일
0

IT

목록 보기
48/139

[Eclipse 연습]

[계산]
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
두 문자열은 같습니다.

[기본 자료형의 값을 문자열로 바꾸기]

・valueOf

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]

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까지 반복

[문자열의 조합 printf 메소드]

정수 : %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

[Scanner]

입력받는 기능을 가진 클래스

[계산]
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 >>결과

0개의 댓글