package study.exam;
import java.util.ArrayList;
import java.util.Scanner;
public class Ex07 {
ArrayList<Integer> fiboList; // 피보나치 수 배열
public static void main(String[] args) {
new Ex07().start();
}
// 시작
public void start() {
getInput(); // 숫자 입력받기
fibo(); // 피보나치 수열 수행 및 결과 출력
}
// 피보나치 수열 구하고 출력하는 메서드
public void fibo() {
if(fiboList!=null) {
int num3 = 0; // 피보나치 수
int sum = 0; // 피보나치 수열의 합
System.out.print(fiboList.get(0) + " + " + fiboList.get(1)); // 1,2번째 숫자 출력
sum += fiboList.get(0); // 누적 합계에 1번째 수 누적
sum += fiboList.get(1); // 누적 합계에 2번째 수 누적
int i=0; // 반복 인덱스용 인수
while(true) {
num3 = fiboList.get(i) + fiboList.get(i+1); // 3번째 수 구하기
sum += num3;
if(sum>1000) { // 피보나치 수열의 합이 1000이하까지 반복
sum -= num3;
break;
}
fiboList.add(num3); // 이전 두 수의 합을 저장
System.out.print(" + " + num3);
i++;
}
System.out.print(" = " + sum);
}
}
// 사용자 입력값 가져오는 메서드
public void getInput() {
fiboList = new ArrayList<>();
Scanner sc = new Scanner(System.in);
while(true) {
try {
System.out.println("피보나치 수열의 합을 구합니다.");
System.out.print("1번째 항 입력 : ");
String numStr = sc.next();
int num1 = Integer.parseInt(numStr);
if(num1>0) { // 0보다 큰 숫자이면
fiboList.add(num1);
}else {
throw new Exception();
}
System.out.print("2번째 항 입력 : ");
numStr = sc.next();
int num2 = Integer.parseInt(numStr);
if(num2>0) { // 0보다 큰 숫자이면
fiboList.add(num2);
break;
}else {
throw new Exception();
}
} catch (Exception e) {
System.out.println("1이상의 정수만 입력해주세요");
}
}//end while
}//end getInput()
}