Dart 반복문(loop)과 로또 프로그램 2

JohnKim·2022년 8월 12일
0

flutter

목록 보기
5/7

리스트에서 중복생성을 피하려면 set을 사용해준다.

Ex.

Set<int> rainbow = {1, 2, 3, 4, 5, 6};

하지만 중복을 발생한다면 set은 중복된 숫자를 제외한 결과를 호출한다.

{1, 2, 3, 4, 5, 5} => {1, 2, 3, 4, 5}

그래서 while loop를 사용해야 하는데 예시는 다음과 같다.

while(a != 100000){
  doing something
  }

while loop는 조건문의 조건이 '거짓'이 될 때까지 계속해서 무한 루프를 수행한다.
예시는 'a가 100000이 아니다'라는 조건이 참이 아닐때까지 작업을 계속 수행한다는 의미이다. 즉, 100000이 되면 작업을 멈춘다는 뜻이다.

set과 while을 사용하여 로또 코드를 다시 코딩해보자.

import 'dart:math';

Set<int> lottoNumber() {
  final random = Random();
  final Set<int> lottoSet = {}; // 컴파일시에 값이 할당되는 것이 아니라 앱 구동시에 할당되기 때문에 Set앞에 final변수를 삽입한다.
  // var num;
  
  while(lottoSet.length != 6) {
    // num = random.nextInt(45)+1;
    lottoSet.add(random.nextInt(45)+1);
  }
  
  print('당첨번호');
  print(lottoSet.toList);
  
  return lottoSet;
}

Set<int> myNumber() {
  final random = Random();
  final Set<int> mySet = {}; // 컴파일시에 값이 할당되는 것이 아니라 앱 구동시에 할당되기 때문에 Set앞에 final변수를 삽입한다.
  // var num;
  
  while(mySet.length != 6) {
    // num = random.nextInt(45)+1;
    mySet.add(random.nextInt(45)+1);
  }
  
  print('당첨번호');
  print(mySet.toList);
  
  return mySet;
}
  
void checkNumber(lottoSet, mySet) {
  int match = 0;
  
  for(int lotto in lottoSet) {
  	for(int myNum in mySet) {
      if(lotto = myNum) {
        match++;
        print('당첨번호: $myNum');
      }
    }
  }
  print('$match개의 당첨번호가 있습니다');
}

void main(){
  
  Set<int>lottoFinal = lottoNumber();
  Set<int>myFinal = myNumber();
  
  checkNumber(lottoFinal, myFinal);
}

이를 좀 더 쉽게 사용하기 위하여 List.generateshuffle method를 알아보자.

void main(){
  var test = (List<int>.generate(45, (i) => i+1)..shuffle()).sublist(0, 6); // 1~45까지 숫자 섞어서 생성 
  print(test);
}

cascade 표기법

p1..name = 'John'
  ..setA(30)
  ..show();

한 객체의 맴버 함수에 접근하거나 속성을 간단하게 불러올 수 있음.

sublist함수는 원하는 숫자를 뽑을수있음

sublist(int start, int end);

주의할 점은 end는 실제 뽑는 값은 end-1값임! 즉 6번을 입력하면 6-1인 5까지의 번호가 출력됨.

List<int> lottoNumber(){
  
  var number = (List.generate(45, (index) => ++index)..shuffle()).sublist(0, 6);
  
  print('당첨번호');
  print(number);
  
  return number;
}

List<int> myNumber(){

  var number2 = (List.generate(45, (index) => ++index)..shuffle()).sublist(0, 6); // 전위 연산자 ++index
  
  print('추천번호');
  print(number2);
  
  return number2;
}

void checkNumber(List<int>number, List<int>number2){
  
  int match = 0;
  
  for(int lotto in number){
    for(int myNum in number2){
      match++;
    }
  }
  print('$match개의 숫자가 일치합니다.');
}

void main(){
  List<int> lottoFinal = lottoNumber();
  List<int> myFinal = myNumber();
  
  checkNumber(lottoFinal, myFinal);
}0
profile
Developer

0개의 댓글