on
[스마트인재개발원] (Intent)Lotto_Simulator 실습(개선과정 포함)
[스마트인재개발원] (Intent)Lotto_Simulator 실습(개선과정 포함)
문제정의
드디어 안드로이드 첫 포스팅!
안드로이드는 굉장히 세세하게 하나하나 다룰 내용이 많다 ㅠ.ㅠ
로또 번호 입력창activity
화면구성 Layout.xml은 다음과 같다.
Component Tree
문제 해결과정
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
Component Tree
화면구성 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
다음은 갱신 후 코드이다.
숫자형 배열에 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
from http://dd0za-1004.tistory.com/51 by ccl(A) rewrite - 2021-12-03 14:01:12