== 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