> 직접 풀어보기 4-3
181p
[실습 4-1]을 다음과 같이 수정하라.
- 터치가 아닌 클릭으로 변경한다.
- 나머지값을 구하는 버튼을 추가한다.
- 값을 입력하지 않고 버튼을 클릭할 때 오류 메시지를 토스트 메시지로 나타낸다.
- 실숫값을 계산한다.
- 0으로 나누면 토스트 메시지를 나타내고 계산하지 않는다.
참고) 나머지 값을 영어로..
remainder
(코드에서는 rex로 변수이름을 설정했습니다)
[코드]
activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<EditText
android:id="@+id/text1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:hint="숫자 1" />
<EditText
android:id="@+id/text2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:hint="숫자 2" />
<Button
android:id="@+id/button1"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="더하기"
android:textSize="20dp"
android:textStyle="bold"
android:clickable="true"/>
<Button
android:id="@+id/button2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="빼기"
android:textSize="20dp"
android:textStyle="bold"
android:clickable="true"/>
<Button
android:id="@+id/button3"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="곱하기"
android:textSize="20dp"
android:textStyle="bold"
android:clickable="true"/>
<Button
android:id="@+id/button4"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="나누기"
android:textSize="20dp"
android:textStyle="bold"
android:clickable="true"/>
<Button
android:id="@+id/button5"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_margin="10dp"
android:text="나머지값"
android:textSize="20dp"
android:textStyle="bold"
android:clickable="true"/>
<TextView
android:id="@+id/text3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@android:color/holo_red_light"
android:textSize="40dp"
android:textStyle="bold" />
</LinearLayout>
MainActivity.java
package com.example.myapplication;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.TextView;
import android.widget.Toast;
public class MainActivity extends AppCompatActivity {
EditText edit1;
EditText edit2;
TextView textResult;
Button add;
Button sub;
Button mul;
Button div;
Button rex;
String num1, num2;
Float result;
String zero = "0";
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
setTitle("초간단 계산기(수정)");
edit1 = (EditText) findViewById(R.id.text1);
edit2 = (EditText) findViewById(R.id.text2);
add = (Button) findViewById(R.id.button1);
sub = (Button) findViewById(R.id.button2);
mul = (Button) findViewById(R.id.button3);
div = (Button) findViewById(R.id.button4);
rex = (Button) findViewById(R.id.button5);
textResult = (TextView) findViewById(R.id.text3);
add.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
num1 = edit1.getText().toString();
num2 = edit2.getText().toString();
if (num1.trim().equals("") || num2.trim().equals("")) {
Toast.makeText(getApplicationContext(), "값을 입력하지 않았습니다.", Toast.LENGTH_SHORT).show();
} else {
result = Float.parseFloat(num1) + Float.parseFloat(num2);
textResult.setText("계산 결과 : " + result.toString());
}
}
});
sub.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
num1 = edit1.getText().toString();
num2 = edit2.getText().toString();
if (num1.trim().equals("") || num2.trim().equals("")) {
Toast.makeText(getApplicationContext(), "값을 입력하지 않았습니다.", Toast.LENGTH_SHORT).show();
} else {
result = Float.parseFloat(num1) - Float.parseFloat(num2);
textResult.setText("계산 결과 : " + result.toString());
}
}
});
mul.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
num1 = edit1.getText().toString();
num2 = edit2.getText().toString();
if (num1.trim().equals("") || num2.trim().equals("")) {
Toast.makeText(getApplicationContext(), "값을 입력하지 않았습니다.", Toast.LENGTH_SHORT).show();
} else {
result = Float.parseFloat(num1) * Float.parseFloat(num2);
textResult.setText("계산 결과 : " + result.toString());
}
}
});
div.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
num1 = edit1.getText().toString();
num2 = edit2.getText().toString();
if (num1.trim().equals("") || num2.trim().equals("")) {
Toast.makeText(getApplicationContext(), "값을 입력하지 않았습니다.", Toast.LENGTH_SHORT).show();
} else if (num2.equals(zero)) {
Toast.makeText(getApplicationContext(), "0의 값으로 나눌 수 없습니다.", Toast.LENGTH_SHORT).show();
} else {
result = Float.parseFloat(num1) / Float.parseFloat(num2);
textResult.setText("계산 결과 : " + result.toString());
}
}
});
rex.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
num1 = edit1.getText().toString();
num2 = edit2.getText().toString();
if (num1.trim().equals("") || num2.trim().equals("")) {
Toast.makeText(getApplicationContext(), "값을 입력하지 않았습니다.", Toast.LENGTH_SHORT).show();
} else if (num2.equals(zero)) {
Toast.makeText(getApplicationContext(), "0의 값으로 나눌 수 없습니다.", Toast.LENGTH_SHORT).show();
} else {
result = Float.parseFloat(num1) % Float.parseFloat(num2);
textResult.setText("계산 결과 : " + result.toString());
}
}
});
}
}
[실행 결과]
- 값을 구한 모습 (더하기)
- 값을 구한 모습 (빼기)
- 값을 구한 모습 (곱하기)
- 값을 구한 모습 (나누기)
- 값을 구한 모습 (나머지값)
- 값을 입력하지 않고 버튼을 클릭할 시
- 숫자 2를 0으로 나눌 시 (나누기, 나머지값)
* 중요하게 봐야 할 문법 *
div.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View arg0) {
num1 = edit1.getText().toString();
num2 = edit2.getText().toString();
if (num1.trim().equals("") || num2.trim().equals("")) {
Toast.makeText(getApplicationContext(), "값을 입력하지 않았습니다.", Toast.LENGTH_SHORT).show();
} else if (num2.equals(zero)) {
Toast.makeText(getApplicationContext(), "0의 값으로 나눌 수 없습니다.", Toast.LENGTH_SHORT).show();
} else {
result = Float.parseFloat(num1) / Float.parseFloat(num2);
textResult.setText("계산 결과 : " + result.toString());
}
}
});
중요하게 봐야할 문법은 당연히 이 부분이지 않을까요..?
문제에서 "(1)값을 입력하지 않고 버튼을 클릭할 때 (2)오류 메시지를 토스트 메시지로 나타낸다" 부분이 있습니다.
(1) 값을 입력하지 않고 인터넷 검색을 한 결과
num1.trim().equals("")
이 문장을 사용하더라고요?
이때, String.trim().equals("")를 이용해서
값을 입력하지 않았을 경우에 오류 메시지를 표시하게 합니다!!
(2) 오류 메시지를 토스트 메시지로..
Toast.makeText(getApplicationContext(), "값을 입력하지 않았습니다.", Toast.LENGTH_SHORT).show();
위 문장은
Toast.makeText(출력될 내용, "표시할 메시지", Toast에서 제공하는 출력시간).show();
형태를 가지고 있습니다.
이때, Toast에서 제공하는 출력시간을 short 짧게 메시지를 출력해준다는 말을 가지고 있는
Toast.LENGTH_SHORT
을 사용했습니다.
* 몰랐던 부분 *
1. 버튼 색상 바꾸기
- 기본으로 설정되어 있는 색상이 purple이여서 버튼 색상을 gray로 바꾸는 방법을 몰랐었습니다.
버튼 색상 바꾸는 방법은 따로 정리해서 올려보겠습니다.
간략하게 제가 이해한 것은 res/themes/themes.xml에
<style name="Theme.MyApplication" parent="Theme.AppCompat.DayNight.DarkActionBar">
이 부분을
<style name="Theme.MyApplication" parent="Theme.AppCompat.Light">
Light 값으로 바꾼 것이였습니다.
★ 2. toast 메시지 띄우기
코드는 정확하나 toast 메시지가 계속 안 떠서 헤맸었습니다..
toast 메시지 띄우는 방법은 따로 게시물 올리도록 하겠습니다..
이 코드에서 toast 메시지가 안 떴던 이유는 .. 제가 앱 알림 설정을 껐더라구요 ..^^;
그래서 알림이 안 떴던 거였습니다 ..ㅋ
아무튼 문제 해결!
'개발일지 > 안드로이드 JAVA' 카테고리의 다른 글
자주 쓰이는 색상 (0) | 2023.01.15 |
---|---|
[안드로이드 프로그래밍 7판] 4장 연습문제 (0) | 2023.01.15 |
[안드로이드 스튜디오] 액션바 텍스트 색상 바꾸기 (0) | 2023.01.12 |
[안드로이드 프로그래밍 7판] 연습문제 2장 7번 (0) | 2023.01.12 |
[안드로이드 스튜디오] Toast 메시지 띄우는 방법 (0) | 2023.01.12 |