JAVA

제어문

나주나주 2023. 12. 28. 17:52

== Control Statement

 

//중괄호 생략된 경우

if(조건식) 실행문1; 실행문2

//true //항상

 

향상된 for문

String[] names = { "홍길동", "이순신", "강감찬", "김태희", "전지현" };
      //for (변수타입 변수명 : 배열명) {};
		for (String name : names) {
			System.out.print(name);
		}
 

Scanner 사용 시 버그 처리

연달아서 값을 입력 받는 경우, Enter가 중복 처리 되어 넘어가는 것

→ 중간에 임시 문자열을 넣어줘서 해결

user = sc.nextLine();
String temp = sc.nextLine(); //엔터 나머지값 처리
evid = sc.nextLine();

 

 

분기문

 
공통점
차이점
break
반복문에서 사용
바로 탈출!
continue
반복문에서 사용
반복문을 종료하지 않지만 반복문의 처음으로 돌아감(continue 아래는 실행 X)
return
현재 메소드를 종료하고 호출한 곳으로 돌아감

Tip) 반복문 안에 if문이 있을 때 분기문을 사용할 수 있다

return문 밑에 코드를 쓸 경우: 돌아가지 못해 unreachable code가 뜨며 실행 X

 

Tip) void와 return 헷갈리는 부분

스택 영역에서 힙 영역의 값을 참조 == void

판단하거나 처리(계산하여 값을 바꿈) == void

"값을 전달 받아" 값에 따라 판단/처리 결과가 바뀌어야 함 == return

 

 

package ch06;

import java.util.Arrays;
import java.util.Scanner;

public class Jumin {
	public static void main(String[] args) {

		Scanner sc = new Scanner(System.in);

		String[] jumin = new String[13];
		int[] int_jumin = new int[12];
		int count = jumin.length;
		int[] patt = new int[] { 2, 3, 4, 5, 6, 7, 8, 9, 2, 3, 4, 5 };
		String juminLast = "";
		int sum = 0;

		for (int i = 0; i < count; i++) {
			System.out.print("주민번호를 입력하세요: ");
			jumin[i] = sc.next();
		}

		juminLast = jumin[jumin.length - 1];
		int int_juminLast = Integer.parseInt(juminLast);

		for (int i = 0; i < count - 1; i++) {
			int_jumin[i] = Integer.parseInt(jumin[i]);
			sum += int_jumin[i] * patt[i];
		}

		sum = sum % 11;

		sum = 11 - sum;

		if (sum > 9) {
			sum = sum % 10;
		}

		if (sum == int_juminLast) {
			System.out.println(Arrays.toString(jumin) + "은 유효한 주민등록번호입니다.");

		} else {

			for (int i = 0; i < jumin.length; i++) {
				System.out.print(jumin[i]);
			}

			System.out.println(" 은 유효하지 않은 주민등록번호입니다.");
		}

	}
}
 
package ch06;

import java.util.Scanner;

public class UpandDownExam {
	public static void main(String[] args) {
		//컴퓨터가 랜덤값을 기억하고 맞추는 게임
		Scanner in = new Scanner(System.in);
		
		int input = 0, answer = 0;
		
		answer = (int)(Math.random() * 31) + 1;
		
		do {
			System.out.println("1과 31 사이의 정수를 입력하세요.");
			input = in.nextInt();
			
			if (input > answer) {
				System.out.println("다운");
			} else if (input < answer) {
				System.out.println("업");
			}
		} while (input != answer); //answer와 input 일치 시 종료 
		System.out.println("정답입니다!");
		System.out.println("정답: " + answer);
	}
}
 
package ch07;

import java.util.Arrays;
import java.util.Scanner;

public class ReportCard {

	static Scanner in = new Scanner(System.in);

	public static void main(String[] args) {

		String[] name = null; // 이름
		int[] mathScores = null; // 수학점수
		int[] engScores = null; // 영어점수
		int[] sum = null; // 총점
		double[] avg = null; // 평균
		char[] grade = { 'A', 'B', 'C', 'F' }; // 등급
		int[] rank = null; // 등수

		double classAvg = 0;

		int selectNo = 0;
		boolean run = true;
		int studentNum = 0; // 학생수
		String searchName = null; // 조회할 학생 이름

		while (run) {
			System.out.println("======================================");
			System.out.println("1.점수입력 | 2.성적조회 | 3.분석 | 4.종료");
			System.out.println("======================================");
			System.out.print("메뉴(1~4까지의 숫자를 입력하세요)  ");
			selectNo = in.nextInt();

			switch (selectNo) {
			case 1:
				// 학생 수 입력 받아 해당 크기만큼 배열 생성
				System.out.println("--------------------------------------");
				System.out.print("OO반의 학생 수를 입력하세요: ");
				studentNum = in.nextInt();

				mathScores = new int[studentNum];
				engScores = new int[studentNum];
				name = new String[studentNum];
				sum = new int[studentNum];
				avg = new double[studentNum];

				insert(name, mathScores, engScores, studentNum);
				break;
			case 2:
				search(name, mathScores, engScores, sum, avg, grade, rank, classAvg, selectNo, studentNum, searchName);
				break;
			case 3:
				report(name, mathScores, engScores, avg, classAvg, selectNo);
				break;
			case 4:
				run = false;
				break;
			default:
				System.out.println("잘못된 입력입니다.");
				System.out.println("다시 메뉴를 선택해 주세요.");
			}// switch(selectNo)}
		} // while(run)
	}// main()

	public static void insert(String[] name, int[] mathScores, int[] engScores, int studentNum) {// 이름입력 후 점수입력
		for (int i = 0; i < studentNum; i++) {

			System.out.print("학생명을 입력하세요: ");
			name[i] = in.next();
			System.out.println("--------------------------------------");
			System.out.print(name[i] + " 학생의 수학 점수를 입력하세요: ");
			mathScores[i] = in.nextInt();

			if ((mathScores[i] < 0) || (mathScores[i] > 100)) {
				System.out.println("잘못된 입력입니다. 다시 메뉴를 선택해 주세요.");
				mathScores = null;
			} else {
				System.out.print(name[i] + " 학생의 영어 점수를 입력하세요: ");
				engScores[i] = in.nextInt();
				System.out.println("--------------------------------------");
				if ((engScores[i] < 0) || (engScores[i] > 100)) {
					System.out.println("\t잘못된 입력입니다. 다시 시도하세요.");
					System.out.println("--------------------------------------");
					engScores = null;
					continue;
				}
			}
		}
		System.out.println("\t입력이 정상적으로 완료되었습니다.");
	}// 메소드 insert()

	public static void search(String[] name, int[] mathScores, int[] engScores, int[] sum, double[] avg, char[] grade,
			int[] rank, double classAvg, int selectNo, int studentNum, String searchName) {// 성적 계산 및 조회
		System.out.println("--------------------------------------");
		System.out.print("조회하실 학생명을 입력하세요: ");
		searchName = in.next();

		for (int i = 0; i < studentNum; i++) {

			if (searchName.equals(name[i])) { // 데이터와 학생 이름 일치 여부 .equals()
				System.out.println("--------------------------------------");
				System.out.println(name[i] + "학생의 성적을 출력하겠습니다.");
				System.out.println("--------------------------------------");

				// 합계 계산 및 출력
				sum[i] = mathScores[i] + engScores[i];
				System.out.println("점수총합: " + sum[i] + "점");

				// 평균 계산 및 출력
				avg[i] = (double) sum[i] / 2;
				System.out.println("평균점수: " + avg[i] + "점");

				// 등급 계산 및 출력
				if ((90 <= avg[i]) && (avg[i] <= 100)) {
					System.out.println("등급: " + grade[0]);
				} else if ((80 <= avg[i]) && (avg[i] < 90)) {
					System.out.println("등급: " + grade[1]);
				} else if ((70 <= avg[i]) && (avg[i] < 80)) {
					System.out.println("등급: " + grade[2]);
				} else {
					System.out.println("등급: " + grade[3]);
				}

				// 등수 계산 및 출력
				int order = 0;
				for (int j = 0; j < studentNum; j++) {
					order++; // 학생 평균 점수보다 큰 점수가 있을 때 -> 임시값 증가
					if (avg[i] < avg[j]) {
						order++;
					}
				}
				System.out.println("석차: " + order + "/" + studentNum);

				// 반 평균 계산 및 출력
				for (int j = 0; j < studentNum; j++) {
					classAvg += avg[j];
				}
				classAvg = classAvg / studentNum;
				System.out.println("OO반의 평균 점수는 " + classAvg + "점 입니다.");
				return;
			}
		} // for
		System.out.println("입력하신 학생이 없거나 잘못 입력하셨습니다.");
	} // 메소드 search()

	public static void report(String[] name, int[] mathScores, int[] engScores, double[] avg, double classAvg, int selectNo) {// 분석

		System.out.println("성적이 높은 학생순으로 정렬합니다.");
		for (int i = 0; i < mathScores.length - 1; i++) {
			for (int j = 0; j < mathScores.length - 1 - i; j++) {
				if (mathScores[j] < mathScores[j + 1]) {
					String tmp = name[j];
					name[j] = name[j + 1];
					name[j + 1] = tmp;
				}
			}
		}
		System.out.println("--------------------------------------");
		System.out.println("수학 과목: " + Arrays.toString(name));
		System.out.println("수학 최고점: " + name[0]);
 
package ch07;

import java.util.Arrays;
import java.util.Scanner;

public class ReportCard {

	static Scanner in = new Scanner(System.in);

	public static void main(String[] args) {

		String[] name = null; // 이름
		int[] mathScores = null; // 수학점수
		int[] engScores = null; // 영어점수
		int[] sum = null; // 총점
		double[] avg = null; // 평균
		char[] grade = { 'A', 'B', 'C', 'F' }; // 등급
		int[] rank = null; // 등수

		double classAvg = 0;

		int selectNo = 0;
		boolean run = true;
		int studentNum = 0; // 학생수
		String searchName = null; // 조회할 학생 이름

		while (run) {
			System.out.println("======================================");
			System.out.println("1.점수입력 | 2.성적조회 | 3.분석 | 4.종료");
			System.out.println("======================================");
			System.out.print("메뉴(1~4까지의 숫자를 입력하세요)  ");
			selectNo = in.nextInt();

			switch (selectNo) {
			case 1:
				// 학생 수 입력 받아 해당 크기만큼 배열 생성
				System.out.println("--------------------------------------");
				System.out.print("OO반의 학생 수를 입력하세요: ");
				studentNum = in.nextInt();

				mathScores = new int[studentNum];
				engScores = new int[studentNum];
				name = new String[studentNum];
				sum = new int[studentNum];
				avg = new double[studentNum];

				insert(name, mathScores, engScores, studentNum);
				break;
			case 2:
				search(name, mathScores, engScores, sum, avg, grade, rank, classAvg, selectNo, studentNum, searchName);
				break;
			case 3:
				report(name, mathScores, engScores, avg, classAvg, selectNo);
				break;
			case 4:
				run = false;
				break;
			default:
				System.out.println("잘못된 입력입니다.");
				System.out.println("다시 메뉴를 선택해 주세요.");
			}// switch(selectNo)}
		} // while(run)
	}// main()

	public static void insert(String[] name, int[] mathScores, int[] engScores, int studentNum) {// 이름입력 후 점수입력
		for (int i = 0; i < studentNum; i++) {

			System.out.print("학생명을 입력하세요: ");
			name[i] = in.next();
			System.out.println("--------------------------------------");
			System.out.print(name[i] + " 학생의 수학 점수를 입력하세요: ");
			mathScores[i] = in.nextInt();

			if ((mathScores[i] < 0) || (mathScores[i] > 100)) {
				System.out.println("잘못된 입력입니다. 다시 메뉴를 선택해 주세요.");
				mathScores = null;
			} else {
				System.out.print(name[i] + " 학생의 영어 점수를 입력하세요: ");
				engScores[i] = in.nextInt();
				System.out.println("--------------------------------------");
				if ((engScores[i] < 0) || (engScores[i] > 100)) {
					System.out.println("\t잘못된 입력입니다. 다시 시도하세요.");
					System.out.println("--------------------------------------");
					engScores = null;
					continue;
				}
			}
		}
		System.out.println("\t입력이 정상적으로 완료되었습니다.");
	}// 메소드 insert()

	public static void search(String[] name, int[] mathScores, int[] engScores, int[] sum, double[] avg, char[] grade,
			int[] rank, double classAvg, int selectNo, int studentNum, String searchName) {// 성적 계산 및 조회
		System.out.println("--------------------------------------");
		System.out.print("조회하실 학생명을 입력하세요: ");
		searchName = in.next();

		for (int i = 0; i < studentNum; i++) {

			if (searchName.equals(name[i])) { // 데이터와 학생 이름 일치 여부 .equals()
				System.out.println("--------------------------------------");
				System.out.println(name[i] + "학생의 성적을 출력하겠습니다.");
				System.out.println("--------------------------------------");

				// 합계 계산 및 출력
				sum[i] = mathScores[i] + engScores[i];
				System.out.println("점수총합: " + sum[i] + "점");

				// 평균 계산 및 출력
				avg[i] = (double) sum[i] / 2;
				System.out.println("평균점수: " + avg[i] + "점");

				// 등급 계산 및 출력
				if ((90 <= avg[i]) && (avg[i] <= 100)) {
					System.out.println("등급: " + grade[0]);
				} else if ((80 <= avg[i]) && (avg[i] < 90)) {
					System.out.println("등급: " + grade[1]);
				} else if ((70 <= avg[i]) && (avg[i] < 80)) {
					System.out.println("등급: " + grade[2]);
				} else {
					System.out.println("등급: " + grade[3]);
				}

				// 등수 계산 및 출력
				int order = 0;
				for (int j = 0; j < studentNum; j++) {
					order++; // 학생 평균 점수보다 큰 점수가 있을 때 -> 임시값 증가
					if (avg[i] < avg[j]) {
						order++;
					}
				}
				System.out.println("석차: " + order + "/" + studentNum);

				// 반 평균 계산 및 출력
				for (int j = 0; j < studentNum; j++) {
					classAvg += avg[j];
				}
				classAvg = classAvg / studentNum;
				System.out.println("OO반의 평균 점수는 " + classAvg + "점 입니다.");
				return;
			}
		} // for
		System.out.println("입력하신 학생이 없거나 잘못 입력하셨습니다.");
	} // 메소드 search()

	public static void report(String[] name, int[] mathScores, int[] engScores, double[] avg, double classAvg, int selectNo) {// 분석

		System.out.println("성적이 높은 학생순으로 정렬합니다.");
		for (int i = 0; i < mathScores.length - 1; i++) {
			for (int j = 0; j < mathScores.length - 1 - i; j++) {
				if (mathScores[j] < mathScores[j + 1]) {
					String tmp = name[j];
					name[j] = name[j + 1];
					name[j + 1] = tmp;
				}
			}
		}
		System.out.println("--------------------------------------");
		System.out.println("수학 과목: " + Arrays.toString(name));
		System.out.println("수학 최고점: " + name[0]);
		System.out.println("수학 최저점:
 
System.out.println("수학 최저점: " + name[name.length - 1]);

		for (int i = 0; i < engScores.length - 1; i++) {
			for (int j = 0; j < engScores.length - 1 - i; j++) {
				if (engScores[j] < engScores[j + 1]) {
					String tmp = name[j];
					name[j] = name[j + 1];
					name[j + 1] = tmp;
				}
			}
		}
		System.out.println("영어 과목: " + Arrays.toString(name));
		System.out.println("영어 최고점: " + name[0]);
		System.out.println("영어 최저점: " + name[name.length - 1]);

		for (int i = 0; i < avg.length - 1; i++) {
			for (int j = 0; j < avg.length - 1 - i; j++) {
				if (avg[j] < avg[j + 1]) {
					String tmp = name[j];
					name[j] = name[j + 1];
					name[j + 1] = tmp;
				}
			}
		}
		System.out.println("평균점수: " + Arrays.toString(name));
		System.out.println("평균 최저점: " + name[name.length - 1]);
		System.out.println("--------------------------------------");
		// 장학생 선발: 평균별 내림차순에서 0번째
		System.out.println("OO반의 장학생은 " + name[0] + "학생입니다.");
	}
}// ReportCard
 

 

'JAVA' 카테고리의 다른 글

정규표현식  (0) 2024.01.25
데이터베이스 01  (2) 2024.01.08
진법, 불대수  (0) 2023.12.28
연산식  (0) 2023.12.28
형변환  (0) 2023.12.28