본문 바로가기

JAVA/기초 프로그래밍

성적 통계 프로그램

 

점수도 문자로 입력 받았고

점수 범위를 설정 할 때 charAt 을 사용해 숫자로 변경 후 지정함.

 

for문에서 이름,점수들을 입력받아  배열에

student[i][0] = name;
student[i][1] = kor;   ~

이렇게 대입.

 

새로운 2차원 배열을 생성하여

기존 배열의 값을 for문을 이용하여 입력

		int studentCount[][] = new int[student.length][3];
		for (int j = 0; j < studentCount.length; j++) {
			studentCount[j][0] = Integer.parseInt(student[j][1]);//kor
			studentCount[j][0] = Integer.parseInt(student[j][2]);//eng
			studentCount[j][0] = Integer.parseInt(student[j][3]);//math
		}

 

 

 

 

최저점수

최고점수

		int max = studentCount[0][0];	//=0;으로 초기화 해도됨
		for (int j = 0; j < student.length; j++) {
			if(max < studentCount[j][1]) {	//1은kor, 2는eng~
				max = studentCount[j][1];
			}
		}
		//5. 국어, 수학, 영어 최고점수와 최저점수 min
		
		int min = studentCount[0][1];	//0;으로 설정할경우 0보다 낮은수가 없을경우 문제
		for (int j = 0; j < student.length; j++) {
			if (min > studentCount[j][1]) {
				min = studentCount[j][1];
			}
		}

 

 

 

 

전체;

		Scanner sc = new Scanner(System.in);
		
		//선언
		//학생 성적 관리용 2차원 배열
		//String -> 이름, 숫자 ->parseInt로 변환 
		String student[][] = null;
		//			학생수
		int count;	//학생수
		
		//1. 학생수 입력받기
		System.out.println("학생수를 입력 = ");
		count = sc.nextInt();
		
		//2.동적할당
		student = new String[count][4];	//4는 입력 안해도 됨
		
		//3. 입력: 이름, 국어, 영어, 수학
		for (int i = 0; i < student.length; i++) {
			System.out.print((i+1)+"번째 학생 ");
			System.out.println("이름 : ");
			String name = sc.next();
			
			String kor = "";
			while(true) {
			System.out.println("국어 :");
			kor = sc.next();	// 98 100 10a
			
			//숫자로 입력 확인	-> 아스키코드값으로 비교 
			//>>다시입력해주세요
			boolean check = false;//문제가 발생하면 true -> 다시 입력
			for (int j = 0; j < kor.length(); j++) {
				char c = kor.charAt(j);
				if((int)c < 48 || (int)c > 57) {
					check = true;
					break;
				}
			}
			
			if (check == true) {
				System.out.println("잘못 입력하셨습니다. 다시 입력해 주십시오");
				continue;	//밑에있는것들 스킵
			}
			//1~100까지
			//>>범위를 초과했습니다
			int numKor = Integer.parseInt(kor);
			if (numKor <0 || numKor> 100) {
				System.out.println("범위를 초과한 점수입니다 다시입력해 주십시오");
				continue;
				}
			break;
			}
			
			///////////////////////////////////////영어
			String eng = "";
			while(true) {
			System.out.println("영어 :");
			eng = sc.next();	// 98 100 10a
			
			//숫자로 입력 확인	-> 아스키코드값으로 비교 
			//>>다시입력해주세요
			boolean check = false;//문제가 발생하면 true -> 다시 입력
			for (int j = 0; j < eng.length(); j++) {
				char c = eng.charAt(j);
				if((int)c < 48 || (int)c > 57) {
					check = true;
					break;
				}
			}
			
			if (check == true) {
				System.out.println("잘못 입력하셨습니다. 다시 입력해 주십시오");
				continue;	//밑에있는것들 스킵
			}
			//1~100까지
			//>>범위를 초과했습니다
			int numEng = Integer.parseInt(eng);
			if (numEng <0 || numEng> 100) {
				System.out.println("범위를 초과한 점수입니다 다시입력해 주십시오");
				continue;
				}
			break;
			}
			
		
			
			////////////////////////////////////수학
			String math = "";
			while(true) {
			System.out.println("수학 :");
			math = sc.next();	// 98 100 10a
			
			//숫자로 입력 확인	-> 아스키코드값으로 비교 
			//>>다시입력해주세요
			boolean check = false;//문제가 발생하면 true -> 다시 입력
			for (int j = 0; j < math.length(); j++) {
				char c = math.charAt(j);
				if((int)c < 48 || (int)c > 57) {
					check = true;
					break;
				}
			}
			
			if (check == true) {
				System.out.println("잘못 입력하셨습니다. 다시 입력해 주십시오");
				continue;	//밑에있는것들 스킵
			}
			//1~100까지
			//>>범위를 초과했습니다
			int numMath = Integer.parseInt(math);
			if (numMath <0 || numMath> 100) {
				System.out.println("범위를 초과한 점수입니다 다시입력해 주십시오");
				continue;
				}
			break;
			}
			

			//데이터를 배열에 대입
			student[i][0] = name;
			student[i][1] = kor;
			student[i][2] = eng;
			student[i][3] = math;
		
		}
		
		for (int j = 0; j < student.length; j++) {
			System.out.println((j+1)+"번째 학생 :");
			for (int j2 = 0; j2 < student[0].length; j2++) {
				System.out.print(student[j][j2]+"\t");
			}
			System.out.println();
		}
		
		//4. 국어, 수학, 영어 최고점수와 최고점수 max
		int studentCount[][] = new int[student.length][3];
		for (int j = 0; j < studentCount.length; j++) {
			studentCount[j][0] = Integer.parseInt(student[j][1]);//kor
			studentCount[j][0] = Integer.parseInt(student[j][2]);//eng
			studentCount[j][0] = Integer.parseInt(student[j][3]);//math
		}
		
		int max = studentCount[0][0];	//=0;으로 초기화 해도됨
		for (int j = 0; j < student.length; j++) {
			if(max < studentCount[j][1]) {	//1은kor, 2는eng~
				max = studentCount[j][1];
			}
		}
		//5. 국어, 수학, 영어 최고점수와 최저점수 min
		
		int min = studentCount[0][1];	//0;으로 설정할경우 0보다 낮은수가 없을경우 문제
		for (int j = 0; j < student.length; j++) {
			if (min > studentCount[j][1]) {
				min = studentCount[j][1];
			}
		}
		
		//6. 모든 점수의 총 합
		int sum = 0;
		for (int j = 0; j < studentCount.length; j++) {
			for (int j2 = 0; j2 < studentCount[0].length; j2++) {
				sum = sum + studentCount[j][j2];
				
			}
		}
		
		//7. 학생수에 따른 반 평균
		double avg = (double)sum/student.length;
		
		//8. 출력
		System.out.println("최고점수 :" +max);
		System.out.println("최저점수 :" +min);
		System.out.println("점수의 총 합 :" +sum);
		System.out.println("점수의 평균 :" +avg);