간단한 세글자 끝말잇기(CharAt(), length())

Posted by ITPangPang
2016.04.08 00:49 Java/Java 예제

간단한 세글자 끝말잇기(CharAt(), length())



간단하게 세글자 끝말잇기 프로그램을 만들어본다


프로그램을 만들기 전에 어떤 순서로 구현해야 할 지 적어본다

① 키보드로부터 문자열 입력받기(Scanner)

② 무한루프 돌리기(while)

③ 조건달기1 : 세글자 외 문자열 패배처리(length(), break;)

④ 조건달기2 : 끝 음절이 다음 단어의 첫음절이 아니면 패배처리(charAt)

⑤ 두 명이서 번갈아 입력하기

 

1단계) 키보드로부터 문자열 입력받기

간단하게 Scanner를 사용해서 String을 입력받는다


public class Game
{
    public static String word;
 
    public static void main(String[] args)
    {
 
        System.out.println("끝말잇기 시작");
        System.out.print("A:");
        Scanner in = new Scanner(System.in);
        word = in.next();
    }
}


 

실행결과를 보면 한번 문자열을 입력한후 프로그램이 종료됨으로 인하여 진행이 안되므로 무한루프를 돌려야 할 것 같다

 


2단계) 무한루프 돌리기(while)

"끝말잇기 시작"과 "A가 먼저 시작하는것"은 변함이 없으므로 while문 전에 입력해준다

public class Game
{
    public static String word;
 
    public static void main(String[] args)
    {
        System.out.println("끝말잇기 시작");
        System.out.print("A:");
        while(true)
        {
            Scanner in = new Scanner(System.in);
            word = in.next();
        }
    }
}


실행결과를 보면 입력을 계속 받아도 프로그램이 종료되지 않는걸 확인 할 수 있다

 

 

3단계) 조건달기1 : 세글자 외 문자열 패배처리(length(), break;)

length = 문자열의 길이를 가져오는 메소드

break = While문에서 조건을 달아서 무한루프를 빠져나올 수 있다

if문을 써서 3글자 입력외의 모든 답은 패배처리 한다

public class Game
{
    public static String word;
 
    public static void main(String[] args)
    {
        System.out.println("끝말잇기 시작");
        System.out.print("A:");
        while(true)
        {
            Scanner in = new Scanner(System.in);
            word = in.next();
        }
    }
}


네글자를 입력 받으니 패배라고 뜨면서 프로그램이 종료되는 것을 확인 할 수 있다

 

 

4단계) 조건달기2 : 끝 음절이 다음 단어의 첫음절이 아니면 패배처리(charAt)

charAt : 주어진 위치의 문자열을 하나 가져올 수 있는 메소드

charAt를 사용하여 이전입력에했던 문자열의 마지막 음절과 현재 입력하는 문자열을의 첫 음절을 비교하여 정답처리를 결정한다

temp 변수를 하나 만들어서 입력받은 문자열의 마지막 음절을 저장한다(예)고구)

고 = word.charAt(0);

구 = word.charAt(1);

마 = word.charAt(2);

temp = word.charAt(2); 저장후 temp == word.charAt(0) 비교한다


public class Game
{
    public static String word;
    public static char temp;
    
    public static void main(String[] args)
    {
        System.out.println("끝말잇기 시작");
        System.out.print("A:");
        while(true)
        {
            Scanner in = new Scanner(System.in);
            word = in.next();
            if(word.length()!=3||word.charAt(0)!=temp)
            {
                System.out.println("패배");
                break;
            }
            temp = word.charAt(2);
        }
    }
}





실행시켜 보니 이상하게 패배라고 뜬다.

그 이유는 맨 처음 세글자를 입력할 때에는 if문에서 temp값이 없으므로 비교를 할수가 없다

그래서 첫 입력은 세글자인지만 비교하고 두번째 입력부터 세글자+음절을 비교한다



public class Game
{
    public static String word;
    public static char temp;
    
    public static void main(String[] args)
    {
        boolean isStart = true;
        System.out.println("끝말잇기 시작");
        System.out.print("A:");
        while(true)
        {
            Scanner in = new Scanner(System.in);
            word = in.next();
            if(isStart==false&&(word.length()!=3||word.charAt(0)!=temp))
            {
                break;
            }
            else if(isStart==true&&(word.length()!=3))
            {
                break;
            }
            temp = word.charAt(2);
            isStart=false;
        }
        System.out.println("패배");
    }
}

소스를 보면 boolean isStart의 초기값을 true로 줘서 첫입력시에만 else if에 걸리고 마지막에 isStart를 false로 변환하여

나머지 입력은 전부 if에만 걸릴 수 있도록 구현하였다

 

 

5단계) 두 명이서 번갈아 입력하기

끝말잇기를 서로 번갈아서 입력할때 혼동이 오지 않도록 boolean isPeople를 추가시켜서 A,B로 구분한다.


[완성된소스]

public class Game
{
    public static String word;
    public static char temp;
    
    public static void main(String[] args)
    {
        boolean isStart = true;
        boolean isPeople = true;
        System.out.println("끝말잇기 시작");
        System.out.print("A:");
        while(true)
        {
            Scanner in = new Scanner(System.in);
            word = in.next();
            if(isStart==false&&(word.length()!=3||word.charAt(0)!=temp))
            {
                break;
            }
            else if(isStart==true&&(word.length()!=3))
            {
                break;
            }
            temp = word.charAt(2);
            isStart=false;
            if(isPeople == true)
            {
                System.out.print("B:");
                isPeople = false;
            }
            else
            {
                System.out.print("A:");
                isPeople = true;
            }
        }
        System.out.println("패배");
    }
}

 



저작자 표시 비영리 변경 금지
신고
이 댓글을 비밀 댓글로