import java.util.Scanner;

public class StudentCards_Array {

  1. public static void main(String[] args) {
  2. int total;
  3. int[] subjectA = new int[5];
  4. double average;
  5. char grade;
  6. boolean keepGoing;
  7. Scanner stMark = new Scanner(System.in);
  8. do {
  9. System.out.println("국어 점수를 입력해 주세요");
  10. subjectA[0]=stMark.nextInt();
  11. //변수로 정수값을 받아오는 대신에 받아온 정수값을 준비해놓은 int형의 배열에 저장하는 소스로 변경
  12. System.out.println("영어 점수를 입력해 주세요");
  13. subjectA[1]=stMark.nextInt();
  14. System.out.println("수학 점수를 입력해 주세요");
  15. subjectA[2]=stMark.nextInt();
  16. System.out.println("과학 점수를 입력해 주세요");
  17. subjectA[3]=stMark.nextInt();
  18. System.out.println("역사 점수를 입력해 주세요");
  19. subjectA[4]=stMark.nextInt();
  20. total =subjectA[0]+ subjectA[1] + subjectA[2] + subjectA[3] + subjectA[4];
  21. //배열 방 다 더하고
  22. average = total/5;
  23. //평균값
  24. if (average >= 90) grade = 'A';
  25. else if(average >= 80) grade = 'B';
  26. else if(average >= 70) grade = 'C';
  27. else if(average >= 60) grade = 'D';
  28. else grade = 'F';
  29. System.out.println("평균 : "+average);
  30. System.out.println("등급 : "+grade);
  31. System.out.println("다음 학생이 있습니까?(true or false)");
  32. keepGoing = stMark.nextBoolean();
  33. } while(keepGoing);
  34. stMark.close();
  35. }

}

=================출력문========================

국어,영어,수학,과학,역사 점수를 입력해 주세요
100
평균 : 100.0
등급 : A
다음 학생이 있습니까?(true or false)
true
국어,영어,수학,과학,역사 점수를 입력해 주세요
평균 : 0.0
등급 : F
다음 학생이 있습니까?(true or false)

=============================================
true를 입력하면 다음 입력이 불가능한 버그가 발생합니다.
어떻게 해결해야 할까요??

두번째 학생 성적 값을 입력받고 난 후

keepgoing이 false가 되어서 while 문이 실행이 되지 않는것 같습니다.

학생 성적 값을 입력받고난후에 sysout으로 keepgoing 변수 값을 확인해보세요
참고로 이런 상황에서는 do-while 보다 while을 사용해서 학생 성적을 계속 입력받을수 있게 하고
false 즉 더이상 입력받지 않는 상태가 되었을때
while문을 빠져나가게 하는것이 더 문제를 쉽게 해결할수 있는 방법인것 같습니다.

실행코드

  1. import java.util.Scanner;
  2. public class Main {
  3. public static void main(String[] args) {
  4. int total;
  5. int[] subjectA = new int[5];
  6. double average;
  7. char grade;
  8. boolean keepGoing = true;
  9. Scanner stMark = new Scanner(System.in);
  10. while (keepGoing) {
  11. System.out.println("국어: ");
  12. subjectA[0] = stMark.nextInt();
  13. System.out.println("영어: ");
  14. subjectA[1] = stMark.nextInt();
  15. System.out.println("수학: ");
  16. subjectA[2] = stMark.nextInt();
  17. System.out.println("사회: ");
  18. subjectA[3] = stMark.nextInt();
  19. System.out.println("과하: ");
  20. subjectA[4] = stMark.nextInt();
  21. total = subjectA[0] + subjectA[1] + subjectA[2] + subjectA[3] + subjectA[4];
  22. System.out.println("총점: " + total);
  23. average = total / 5.0;
  24. System.out.println("평균: " + average);
  25. if (average >= 90)
  26. grade = 'A';
  27. else if (average >= 80)
  28. grade = 'B';
  29. else if (average >= 70)
  30. grade = 'C';
  31. else if (average >= 60)
  32. grade = 'D';
  33. else
  34. grade = 'F';
  35. System.out.println("grade: " + grade);
  36. System.out.println("계속입력하시겠습니까? (y/n)");
  37. String word = stMark.next();
  38. if (word.equals("y")) {
  39. continue;
  40. } else {
  41. keepGoing = false;
  42. }
  43. }
  44. if (keepGoing == false) {
  45. System.out.println("프로그램 종료");
  46. }
  47. }
  48. }
[Markdown Preview]