[ 이번 단원 핵심 포인트 ]
# 문자열 형변환 #
- 문자열을 정수로 변경 : <정수형 변수> = Integer.parseInt(<문자열>);
Ex)int num = Integer.parseInt(“21”); // num : 21
# Toast 메시지 사용방법 #
- Toast 메시지 객체 생성 & 표시 : Toast.makeText(<Context 객체>, <메시지 문자열>, <시간 길이>).show()
Ex) Toast.makeText(this, “This is a Toast message”, Toast.LENGTH_SHORT).show();
지난 시간에 이어서 구구단 게임을 만들어 보겠습니다. 동작 순서는 다음과 같습니다.
- 앱이 실행되면 구구단 문제를 만들어서 TextView 에 표시하고,
- 사용자가 정답을 EditText 에 입력하고,
- 결과 Button 을 누르면 정답인지 오답인지를 토스트 메시지로 표시
난수를 만드는 함수를 추가하겠습니다. makeQuiz() 함수 아래에 새로운 함수를 생성하고 아래와 같이 코드를 입력합니다. 먼저번 시간에 했던 난수 생성함수와 같습니다.
[ Source code copy link : https://goo.gl/KgKZym => Code-6 ]
public int getRandom (int max, int offset) {
int nResult = (int)(Math.random() * max) + offset;
return nResult;
}
앱이 실행되면 위 함수를 사용해서 구구단 문제를 TextView 에 출력하면 됩니다. 우선 아래와 같이 makeQuiz() 함수의 내용을 삭제합니다.
public void makeQuiz() {
}
그런 다음 아래와 같이 새로운 코드를 입력합니다. 구구단 문제를 만들어서 TextView 에 표시하는 코드입니다.
[ Source code copy link : https://goo.gl/KgKZym => Code-7 ]
public void makeQuiz() {
int left = getRandom (8, 2);
int right = getRandom (8, 2);
textView1.setText(left + " * " + right + " = ?");
nResult = left * right;
}
아래는 2~9 사이의 난수 2개를 만들어서 int 형 변수에 저장하는 코드입니다. 난수를 생성할 때 범위가 8이고, 최소값이 2입니다. 이렇게 하면 최소값 2 부터 최대값 9 사이의 난수가 만들어 지는 것입니다.
int left = getRandom (7, 2);
int right = getRandom (7, 2);
아래는 구구단 문제 문자열을 만들어서 TextView 에 표시하는 코드입니다. 2개 숫자 사이에 ‘*’ 기초를 추가했고, 오른쪽 끝에는 ‘= ?’ 를 덧붙였습니다. 예를 들어서 난수 2개가 5 와 8인 경우에 ‘5 * 8 = ?’ 이런 문자열이 만들어지는 것입니다.
textView1.setText(left + " * " + right + " = ?");
아래는 2개 숫자의 곱셈을 멤버변수에 저장하는 코드입니다. 사용자가 입력한 값이 정답인지를 확인하기 위해서 저장해 두는 것입니다.
nResult = left * right;
예제를 실행시켜 봅시다. 구구단 문제가 표시되었습니다.
사용자가 EditText 에 숫자를 입력하고 Button 을 누르면 정답인지 아닌지를 판단하는 기능을 구현해 보겠습니다. getRandom() 함수 아래에 새로운 함수를 생성하고 아래와 같이 코드를 추가합니다. onBtnResult() 는 사용자가 Button 을 눌렀을 때 실행되는 이벤트 함수입니다.
[ Source code copy link : https://goo.gl/KgKZym => Code-8 ]
public void onBtnResult(View v) {
String strAnswer = editText1.getText().toString();
int answer = Integer.parseInt(strAnswer);
if( answer == nResult )
Toast.makeText(this, nResult + " – Correct answer!",
Toast.LENGTH_LONG).show();
else
Toast.makeText(this, "Wrong answer - " + nResult,
Toast.LENGTH_LONG).show();
makeQuiz();
}
아래는 EditText 에 입력된 문자열을 구해서 숫자로 변경하는 코드입니다.
String strAnswer = editText1.getText().toString();
int answer = Integer.parseInt(strAnswer);
아래는 정답을 맞췄을 때 ‘정답입니다’ 라는 문자열을 토스트 메시지로 출력하고, 틀렸을 때는 ‘틀렸습니다’ 라는 문자열을 토스트 메시지로 출력하는 코드입니다.
if( answer == nResult )
Toast.makeText(this, nResult + " – Correct answer!",
Toast.LENGTH_LONG).show();
else
Toast.makeText(this, "Wrong answer - " + nResult,
Toast.LENGTH_LONG).show();
아래 맨 마지막 줄은 새로운 구구단 문제를 TextView 에 표시하는 함수를 호출합니다. 한 문제를 풀면 계속해서 새로운 문제가 나오는 것입니다.
makeQuiz();
구구단 문제가 완성되었습니다. 예제를 실행해서 EditText 에 정답을 입력하고 Button 을 눌러봅시다. 토스트 메시지가 정답인지 오답인지를 알려줍니다. 그리고 새로운 문제가 나타납니다.
구구단 게임 예제가 완성되었습니다. 이번 예제의 전체 코드는 아래와 같습니다. 수고하셨습니다.
package com.example.gugugame;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.Gravity;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
TextView textView1;
EditText editText1;
int nResult;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
textView1 = (TextView)findViewById(R.id.textView1);
editText1 = (EditText)findViewById(R.id.editText1);
makeQuiz();
}
public void makeQuiz() {
int left = getRandom (8, 2);
int right = getRandom (8, 2);
textView1.setText(left + " * " + right + " = ?");
nResult = left * right;
}
public int getRandom (int max, int offset) {
int nResult = (int)(Math.random() * max) + offset;
return nResult;
}
public void onBtnResult(View v) {
String strAnswer = editText1.getText().toString();
int answer = Integer.parseInt(strAnswer);
if( answer == nResult )
Toast.makeText(this, nResult + " – Correct answer!", Toast.LENGTH_LONG).show();
else
Toast.makeText(this, "Wrong - " + nResult, Toast.LENGTH_LONG).show();
makeQuiz();
}
}
[연습문제] 산수팡 게임 만들기
1. 새로운 소스 프로젝트를 생성하고 레이아웃 파일에 TextView 와 EditTex, 그리고 Button 위젯을 1개씩 생성하시오.
2. 예제를 실행하면 숫자 계산 문제를 TextView 에 표시하시오.
난수로 생성한 1~9 사이의 숫자 2개 사이에 곱하기(*) 기호 또는 더하기(+) 기호를 집어 넣어서 수식을 만드시오.
예) 3 * 5 = ? 또는 9 + 7 = ?
3. 사용자가 EditText 에 답을 입력하고 Button 을 클릭하면 정답을 맞췄는지 아닌지를 Toast 메시지로 표시하시오.
4. 문제를 풀면 자동으로 새로운 문제를 TextView 에 표시하시오.
[연습문제] 난수 생성 함수 수정
아래는 난수를 생성하는 함수의 코드이다. 파라미터는 범위와 최소값이다.
이 함수를 수정해서 파라미터를 최대값과 최소값으로 변경하시오.
public int getRandom (int max, int offset) {
int nResult = (int)(Math.random() * max) + offset;
return nResult;
}