기존코드에서 전역변수를 매개변수로 변경시켜 함수를 외부로부터 영향받지 않도록함
package test;
import java.util.Scanner;
public class Program {
static int size = 3;
static int[] kors = new int[size];
static Scanner scan = new Scanner(System.in);
public static void main(String[] args) {
int menu = 0; // 1.INPUT 2.PRINT 3.EXIT
final int MENU_INPUT = 1; // 상수
final int MENU_PRINT = 2; // 상수
final int MENU_EXIT = 3; // 상수
boolean loop = true;
//메뉴
while(loop){
System.out.println("\t1.성적입력");
System.out.println("\t2.성적출력");
System.out.println("\t3.종료");
System.out.print("\t>>>");
menu = scan.nextInt();
switch(menu) {
case MENU_INPUT://1
gradeEnter();
case MENU_PRINT://2
gradeOutput();
case MENU_EXIT://3
//EXIT
break;
default:
System.out.println("입력오류 : 1에서 3까지만 입력 할 수 있습니다.");
}
System.out.println("good bye~");
break;
}
}
//성적입력--------------------------------------
static void gradeEnter() {
// 점수 초기화
for(int i=0; i<size; i++) {
kors[i] = 0;
}
System.out.println("------------------------------------");
System.out.println("@@@@@@@@@@@@@성적입력@@@@@@@@@@@@@@@@");
for(int i=0; i<size; i++){
do{
System.out.printf("국어%d : ",i+1);
kors[i]=scan.nextInt();//점수입력
if(kors[i]<0||100<kors[i]) {
System.out.println("성적범위를 벗어났습니다.");
}
}while(kors[i]<0||100<kors[i]); // 점수 범위를 벗어날 경우 false, 위의 내용 다시 반복
}
}
//성적출력--------------------------------------
static void gradeOutput() {
int total;
float avg;
total = kors[0] + kors[1] + kors[2];
avg = total / 3.0f;
System.out.println("------------------------------------");
System.out.println("@@@@@@@@@@@@@성적출력@@@@@@@@@@@@@@@@");
for(int i=0; i<size; i++) {
System.out.printf("\t국어%d: %3d\n", i+1, kors[i]);// \t 탭, %3d 3칸 정렬, \n 한칸내리기
}
System.out.printf("\t총점: %3d\n", total); // 3칸 정렬
System.out.printf("\t평균: %6.2f\n", avg); // 소수점 2자리 까지 나오고 6칸 정렬
System.out.println("------------------------------------");
}
}
전역변수 kors 배열 변수를 메소드 매개변수로 변경함
package test;
import java.util.Scanner;
public class Program {
static int size = 3;
static Scanner scan = new Scanner(System.in);
public static void main(String[] args) {
int[] korsList = new int[size];
int menu = 0; // 1.INPUT 2.PRINT 3.EXIT
final int MENU_INPUT = 1; // 상수
final int MENU_PRINT = 2; // 상수
final int MENU_EXIT = 3; // 상수
boolean loop = true;
//메뉴
while(loop){
System.out.println("\t1.성적입력");
System.out.println("\t2.성적출력");
System.out.println("\t3.종료");
System.out.print("\t>>>");
menu = scan.nextInt();
switch(menu) {
case MENU_INPUT://1
gradeEnter(korsList); // korsList배열을 매개변수로 받음
case MENU_PRINT://2
gradeOutput(korsList);// korsList배열을 매개변수로 받음
case MENU_EXIT://3
//EXIT
break;
default:
System.out.println("입력오류 : 1에서 3까지만 입력 할 수 있습니다.");
}
System.out.println("good bye~");
break;
}
}
//성적입력--------------------------------------
static void gradeEnter(int[] kors) {//매개변수는 지역에서는 마음대로 설정 가능
//kors == korsList 배열임
int kor;
// 점수 초기화
for(int i=0; i<size; i++) {
kors[i] = 0;
}
System.out.println("------------------------------------");
System.out.println("@@@@@@@@@@@@@성적입력@@@@@@@@@@@@@@@@");
for(int i=0; i<size; i++){
do{
System.out.printf("국어%d : ",i+1);
kor=scan.nextInt();//점수입력
if(kor<0||100<kor) {
System.out.println("성적범위를 벗어났습니다.");
}
}while(kor<0||100<kor); // 점수 범위를 벗어날 경우 false, 위의 내용 다시 반복
kors[i] = kor;
}
}
//성적출력--------------------------------------
static void gradeOutput(int[] kors) {
int total;
float avg;
total = kors[0] + kors[1] + kors[2];
avg = total / 3.0f;
System.out.println("------------------------------------");
System.out.println("@@@@@@@@@@@@@성적출력@@@@@@@@@@@@@@@@");
for(int i=0; i<size; i++) {
System.out.printf("\t국어%d: %3d\n", i+1, kors[i]);// \t 탭, %3d 3칸 정렬, \n 한칸내리기
}
System.out.printf("\t총점: %3d\n", total); // 3칸 정렬
System.out.printf("\t평균: %6.2f\n", avg); // 소수점 2자리 까지 나오고 6칸 정렬
System.out.println("------------------------------------");
}
}
함수이름은 위와 같이 하는게 좋은데
나는 거꾸로 해놔서 다음부터는 위에 처럼 함수명을 지어야겠다.
'Java 코드연습' 카테고리의 다른 글
[뉴렉처] 함수의 매개변수 (0) | 2021.10.18 |
---|---|
[뉴렉처] Top Down 방식으로 구현하는 간단 예제 (0) | 2021.10.18 |
[뉴렉처] 코드 구조화 Bottom Up 방식 연습 (0) | 2021.10.17 |
[뉴렉처] 오목판 출력하기 (0) | 2021.10.17 |
[뉴렉처] 반복문 연습 (0) | 2021.10.16 |