자바로 게임 만들기

[자바로 게임 만들기] 36. 에러를 방지하자(null값과 빈값) 2

릿드 2019. 2. 1. 09:26

안녕하세요.


지난시간에 에러의 원인을 알았으니 이번시간에는 에러를 잡아보도록 하죠.






1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
// Study01.java
 
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        // 슬라임과 인간 객체 생성
        Slime s1 = new Slime("슬라삐");
        Slime s2 = new Slime("슬라디");
        Human h = new Human("알렉스");
 
        System.out.println(s1.name + "와 " + s2.name + "가 나타났다! 당신의 이름은 " + h.name + "이다\n");
 
        while (true) {
 
            // 인풋박스
            String sTarget = JOptionPane.showInputDialog("어느 슬라임을 공격하겠습니까? 1은 " + s1.name + " 2는 " + s2.name);
            
            // 형변환
            int target = Integer.parseInt(sTarget);
cs


일단 코드 앞부분만 가져왔습니다.


에러가 나는 원인은 sTarget 변수에 null값이 들어가거나 빈값이 들어갈 경우 형변환이 불가능하기때문이었죠.


그렇다면 답은 간단합니다. 인풋박스와 형변환 사이에다가 아래와 같은 구문을 넣으면 되겠죠.



만약 sTarget 변수에 null값이 들어가거나 빈값이 들어갈 경우 게임을 종료하라.





정답을 알아보기 전에 일단 한가지 알아두셔야할 게 있는데요, 아래 예제를 보시죠. (스터디02에서 실습하세요)



변수값이 서로 같은지 비교할때 ==을 사용했습니다. 그런데 이건 숫자끼리 비교할때이구요. 문자끼리 비교할때는 아래와 같이 해야 합니다.







문자끼리 비교할때도 == 이 방식이 먹힐때가 있지만 안먹힐때도 있습니다. 그래서 문자끼리 비교할때는 무조건 아래와 같은 방법을 쓰시는 게 좋습니다.



변수1.equals(변수2)



자, 이제 정답을 봅시다.





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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
// Study01.java
 
package study;
 
import javax.swing.JOptionPane;
 
public class Study01 {
 
    public static void main(String[] args) {
 
        // 슬라임과 인간 객체 생성
        Slime s1 = new Slime("슬라삐");
        Slime s2 = new Slime("슬라디");
        Human h = new Human("알렉스");
 
        System.out.println(s1.name + "와 " + s2.name + "가 나타났다! 당신의 이름은 " + h.name + "이다\n");
 
        while (true) {
 
            // 인풋박스
            String sTarget = JOptionPane.showInputDialog("어느 슬라임을 공격하겠습니까? 1은 " + s1.name + " 2는 " + s2.name);
            
            // 널값이나 빈값이 입력되면 종료
            if(sTarget == null || sTarget.equals("")) {
                System.exit(0);
            }
            
            // 형변환
            int target = Integer.parseInt(sTarget);
 
            if (target == 1) {
 
                // 인간의 공격
                h.attack(s1);
 
                // 슬라임의 반격
                s1.attack(h);
 
            } else if (target == 2) {
 
                h.attack(s2);
                s2.attack(h);
 
            } else {
 
                JOptionPane.showMessageDialog(null"올바른 숫자를 입력하세요");
 
            }
 
        } // while 끝
    }
 
}
 
cs


23~26행이 추가해준 부분입니다. 널값은 ==를 이용해 비교했고, 빈값은 방금 배운 equals함수를 이용해서 비교했습니다. (널값은 equals함수가 통하지 않기 때문에 ==로 비교해주시면 됩니다.)





다음 시간에는 슬라임의 체력이 소진됐을때를 코딩해보겠습니다.


감사합니다.