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

JohnKim·2022년 8월 10일
0

flutter

목록 보기
4/7

For loop

목차

  1. For loop 구조
  2. For in loop 구조
  3. forEach loop 구조
  4. for loop, for in loop / 로또 프로그램
  5. Set, while loop / 로또 프로그램
  6. List.generate / 로또 프로그램 (dummy data 생성하여 최적화)

1. For loop

For loop의 기본적인 형태

for(int i = 0; i < 6; i++) {
	print('$i번째 실행);
}

ex 1. 만일 3씩 증가하게 한다면?

for(int i=0; i<10; i+=3){
	print('$i번째 실행);
}

i=i+3 은 i+=3과 같다!

출력값
초기값 i = 0 => 0
0 입력 => i = 0 + 3 => 3
3 입력 => i = 3 + 3 => 6
6 입력 => i = 6 + 3 => 9

종료

ex 2. 어떤 보드게임이 있고 버튼을 누르면 5칸을 전진하는 게임이 있다면??

void forward(int move){
  for(int i=1; i<=move; i++){
    print('$i칸 이동했습니다');
  }
}
void main(){
  forward(5);
}

결과

1칸 이동했습니다.
2칸 이동했습니다.
3칸 이동했습니다.
4칸 이동했습니다.
5칸 이동했습니다.

종료

문제 1. for loop를 사용하여 무지개 색의 리스트를 순차적으로 출력하라.

void main(){
  List<String> rainbow = ['빨, 주, 노, 초, 파, 남, 보'];
}

void main(){
  List<String> rainbow = ['빨,주,노,초,파,남,보'];
  for(i=0; i<rainbow.length; i++){
  print(rainbow[i]);
 }
}

출력
빨,주,노,초,파,남,보

2. For... in loop

기존 for loop 는 범위를 어디까지 해야할지 고민해야하기 때문에 이로 인하여 에러가 발생할 수도 있고 번거롭다.
이를 해결하기 위한 것이 for...in loop 이다.

List<String> rainbow = ['빨','주','노','초','파','남','보'];
  for(String x in rainbow){
    print(x);
  }

for(리스트속성 객체명 in 리스트변수명) {
print(객체명);
}

3. For... each loop

for in loop 와 비슷하지만 for each loop 는 연산이 조금 더 빠르다는 장점이 있다.

 void main(){
   List<String> carMaker = ['BMW', 'BENZ', 'AUDI', 'JAGUAR'];
   carMaker.forEach((name){
     print(name);
   });
 } 

4. 로또번호 생성하기

랜덤으로 나의 번호와 추천 번호를 생성한 후에 두 개의 번호를 비교해서 어떤 번호가 일치하는지 출력하는 코드

  import 'dart:math'; // Dart math 라이브러리 호출
  
  // 당첨번호 생성
  
  List<int> lottoNumber(){ // List 타입의 lottoNumber라는 함수 생성
    var random = Random(); // random 객체 생성
    List<int> lottoList = []; // 당첨번호를 담은 빈 리스트 생성
    var num; //랜덤으로 생성된 번호 하나하나를 담을 num 변수 생성
    for(int i=0; i<6; i++) {
      num = random.nextInt(45)+1; // 랜덤함수 번호생성 0부터 시작하기 때문에 +1 해줌
      lottoList.add(num); // num 변수에 할당된 Random한 숫자를 lottoList에 추가. add 메서드를 쓴다.
    }
   print('당첨번호');
   print(lottoList);
   return lottoList; // 리스트 타입이므로 로또 리스트를 리턴한다.
  }
  
  // 추천번호 생성
                      
  List<int> myNumber(){ 
    var random = Random(); 
    List<int> myList = []; 
    var num; 
    for(int i=0; i<6; i++) {
      num = random.nextInt(45)+1; 
      myList.add(num);
    }
   print('추천번호');
   print(myList);
   return myList; 
  }
                
  // 두 개 번호를 비교하는 코드를 작성

  void checkNumber(lottoList, myList){ // 두 개의 번호를 비교해야 하므로 인자값으로 lottoList와 myList의 리턴값을 받는다.
	for(int lotto in lottoList){ // 중첩 반복문
      for(int myNum in myList){
		print('로또번호 = $lotto');
        print('내 추첨번호 = $myNum');
      }
    }
  }

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

결과

당첨번호
[3, 10, 37, 10, 39, 11]
추천번호
[5, 42, 42, 1, 3, 37]
로또번호 = 3
내 추첨번호 = 5
로또번호 = 3
내 추첨번호 = 42
로또번호 = 3
내 추첨번호 = 42
로또번호 = 3
내 추첨번호 = 1
로또번호 = 3
내 추첨번호 = 3
로또번호 = 3
내 추첨번호 = 37
로또번호 = 10
내 추첨번호 = 5
로또번호 = 10
내 추첨번호 = 42
로또번호 = 10
내 추첨번호 = 42
로또번호 = 10
내 추첨번호 = 1
로또번호 = 10
내 추첨번호 = 3
로또번호 = 10
내 추첨번호 = 37
로또번호 = 37
내 추첨번호 = 5
로또번호 = 37
내 추첨번호 = 42
로또번호 = 37
내 추첨번호 = 42
로또번호 = 37
내 추첨번호 = 1
로또번호 = 37
내 추첨번호 = 3
로또번호 = 37
내 추첨번호 = 37
로또번호 = 10
내 추첨번호 = 5
로또번호 = 10
내 추첨번호 = 42
로또번호 = 10
내 추첨번호 = 42
로또번호 = 10
내 추첨번호 = 1
로또번호 = 10
내 추첨번호 = 3
로또번호 = 10
내 추첨번호 = 37
로또번호 = 39
내 추첨번호 = 5
로또번호 = 39
내 추첨번호 = 42
로또번호 = 39
내 추첨번호 = 42
로또번호 = 39
내 추첨번호 = 1
로또번호 = 39
내 추첨번호 = 3
로또번호 = 39
내 추첨번호 = 37
로또번호 = 11
내 추첨번호 = 5
로또번호 = 11
내 추첨번호 = 42
로또번호 = 11
내 추첨번호 = 42
로또번호 = 11
내 추첨번호 = 1
로또번호 = 11
내 추첨번호 = 3
로또번호 = 11
내 추첨번호 = 37

보는 것과 같이 직관적이지 못하고 복잡하다. 추천번호 매칭 비교를 위해 코드수정.

  void checkNumber(lottoList, myList){
  	int match = 0;
  	for(int lotto in lottoList){
  	  for(int myNum in myList){
  		if(lotto == myNum){
	      match++;
        }
      }
    print('$match개의 당첨번호가 있습니다!');
  }

결과

당첨번호
[28, 43, 18, 17, 15, 27]
추천번호
[12, 45, 17, 26, 10, 18]
2개의 당첨번호가 있습니다.

profile
Developer

0개의 댓글