나는 블로그에 싹 정리를 하였지만...
내 머리에 온전히 들어온 건 별로 없었다...
그래서 클래스를 생성하는 것도 확실하게 몰랐다.
문제푸는 것은 너무 좋지만 자바 파일을 왔다갔다하면서 사용하는법은 모른다.
일단 클래스를 생성하는 법을 확실히 알아야했다.
접근제어자 class 클래스명 {...}
(접근제어자가 없을 경우 default
)
class Book {
...
}
: static
으로 선언하여 다른 곳에 객체 생성없이 바로 사용할 수 있다.
static String publisher = "BESTBOOK"
static String setPublisher (String publisherName) {
publisher = publisherName;
return publisher;
: 객체 생성을 한 후, 사용할 수 있다.
int pages = 1000; // 클래스 안에
int getPages(int page) {
pages = page;
return pages;
}
: 이것이 있어야 객체를 호출(생성)할 수 있다.
class Book {
String title;
String contents;
public Book (String titleName, String content) {
title = titleName;
contents = content;
}
최소 객체를 생성할 때, titleName
, content
를 매개변수로 넣어줘야 생성할 수 있다.
public Book () {...}
빈 생성자는 생략할 수 있고 컴파일 시, 컴파일러가 자동으로 생성해준다.
this
자기 자신을 가르킨다.
변수명이 같을 때 헷갈리지 않기 위해 사용한다.
class Book {
String title;
String contents;
public Book (String title, String contents) {
this.title = title;
this.contents = contents;
}
색이 같은 각각 변수명들이 서로를 같은 변수이다.
this.title
는 클래스 내부에 있는 인스턴스 변수이고, public Book
안에 있는 String title
의 title
은 객체를 생성할 때 들어오는 매개변수 title
이다.
나는 처음에 이런거조차도 헷갈렸다.....
이젠 안다.
문자열로 된 수식을 계산하여 int 로 return 하는 문제이다.
ex) String number = "3 + 4" ➡️ 7 (int)
지금까지 했던 문자열 계산이라면 연산자가 한 가지 종류인 것만 했다.
"3 + 34 + 9 + 10 + ... " 이런 문자열은 해보았다.
하지만 +, - 가 무작위로 나오는 문자열로 된 수식을 계산하여야했다.
머리로는 생각이 됐다.
하지만 코드로 어떻게 작성을 해야할 지 몰랐다...
System.out.println(3 + 4);
이렇게 하면 7이 출력이 된다.
자동으로 3과 4를 더해준다.
그래서 나는 문자열을 Integer.parseInt() 를 해주면 + 도 Integer 가 아니지만 Integer 로 인식하고 바로 계산을 해줄 것이라고 예상했다.
일단 문자열을 split()을 해서 문자열 배열로 바꾼 후, 하나하나 돌면서 하나씩 Integer.parseInt() 를 통해 Integer 로 변환을 해주었다.
for (int i = 0; i < stringSplit.length; i++) {
answer = Integer.parseInt(stringSplit[i])
}
이렇게 하게 되면 + 나 - 는 Integer 아니기 때문에 NumberFormatException 오류가 발생한다.
일단 +와 -를 나눠서 계산해야한다는 것은 안다.
그래서 향상된 switch문 통해서 구현을 하기로 했다.
문자열 배열의 인덱스의 짝수번째는 숫자가 오고 홀수번째는 연산자가 온다는 규칙을 알 수 있다.
그래서 아래와 같이 코드를 작성하였다.
int answer = 0;
for (int i = 0; i <= stringSplit.length / 2; i++) {
switch (stringSplit[2 * i - 1]) {
case "+" -> answer += Integer.parseInt(stringSplit[2 * i]);
case "-" -> answer -= Integer.parseInt(stringSplit[2 * i]);
}
}
하지만 i가 0부터 시작하면 switch (stringSplit[2 * i - 1])
에서
ArrayIndexOutOfBoundsException 오류가 발생한다....
i 가 1 부터 시작하고 0 번째 수는 먼저 answer 에 넣어주기로 했다.
int answer = Integer.parseInt(my_split[0]);
for (int i = 1; i <= stringSplit.length / 2; i++) {
switch (stringSplit[2 * i - 1]) {
case "+" -> answer += Integer.parseInt(stringSplit[2 * i]);
case "-" -> answer -= Integer.parseInt(stringSplit[2 * i]);
}
}
이렇게 하니 오류가 발생하지 않았고, 정상적으로 출력이 되어 해결할 수 있었다.