본문 바로가기

Web Dev/react.js

React-Native 앱 개발 : 로또 번호 생성하기(React.js로 중복 되지 않는 랜덤 수 뽑아내기)

반응형

[로또 번호 생성]

일단 expo 앱을 설치해준다. 
맥북으로 코딩하였는데 맥북에 react-native 설치하는건 다음 포스팅에....

npx create-expo-app AwesomeProject

cd AwesomeProject
npx expo start

에디터로 vscode를 실행해준다.

핵심 ! 

1에서 45까지의 숫자 중 뽑아내는 6개의 랜덤 값이 중복이 안 되도록 하여 출력해줘야 한다.
이것 저것 찾아 봤는데 내가 개발한 중복 되지 않는 랜덤 값 생성 자바스크립트 코드가 초심자가 보기에 좋을 것 같다

<핵심 알고리즘 >

  function loadingLotto() {

    let lotto_num_list = [];
    let random_num = 0;

    for (let i = 0; i < 6; i++) {
      random_num = Math.floor(Math.random() * 45 + 1);
      if (lotto_num_list.includes(random_num) == false) {
        lotto_num_list.push(random_num);

      }
      else {
        //for문 반복 중에 중복 되는 숫자가 list 안에 있으면 계속 i 카운트를 다운시켜 
        //중복 안 되는 숫자가 나와서 i가 5가 될때까지 for문이 열일하게 만든다
        i -= 1
      }

    }
    // 6개 뽑아낸 로또 숫자 정렬
    lotto_num_list.sort((a, b) => a - b)

    setLotto(lotto_num_list);

  }

 
1. Math.random() : 랜덤한 수를 출력해주고 45개의 정수가 생성 되도록 변수에 넣어 준다. 
2. 배열 . includes(arg) : 변수가 해당 배열 내부에 존재하는지 확인해주고 boolen 값을 반환해준다 . [존재하면 True]
3. 6번의 반복 문을 통해 랜덤 값을 생성하는데  배열 안에 해당 랜덤 값이 없으면 list 변수에 값을 push 한다

4. for 문 반복 중에 중복 되는 숫자가 list 안에 있으면 계속 변수 i 의 숫자를 다운 시켜 중복 안 되는 숫자가 나와서 변수 i가 5에 도달 할 때까지 for문이 반복되도록 만든다.
 
5. sort() 함수는 숫자의 앞자리만 보고 정렬해서 원하는 모양처럼 오름차순으로 배열 정렬이 안될 때가 있다 그래서 값들을 비교해서 정렬하는 조건을 넣어줬다. 
 

<전체 코드>

import { StatusBar } from 'expo-status-bar';
import { useState, useEffect } from 'react';
import { StyleSheet, Text, View, Button } from 'react-native';


export default function App() {

  const [lotto, setLotto] = useState([]);

  function loadingLotto() {

    let lotto_num_list = [];
    let random_num = 0;

    for (let i = 0; i < 6; i++) {
      random_num = Math.floor(Math.random() * 45 + 1);
      if (lotto_num_list.includes(random_num) == false) {
        lotto_num_list.push(random_num);

      }
      else {
        //for문 반복 중에 중복 되는 숫자가 list 안에 있으면 계속 i 카운트를 다운시켜 
        //중복 안 되는 숫자가 나와서 i가 5가 될때까지 for문이 열일하게 만든다
        i -= 1
      }

    }
    // 6개 뽑아낸 로또 숫자 정렬
    lotto_num_list.sort((a, b) => a - b)

    setLotto(lotto_num_list);

  }
  useEffect(() => {
    loadingLotto();

  }, []);


  return (
    <View style={styles.container}>
      <Text style={{ marginBottom: 50 }}>Centumjoonho</Text>
      <Button title='로또번호 생성' onPress={() => { loadLotto() }}></Button>
      <Text style={{ fontSize: 25, marginTop: 30 }}>{lotto.join(", ")}</Text>
      <StatusBar style="auto" />
    </View>
  );
}

const styles = StyleSheet.create({
  container: {
    flex: 1,
    backgroundColor: '#fff',
    alignItems: 'center',
    justifyContent: 'center',
  },

});

 

 

반응형