자바입니다. 로또번호 어플을 간단히 만드려고합니다.
스피너 수에 맞춰 배열을 돌리는 for문에서 log를 찍으면 배열이 3개, 4개 등등 나오는데 실제 출력은 제일 제일 마지막 한개의 배열만 됩니다.
제발 도와주세요.
package com.example.lotto;
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.EditText;
import android.widget.Spinner;
import java.util.Arrays;
import android.widget.Button;
import android.widget.TextView;
public class MainActivity extends Activity implements View.OnClickListener {
private final static String TAG = "[JYIM]";
private Spinner mCountSpinner;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
Log.d(TAG, "onCreate");
initializeUI();
}
@Override
protected void onStart() {
super.onStart();
Log.d(TAG, "onStart");
}
@Override
protected void onResume() {
super.onResume();
Log.d(TAG, "onResume");
}
@Override
protected void onStop() {
super.onStop();
}
@Override
protected void onDestroy() {
super.onDestroy();
}
private void initializeUI() {
mCountSpinner = findViewById(R.id.spinner);
Button mGetNumberButton = findViewById(R.id.btn_num);
mGetNumberButton.setOnClickListener(this);
}
@Override
public void onClick(View view) {
//lotto();
makeLottoNumber();
}
private void makeLottoNumber() {
EditText numberText1 = findViewById(R.id.number1);
EditText numberText2 = findViewById(R.id.number2);
EditText numberText3 = findViewById(R.id.number3);
EditText numberText4 = findViewById(R.id.number4);
EditText numberText5 = findViewById(R.id.number5);
EditText numberText6 = findViewById(R.id.number6);
int lottoCount = Integer.parseInt((String) mCountSpinner.getSelectedItem());
String[] inputNumber = new String[]{numberText1.getText() + "", numberText2.getText() + "", numberText3.getText() + "", numberText4.getText() + "", numberText5.getText() + "", numberText6.getText() + ""};
String[] resultNumber = new String[6];
for (int i = 0; i < lottoCount; i++) {//10. 1~5번을 스피터에서 선택된 객수만큼 반복한다.
for (int j = 0; j < inputNumber.length; j++) {//1. 6개의 입력칸에 숫자가 있는지 확인.
//2. 각칸에 숫자의 존재 여부를 판단한다.
// 2.1 있으면 배열안에 숫자를 저장한다.
// 2.2 없으면 랜덤숫자를 생성하여 배열안에 숫자를 저장한다.
resultNumber[j] = inputNumber[j].equals("") ? getRandomNumber() : inputNumber[j];//삼항연산
}
// 3.2 중복이 없으면, 4로이동
//4. 배열을 오름차순으로 정렬한다.
if (hasDuplicateNumber(resultNumber)) {//3. 배열에 저장된 숫자중 중복이 있는지 확인한다.
// 3.1 중복이 있으면, 1번으로 이동한다.
//TODO: implement;
i--;
} else {
printResult(resultNumber);
}
}
}
private void printResult(String[] resultNumber) {
TextView lottonumber1 = findViewById(R.id.lotto1);
int[] result = new int[resultNumber.length];
for (int i = 0; i < resultNumber.length; i++) {
try {
result[i] = Integer.parseInt(resultNumber[i]);
} catch (NumberFormatException e) {
result[i] = 0;
}
}
Arrays.sort(result);
StringBuilder sb = new StringBuilder();
sb.append("{");
for (int s : result) {
sb.append(" ").append(s).append(" ");
}
sb.append("}");
lottonumber1.setText(sb.toString());
sb.append("\n");
Log.e(TAG, sb.toString());
}
private boolean hasDuplicateNumber(String[] resultNumber) {
//TODO: implement
for (int i = 0; i < resultNumber.length; i++) {
for (int j = 0; j < i; j++) {
if (resultNumber[i].equals(resultNumber[j])) {
return true;
}
}
}
return false;
}
private String getRandomNumber() {
//TODO: implement 랜덤함수
int result = (int) (Math.random() * 45 + 1);
return String.valueOf(result);
}
}