2021. 03. 25(목) TIL

Dylan·2021년 3월 25일
0

Java

break

import java.util.Scanner;

public class ForDemo4 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		// 반복문 탈출하기
		// break구문을 사용하면 반복문을 탈출할 수 있다.
		// break는 반복문(for문, while문, do~while문)과 switch문 내에서만 사용할 수 있다.
		// 반복문을 탈출할 때는 보통 제시된 조건에 해당될 때 break문을 실행해서 탈출한다
		System.out.println("### 프로그램 시작");
		
		for (int i = 1; i <= 5; i++) {
			System.out.println("숫자를 입력하세요");
			
			int number = sc.nextInt();
			System.out.println("입력한 숫자 : " + number);
			
			if (number <= 0) { // 탈출조건. 사용자가 0이나 음수를 입력하면 반복문을 탈출한다.
				break;
			}
		}
		
		sc.close();
		System.out.println("### 프로그램 종료");
	}

}

continue

// 다음 반복차례로 넘어가기
// continue문을 사용하면 다음 반복차례로 넘어갈 수 있다.
		
for (int i = 1; i <= 10; i++) {
	if (i == 5) {
		continue;	// continue가 실행되면, 반복문내의 나머지 수행문을 실행하지 않고,
				// 다음 번 반복을 이어가기 위해서 증감식으로 이동한다.
	}
	System.out.println("i의 값: " + i);
}

While문

  • for문에 비하여 구조가 간단한 반복문이다.
  • 반복횟수를 알 수 없는 경우 사용하는 반복문이다.
  • while문을 사용해서 반복작업을 수행할 때는 대상 객체는 반복 지속여부를 조회할 수 있는 기능을 제공해야 한다.
  • while문을 사용하면 무한루프를 간단히 구현할 수 있다.
import java.util.Scanner;

public class WhileDemo2 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in);
		
		int balance = 10_000;
		
		// 이 반복문은 무한반복 되도록 처리되어 있따.
		while(true) {
			System.out.println("============================================");
			System.out.println("	1.결제	2.충전	0.종료");
			System.out.println("============================================");
			
			// 사용자가 입력한 메뉴번호는 menuNo 변수에 저장(대입) 된다.
			System.out.print("메뉴를 선택하세요 : ");
			int menuNo = sc.nextInt();
			
			if (menuNo == 1) {	// menoNo  변수에 저장된 값이 1일 때 실행되는 코드블록이다.
				System.out.println("[결제를 진행합니다.]");
				
				// 사용자가 입력한 사용금액은 amount변수에 저장된다.
				System.out.print("사용 금액을 입력하세요 : ");
				int amount = sc.nextInt();
				
				if(balance >= amount) {		// 잔액이 사용금액보다 크거나 같을 떄 실행되는 코드블록이다.
					// 사용금액만큼 잔액을 차감하고, 결제 후 잔액을 출력한다.
					balance -= amount;
					System.out.println("사용금액 : " + amount);
					System.out.println("결제 후 잔액 : " + balance + "원");
					System.out.println("[결제가 완료되었습니다.]");
				} else {			// 잔액이 사용금액보다 작을 때 실행되는 코드블록이다.
					System.out.println("[에러] 잔액이 부족합니다.");
					System.out.println("현재 잔액 : " + balance + "원");
					System.out.println("[결제를 중단합니다.]");
				}
				
			} else if (menuNo == 2) { // menoNo  변수에 저장된 값이 2일 때 실행되는 코드블록이다.
				System.out.println("[충전을 진행합니다.]");
				
				// 사용자가 입력한 충전금액은 amount 변수에 저장된다.
				System.out.print("충전할 금액을 입력하세요 : ");
				int amount = sc.nextInt();
				// amount에 저장된 충전금액을 balance변수에 저장된 값에 더하고, 현재 잔액을 출력한다. 
				balance += amount;	
				System.out.println("충전 후 잔액 : " + balance);
				
				System.out.println("[충전이 완료되었습니다.]");
				
			} else if (menuNo == 0) { // menoNo  변수에 저장된 값이 0일 때 실행되는 코드블록이다.
				System.out.println("[서비스를 종료합니다.]");
				break;
				
			} else { // menuNo변수에 저장된 값이 1, 2, 0 모두와 일치하지 않을 때 실행되는 코드블록이다.
				System.out.println("[에러] 메뉴를 다시 선택하세요");
			}
			
			System.out.println();	// 빈 줄을 추가한다
			System.out.println();	// 빈 줄을 추가한다
			System.out.println();	// 빈 줄을 추가한다
		}
		sc.close();
	}
}

배열

  • 배열은 여러 개의 데이터를 저장할 수 있다.
  • 배열을 이용하면 하나의 변수명으로 여러 개의 데이터를 관리할 수 있다.
  • 배열은 순서대로 번호(인덱스)가 붙은 요소들이 연속적인 형태로 저장된다.
  • 각 요소에 부여되는 번호(인덱스)는 0번부터 시작하며, 각 요소마다 순서대로 번호(인덱스)가 부여된다.
  • 인덱스의 범위는 아래와 같다.
    • 0 <= 인덱스번호 < 배열의크기
  • 배열에 저장된 데이터는 번호(인덱스)로 각 요소에 접근할 수 있다.
  • 자바의 배열은 일정한 크기를 가진다.
  • 자바의 배열은 한 번 정해진 크기를 변경할 수 없다.
  • 자바의 배열은 동일한 타입의 값만 저장할 수 있다.

배열의 정의 및 활용

  • 배열 정의
    • 형식
      • 데이터타입[] 변수명 = new 데이터타입[크기];
      • 데이터타입[] 변수명 = {값, 값, 값, 값, ...};
      • 데이터타입[] 변수명 = new 데이터타입[]{값, 값, 값, 값, ...};
    • 빈 배열의 정의

배열 예시

/*
 * int[] number = new int[5];
 * 		new int[5]		정수 다섯개를 저장할 수 있는 칸을 가진 배열객체를 생성한다.
 * 		int[] numbers 	정수배열객체의 주소값을 담는 변수 numbers를 생성한다.
 * 
 * 		int[] numbers = new int[5];
 * 		정수 5개 저장할 수 있는 배열객체를 생성하고, 그 배열객체의 주소값을 변수 numbers에
 * 		대입한다.
 * 		numbers변수는 생성된 배열객체를 참초하는 주소값을 가진 변수(저장소)다.
 */
		
int[] numbers = new int[5];
double[] points = new double[5];
String[] names = new String[5];
		
// 배열의 각 저장소에 들어있는 값 출력해보기
int x0 = numbers[0];
int x1 = numbers[1];
int x2 = numbers[2];
int x3 = numbers[3];
int x4 = numbers[4];
System.out.println(x0);
System.out.println(x1);
System.out.println(x2);
System.out.println(x3);
System.out.println(x4);

double y0 = points[0];
double y1 = points[1];
double y2 = points[2];
double y3 = points[3];
double y4 = points[4];
System.out.println(y0);
System.out.println(y1);
System.out.println(y2);
System.out.println(y3);
System.out.println(y4);

String s0 = names[0]; 
String s1 = names[1]; 
String s2 = names[2]; 
String s3 = names[3]; 
String s4 = names[4];
System.out.println(s0);
System.out.println(s1);
System.out.println(s2);
System.out.println(s3);
System.out.println(s4);

// 값을 나열해서 배열객체 생성하기
int[] scores = {80, 60, 100};
String[] categories = {"뉴스", "연예", "스포츠", "자동차", "쇼핑"};

int score1 = scores[0];
int score2 = scores[1];
int score3 = scores[2];
System.out.println(score1);
System.out.println(score2);
System.out.println(score3);

String cat1 = categories[0];
String cat2 = categories[1];
String cat3 = categories[2];
String cat4 = categories[3];
String cat5 = categories[4];
System.out.println(cat1);
System.out.println(cat2);
System.out.println(cat3);
System.out.println(cat4);
System.out.println(cat5);

// 배열의 값을 변경하기
// 배열명[인덱스] = 새값 <-- 배열의 지정된 위치의 값이 새로운 값으로 변경된다.
int[] balances = new int[3];
String[] depts = new String[3];
String[] subjects = {"국어", "영어", "수학"};

balances[0] = 1000000;
balances[2] = 23000;

depts[0] = "전자공학과";
depts[1] = "컴퓨터공학과";
depts[2] = "통계학과";

subjects[2] = "수학2";

// for문을 이용해서 배열의 값 출력하기
System.out.println("학과명 배열의 크기 : " + depts.length);
for (int i = 0; i < depts.length; i++) {
	String deptName = depts[i];
	System.out.println("학과명 : " + deptName);
}

System.out.println("잔액 배열의 크기 : " + balances.length);
for (int i = 0; i < balances.length; i++) {
	int amount = balances[i];
	System.out.println("잔액 : " + amount);
}

System.out.println("과목 배열의 크기 : " + subjects.length);
for (int i = 0; i < subjects.length; i++) {
	System.out.println("과목명 : " + subjects[i]);
}

배열의 활용

// 배열의 활용
String[] names = {"김유신", "홍길동", "이순신"};
int[] korScores = {100, 90, 50};
int[] engScores = {100, 80, 20};
int[] mathScores = {100, 70, 30};

// 이번에 수업에 참여한 모든 학생의 이름을 출력하시오
System.out.println("### 수강신청 학생 목록 ###");
for (String x : names) {
	System.out.println("학생이름 : " + x);
}

System.out.println("### 김유신 학생의 국어, 영어, 수학 점수 ###");
// 김유신 학생의 성적을 전부 출력하시오.
System.out.println(names[0] + "," + korScores[0] + "," +engScores[0] + "," + mathScores[0]);

// 국어 점수의 평균을 출력하시오.
System.out.println("### 국어점수의 총점과 평균 ###");
int korTotal = 0;
int korAverage = 0;
for (int kor : korScores) {
	korTotal += kor;	// korTotal += 100; korTotal += 90; korTotal += 50; 실행
}
korAverage = (int) (korTotal / korScores.length);
System.out.println("국어 점수 총합 : " + korTotal);
System.out.println("국어 점수 평균 : " + korAverage);


// 수학 점수의 평균을 출력하시오.
System.out.println("### 수학점수의 총점과 평균 ###");
int mathTotal = 0;
int mathAverage = 0;
for (int math : mathScores) {
	mathTotal += math;	// korTotal += 100; korTotal += 90; korTotal += 50; 실행
}
mathAverage = (int) (mathTotal / mathScores.length);
System.out.println("수학 점수 총합 : " + mathTotal);
System.out.println("수학 점수 평균 : " + mathAverage);

// 영어 점수의 평균을 출력하시오.
System.out.println("### 영어점수의 총점과 평균 ###");
int engTotal = 0;
int engAverage = 0;
for (int eng : engScores) {
	engTotal += eng;	// korTotal += 100; korTotal += 90; korTotal += 50; 실행
}
engAverage = (int) (engTotal / engScores.length);
System.out.println("영어 점수 총합 : " + engTotal);
System.out.println("영어 점수 평균 : " + engAverage);

// 각 학생별 학생이름, 국어, 영어, 수학점수, 총점, 평균점수를 출력하시오.
System.out.println("### 전체 학생 성적정보 출력 ###");
for (int i = 0; i < names.length; i++) {
	String studentName = names[i];
	int kor = korScores[i];
	int eng = engScores[i];
	int math = mathScores[i];
	
	int total = kor + eng + math;
	int average = (int) (total / names.length);
	
	// System.out.println(studentName + "\t" + kor + "\t" + eng + "\t" + math + "\t" + total + "\t" + average);
	System.out.printf("%s%5d%5d%5d%5d%5d\n", studentName, kor, eng, math, total, average);

0개의 댓글