Notice
Recent Posts
Recent Comments
Link
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
Tags
- 하이퍼파라미터튜닝
- randomForest
- 활성화함수
- 백엔드
- 오픈소스깃허브사용
- 안드로이드
- KNN모델
- 국비지원
- 교차검증
- 프로젝트
- MSE
- 비스포크시네마
- 선형모델 분류
- 머신러닝
- 스마트인재개발원
- gitclone
- semantic_segmentation
- 손실함수
- 취업연계
- 2차 실전프로젝트
- springSTS
- ERD
- 내일배움카드
- MVCmodel
- 취업성공패키지
- 크롤링
- 1차프로젝트
- JSP/Servlet
- intent
- 2차프로젝트
Archives
- Today
- Total
또자의 코딩교실
[스마트인재개발원] (Intent)Lotto_Simulator 실습(개선과정 포함) 본문
드디어 안드로이드 첫 포스팅!
안드로이드는 굉장히 세세하게 하나하나 다룰 내용이 많다 ㅠ.ㅠ
화면구성 Layout.xml은 다음과 같다.
문제 해결과정
1.입력되는 값과 출력, 전달하는 값을 모두 숫자형 배열의 형태로 정의한다.
2. intent에 입력한 값을 저장하고 출력 activity로 보낸다.
3. 출력/판단 activity에 랜덤수를 6개 생성하고(중복체크 포함) 숫자형 배열에 저장한다.
4. 랜덤수배열과 사용자 입력수배열(두 배열 모두 숫자형 배열)을 생성하고 비교해 정답수를 저장하는 객체생성.
5. 정답수에 따라 다른 결과를 출력하는 if문을 만든뒤 setText
다음은 기존에 작성했던 코드이다.
반복문으로 숫자형 배열을 처리하는것이 아닌 일일히 모든 변수를 설정하여 코드의 효율성이 떨어졌었다.
//배열로 객체 불러오기.
//아래는 기존 일일히 작성한 코드. 효율성이 떨어진다.
EditText inputnum1, inputnum2, inputnum3, inputnum4, inputnum5, inputnum6;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnmakenum = findViewById(R.id.btnmakenum);
input1 =inputnum1.getText().toString();
input2 =inputnum2.getText().toString();
input3 =inputnum3.getText().toString();
input4 =inputnum4.getText().toString();
input5 =inputnum5.getText().toString();
input6 =inputnum6.getText().toString();
initView();
Intent intent = new Intent(MainActivity.this, MainActivity2.class);
intent.putExtra("input1", input1);
intent.putExtra("input2", input2);
intent.putExtra("input3", input3);
intent.putExtra("input4", input4);
intent.putExtra("input5", input5);
intent.putExtra("input6", input6);
}
private void initView() {
btnmakenum = findViewById(R.id.btnmakenum);
inputnum1 = findViewById(R.id.inputnum1);
inputnum2 = findViewById(R.id.inputnum2);
inputnum3 = findViewById(R.id.inputnum3);
inputnum4 = findViewById(R.id.inputnum4);
inputnum5 = findViewById(R.id.inputnum5);
inputnum6 = findViewById(R.id.inputnum6);
}
다음은 수업을 들으면서 갱신한 코드이다.
package com.example.app20211203;
import androidx.appcompat.app.AppCompatActivity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
public class MainActivity extends AppCompatActivity {
Button btnmakenum;
EditText[] edtNums = new EditText[6];
int[] edtNumIds = {R.id.inputnum1, R.id.inputnum2, R.id.inputnum3,
R.id.inputnum4, R.id.inputnum5, R.id.inputnum6 };
//배열로 객체 불러오기.
//아래는 기존 일일히 작성한 코드. 효율성이 떨어진다.
//EditText inputnum1, inputnum2, inputnum3, inputnum4, inputnum5, inputnum6;
String input1, input2, input3, input4, input5, input6;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
btnmakenum = findViewById(R.id.btnmakenum);
//id 값 가져오고 객체 초기화 하는것 : 배열로 생성한 다음 for문 돌려서 해결.
for (int i = 0; i<edtNums.length; i++){
//id 값 가져오기 : getResource().getIdentifier(정의할view이름/정의할 view타입/패키지 이름(함수사용))
//view이름 : xml에 배치한 위젯의 id값, 이미지 이름, 레이아웃 이름 등
//view이름의 타입 : id, drawable, layout, color등 ...
//패키지명 : 현재 액티비티를 가지고 있는 패키지명
//id값 정의하는 코드
int viewId = getResources().getIdentifier("inputnum"+(i+1), "id", getPackageName());
//findViewById로 java내에서 객체화 시키는 코드
edtNums[i] = findViewById(viewId);
}
//버튼을 클릭하면 입력한 객체 intent로 보내기
btnmakenum.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Intent intent = new Intent(MainActivity.this, MainActivity2.class);
//사용자가 입력한 로또번호를 정수로 변환해서 nums배열에 저장하기
int[] nums = new int[6];
//nums 배열에 edtNums로 사용자가 입력한 값 채우는 코드
for (int i =0;i<edtNums.length;i++){
nums[i] = Integer.parseInt(edtNums[i].getText().toString());
}
//정수형 배열을 담아주고 인텐트로 담아 보내버리자.
intent.putExtra("nums", nums);
startActivity(intent);
}
});
}
}
화면구성 Layout.xml
Horizonal Chain을 이용하였음.
다음은 갱신하기 전의 코드이다.
/* 기존 코드
TextView result1, result2, result3, result4, result5, result6;
//난수로 생성된 로또 번호 객체 정의
TextView numresult1, numresult2, numresult3, numresult4, numresult5, numresult6;
//사용자가 입력한 로또 번호 객체
String num1, num2, num3, num4, num5, num6;
//난수로 생성되는 로또번호값
//난수 생성 및 문자열 배열 생성
Random ran = new Random();
String[] lottoarr ={num1, num2, num3, num4, num5, num6};
int n1 = ran.nextInt(50);
int n2 = ran.nextInt(50);
int n3 = ran.nextInt(50);
int n4 = ran.nextInt(50);
int n5 = ran.nextInt(50);
int n6 = ran.nextInt(50);
num1 = Integer.toString(n1);
num2 = Integer.toString(n2);
num3 = Integer.toString(n3);
num4 = Integer.toString(n4);
num5 = Integer.toString(n5);
num6 = Integer.toString(n6);
//intent 객체 불러오고 사용자가 입력한 로또 번호 객체로 바꾸기
String data1 = getIntent().getStringExtra("input1");
String data2 = getIntent().getStringExtra("input2");
String data3 = getIntent().getStringExtra("input3");
String data4 = getIntent().getStringExtra("input4");
String data5 = getIntent().getStringExtra("input5");
String data6 = getIntent().getStringExtra("input6");
String[] inputarr ={data1, data2, data3, data4, data5, data6};
numresult1.setText(data1);
numresult2.setText(data2);
numresult3.setText(data3);
numresult4.setText(data4);
numresult5.setText(data5);
numresult6.setText(data6);
//난수로 생성된 로또번호 display하기위해 setText하기
result1.setText(num1);
result2.setText(num2);
result3.setText(num3);
result4.setText(num4);
result5.setText(num5);
result6.setText(num6);*/
//넘어온 intent가 num1~num6까지 맞는지 .equals로 확인하기
//for문 돌려서 i가 증가하면 맞춘 갯수 하나씩 누적 증가시키고 맞춘갯수에 따라서 결과출력
for (int i=0;i<lottoarr.length-1;i++){
if(inputarr[i].equals(lottoarr[i])){
corr++;
}else{
}
}
//if문으로 corr의 수에 따라 출력되는 멘트를 다르게
if(corr==6){
tvresult.setText("1등!");
}else if(corr==5){
tvresult.setText("2등!");
}else if(corr==4){
tvresult.setText("3등!");
}else{
tvresult.setText("다음기회에...");
}
}
private void initView() {
tvresult = findViewById(R.id.tvresult);
result1 = findViewById(R.id.result1);
result2 = findViewById(R.id.result2);
result3 = findViewById(R.id.result3);
result4 = findViewById(R.id.result4);
result5 = findViewById(R.id.result5);
result6 = findViewById(R.id.result6);
numresult1 = findViewById(R.id.numresult1);
numresult2 = findViewById(R.id.numresult2);
numresult3 = findViewById(R.id.numresult3);
numresult4 = findViewById(R.id.numresult4);
numresult5 = findViewById(R.id.numresult5);
numresult6 = findViewById(R.id.numresult6);
다음은 갱신 후 코드이다.
숫자형 배열에 for문을 활용해 객체지정과 배열지정을 활용하여 효율적인 프로그래밍 코드를 짤 수 있었다.
package com.example.app20211203;
import androidx.appcompat.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.widget.TextView;
import java.util.Arrays;
import java.util.Random;
public class MainActivity2 extends AppCompatActivity {
TextView tvresult; //결과값에서 얼마나 맞췄는지 출력
TextView[] tvRnums = new TextView[6]; //클래스에서 생성된 난수 로또번호 값을 담는 배열
TextView[] tvnums = new TextView[6]; //사용자가 입력한 로또번호값을 담는 배열
Random ran; //랜덤난수
int cnt; //정답 맞춘횟수
String result; //출력할 결과값
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main2);
//쓰이는 객체 findviewbyId
tvresult = findViewById(R.id.tvresult);
//랜덤 숫자를 보여줄 TextView 6개를 초기화
for(int i=0;i<tvRnums.length;i++){
int viewId = getResources().getIdentifier("result"+(i+1), "id", getPackageName());
tvRnums[i] = findViewById(viewId);
}
//사용자가 입력한 숫자를 보여줄 TextView 6개를 초기화
for(int i=0;i<tvnums.length;i++){
int viewId = getResources().getIdentifier("numresult"+(i+1), "id", getPackageName());
tvnums[i] = findViewById(viewId);
}
//인텐트에 저장한 사용자가 입력한 숫자값 가져오기
int[] nums =getIntent().getIntArrayExtra("nums");
//가져온 숫자들을 사용자가 입력한 것을 뿌려주는 numresult에 출력하자.
for(int i=0; i<nums.length;i++){
tvnums[i].setText(String.valueOf(nums[i]));
}
//1~45까지의 랜덤수를 6개 생성하여 배열에 저장.
int[] rnums = new int[6];
ran = new Random();
for(int i = 0; i<rnums.length;i++){
rnums[i] = ran.nextInt(45)+1; //0~44 라서 1~45로~
//숫자 똑같을 경우 중복체크하기.
for(int j=0; j<i; j++){
if(rnums[i]==rnums[j]){
i--;
//하나 더 감소시켜서 원래 지정했던 숫자를 지우고 새로 숫자를 지정하도록 하자.
}
}
}
//제대로 잘 나왔는지 확인하기!
Log.d("MainActivity2", Arrays.toString(rnums));
//tvRnums에 생성되었던 난수배열 rnums를 출력.
for(int i=0;i<rnums.length;i++){
tvRnums[i].setText(String.valueOf(rnums[i]));
}
//랜덤수와 사용자가 입력한 수를 비교하여 등수를 출력
//조건)
//6개 모두 맞추면 1등, 5개는 2등, 4개는 3등, 그 이외는 다음기회에..
//사용자가 입력한 nums랑 난수생성된 rnums의 i번째의 숫자를 비교하여 정답 맞춘개수를 세기.
for(int i=0; i<nums.length;i++){
for(int j=0;j<rnums.length;j++){
if(nums[i] == rnums[j]){
cnt += 1; //cnt = 정답 맞춘 횟수. 둘이 서로 일치할 시 하나 더 증가시킴.
}
}
}
//맞춘 횟수에 따라 최종 결과 출력 메세지를 다르게 setText로 변경
if(cnt == 6){
result="1등";
}else if(cnt ==5){
result="2등";
}else if(cnt ==4){
result="3등";
}else if(cnt ==1) {
result = "하나라도 맞춤";
}else {
result="다음 기회에...";
}
tvresult.setText(result);
'코딩공부 > Android' 카테고리의 다른 글
[스마트인재개발원] 이미지 슬라이드 앱 만들기 (0) | 2022.01.03 |
---|---|
[스마트인재개발원] 주사위 게임 예제 만들기 (0) | 2022.01.03 |
[스마트인재개발원] Constraint Layout에서 Chain 사용하기 (0) | 2022.01.03 |
[스마트인재개발원]Android - intent (0) | 2021.12.27 |
[스마트인재개발원] Android - 개요 (0) | 2021.12.24 |
Comments