for문 제발 도와주세요

조회수 589회

자바입니다. 로또번호 어플을 간단히 만드려고합니다.

스피너 수에 맞춰 배열을 돌리는 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);
    }

}

1 답변

  • for (int s : result) {
        sb.append(" ").append(s).append(" ");
     }
    sb.append("}");
    lottonumber1.setText(sb.toString());
    sb.append("\n");
    Log.e(TAG, sb.toString());
    

    여기서 lottonumber1이 textview 인 것 같고 여기다가 출력을 하신다는 것 같은데

    lottonumber1에 계속 setText를 하시니 당연히 마지막 배열만 출력되는거죠....

    쉽게 생각하면 결과값을 계속 덮어씌워서 마지막 결과만 보이는 겁니다.

답변을 하려면 로그인이 필요합니다.

프로그래머스 커뮤니티는 개발자들을 위한 Q&A 서비스입니다. 로그인해야 답변을 작성하실 수 있습니다.

(ಠ_ಠ)
(ಠ‿ಠ)