-
[JAVA]구조적 프로그래밍(2)JAVA 2021. 3. 2. 00:32
안녕하세요!
이번 포스팅은 지난 포스팅에 이어서, 코딩을 하면서 구조적 프로그래밍에 대해 알아보겠습니다.
지난 국어성적입력 로직을 가져와 설명하겠습니다.
이번 강의 역시 뉴렉처님 강의를 정리한 내용입니다.
www.youtube.com/watch?v=uIDfIjCeNx4&list=PLq8wAnVUcTFWQ4TpRPZRa5nj1VwfyO7st&index=2
자세한 내용은 위 강의를 참고해주세요.
오늘 포스팅의 학습목표는
구조적인 프로그래밍을 이용하여 아래 로직을 함수를 이용하여 재설정 할 수 있다!
입니다. 조금 어려울 수도 있어요! 하지만 이해되실때 까지 보시면 됩니다 하하핳..
자 그럼 지난 시간에 정리한 코드를 리뷰해보겠습니다.
package part2.ex1.성적입력부분나누기; import java.util.Scanner; public class Program2 { public static void main(String[] args) { int[] kors = new int[3]; int total = 0; float avg; int menu; boolean keepLoop = true; Scanner scan = new Scanner(System.in); while (keepLoop) { System.out.println("┌───────────────────────────┐"); System.out.println("│ 메인 메뉴 │"); System.out.println("└───────────────────────────┘"); System.out.println("\t1. 성적입력 "); System.out.println("\t2. 성적출력 "); System.out.println("\t3. 종료 "); System.out.println("\t선택> "); menu = scan.nextInt(); switch (menu) { case 1: System.out.println("┌───────────────────────────┐"); System.out.println("│ 성적 입력 │"); System.out.println("└───────────────────────────┘"); System.out.println(); for (int i = 0; i < 3; i++) do { System.out.printf("국어%d : ", i + 1); kors[i] = scan.nextInt(); if (kors[i] < 0 || 100 < kors[i]) System.out.println("국어성적은 0~100까지의 범위만 입력이 가능합니다."); } while (kors[i] < 0 || 100 < kors[i]); System.out.println("─────────────────────────────"); break; case 2: for (int i = 0; i < 3; i++) total += kors[i]; avg = total / 3.0f; System.out.println("┌───────────────────────────┐"); System.out.println("│ 성적 출력 │"); System.out.println("└───────────────────────────┘"); System.out.println(); for (int i = 0; i < 3; i++) System.out.printf("국어 %d : %3d\n", 3 - i, kors[i]); System.out.printf("총점 : %3d\n", total); System.out.printf("평균 : %6.2f\n", avg); System.out.println("─────────────────────────────"); break; case 3: System.out.println("Bye~~"); keepLoop = false; break; default: System.out.println("잘못된 값을 입력하셨습니다. 메뉴는 1~3까지입니다."); } } } }
코드가 어색하다구여? 계속 보세여 친해져요ㅋ
지난 case문을 이용해서 국어성적 입력하는 부분을 공부했었는데요.
지난 시간까지 한 방법이 절차적인 방법이었다면, 이번에는 구조적인 방법을 이용해 코딩을 해보겠습니다.
일단 큰 틀에서 우리는 이러한 방법을 이용하겠습니다.
위의 이미지 처럼 성적입력코드를 함수로 만들고, 사용하겠습니다.
하지만 주의점이 있습니다. 바로 성적입력 코드를 함수로 빼면, main에 있는 kor를 사용할 수 없게 됩니다.
static - 함수를 만들때 static을 붙여줍니다.
void - 반환값이 없다면 void를 씁니다.
* 함수와 관련된 부분들은 더 알아봐야 될 것같습니다 :( *
에러발생 이유: kors라는 변수가 성적입력() 함수에는 없기 때문입니다.
이러한 오류를 해결하기 위해 kors를 전역변수로 설정하는 방법이 있습니다.
최종 코드!
package part2.ex1.성적입력부분나누기; import java.util.Scanner; public class Program2 { static int[] kors = new int[3]; public static void main(String[] args) { int total = 0; float avg; int menu; boolean keepLoop = true; Scanner scan = new Scanner(System.in); while (keepLoop) { System.out.println("┌───────────────────────────┐"); System.out.println("│ 메인 메뉴 │"); System.out.println("└───────────────────────────┘"); System.out.println("\t1. 성적입력 "); System.out.println("\t2. 성적출력 "); System.out.println("\t3. 종료 "); System.out.println("\t선택> "); menu = scan.nextInt(); switch (menu) { case 1: 성적입력(); break; case 2: for (int i = 0; i < 3; i++) total += kors[i]; avg = total / 3.0f; System.out.println("┌───────────────────────────┐"); System.out.println("│ 성적 출력 │"); System.out.println("└───────────────────────────┘"); System.out.println(); for (int i = 0; i < 3; i++) System.out.printf("국어 %d : %3d\n", 3 - i, kors[i]); System.out.printf("총점 : %3d\n", total); System.out.printf("평균 : %6.2f\n", avg); System.out.println("─────────────────────────────"); break; case 3: System.out.println("Bye~~"); keepLoop = false; break; default: System.out.println("잘못된 값을 입력하셨습니다. 메뉴는 1~3까지입니다."); } } } static void 성적입력(){ Scanner scan = new Scanner(System.in); System.out.println("┌───────────────────────────┐"); System.out.println("│ 성적 입력 │"); System.out.println("└───────────────────────────┘"); System.out.println(); for (int i = 0; i < 3; i++) do { System.out.printf("국어%d : ", i + 1); kors[i] = scan.nextInt(); if (kors[i] < 0 || 100 < kors[i]) System.out.println("국어성적은 0~100까지의 범위만 입력이 가능합니다."); } while (kors[i] < 0 || 100 < kors[i]); System.out.println("─────────────────────────────"); } }
짜라란!
여기서, Scanner scan = new Scanner(System.in);
전역 변수로 따로 사용하지 않고, 각 함수별로 나타냅시다!
case1 부분을 구조적으로 나타냈으니
다음에 할 부분은 case2 , case3 에 대한 함수를 만드는 것이겠죠?
이 부분도 생각해보고 코딩해보면 재밌을거 같습니다!
그럼 다음에 뵙겠습니다
'JAVA' 카테고리의 다른 글
[JAVA]구조적 프로그래밍(4) (0) 2021.03.03 [JAVA]구조적 프로그래밍(3) (0) 2021.03.03 [JAVA]구조적 프로그래밍(1) (0) 2021.03.02 [JAVA] 배열의 중요성 (0) 2021.02.26 [JAVA] 제어 구조 if 와 while (0) 2021.02.25