⚠️알아야하는 점⚠️
오전 중에 갑자기 아파서(컨디션 안좋음) 점심 시간 전까지 집중을 더 못한편.😭
그리고 진도나간 PPT 정리 아직 다 못함. 추후에 추가 할 예정
⚠️추가할것⚠️
예외처리, enum, for-each,try-catch-finally문
상세 설명 추가 필요
(현재 손으로 필기중)
// 아래와 같이 출력하기
// 1
// 1 2 3
// 1
// 1 2 3 4
// 1 2
답
package chapter03;
public class Print2DArray {
public static void main(String[] args) {
int n[][] = { { 1 },
{ 1, 2, 3 },
{ 1 },
{ 1, 2, 3, 4 },
{ 1, 2 } };
for (int i = 0; i < n.length; i++) { //열
for (int j =0 ; j < n[i].length; j++) { //행
System.out.print(n[i][j]);
}
System.out.println(); // 열이 끝나면 줄바꿈
}
}
}
/* 초기화 후 2차배열
아래 출력값과 같이 출력하시오
10 11 12
20 21
30 31 32
40 41
*/
답)
package chapter03;
public class IrregularArray {
//초기화 후 2차 배열
public static void main(String[] args) {
int intArray[][] =new int[4][];
intArray[0] = new int[3];
intArray[1] = new int[2];
intArray[2] = new int[3];
intArray[3] = new int[2];
for (int i = 0; i < intArray.length; i++) {
for (int j = 0; j < intArray[i].length; j++) {
intArray[i][j]=(i+1)*10+j;
// 10~41까지 출력됨
System.out.print(intArray[i][j]+" ");
}
System.out.println();
}
// 위와 아래의 식은 동일한 결과를 출력한다.
for (int i = 0; i < intArray.length; i++) {
for (int j = 0; j < intArray[i].length; j++) {
System.out.print(intArray[i][j]+" ");
}
System.out.println();
}
}
}
<Type.java>
public enum Type {
WALKING, RUNNING, TRACKING, HIKING
}
// 클래스 대신에 enum 입력후 클래스 명 Type임.
그 후 바로 열거 가능
<Shoes.java>
public class Shoes {
public String name;
public int size;
public enum Type {
WALKING, RUNNING, TRACKING, HIKING
}
}
// 클래스 존재 Shoes
NAME은 변수면서 속성임 (객체지향관점에서), 메소드가 존재하는가? 없음
NAME과 TYPE은 필드
<Shoes.java>
enum Type {
WALKING, RUNNING, TRACKING, HIKING
}// 클래스가 와도 되는 자리에 ENUM가 옴.
public class Shoes {
public String name; // NAME은 속성
public int size; // SIZE은 속성
public Type type; // TYPE은 속성
}
<Shoes.java>
enum Type {// 클래스 자리에 enum가 자리를 잡음
WALKING, RUNNING, TRACKING, HIKING
}
public class Shoes { // Shoes라는 객체 안에 name,size,type이라는 속성 생성됨
public String name;
public int size;
public Type type;
public static void main(String[] qrgs) {
Shoes shoes = new Shoes(); // shoes는 참조변수.
shoes.name = "나이키"; // shoes.name: 객체 필드
shoes.size = 230; // shoes.size : 객체 필드
shoes.type = Type.RUNNING;
System.out.println("신발 이름 = " + shoes.name); // 신발이름:나이키
System.out.println("신발 사이즈 = " + shoes.size);// 신발사이즈 230
System.out.println("신발 종류 = " + shoes.type); // 신발 종류 :running
}
}
alues()
enum Type {
WALKING, RUNNING, TRACKING, HIKING
}
public class Shoes {
public String name;
public int size;
public Type type;
public static void main(String[] args) {
for(Type(열거형 이름) type(변수) : Type(변수 type 안에 잇는).values(메소드)()) {
System.out.println(type); // WALKING, RUNNING, TRACKING, HIKING출력
}
}
}
int[ ] num = { 1,2,3,4,5 };
int sum = 0;
for (int k : num) //( num에 값을 하나 씩 받아서 int k에 저장)
sum += k;
System.out.println("합은 " + sum);
// 합은 15
String names[] = { "사과", "배", "바나나", "체리", "딸기", "포도" } ;
for (String s : names) //( s에 값을 하나 씩 받아서 String s 에 저장)
System.out.print(s + " ");
//사과 배 바나나 체리 딸기 포도
enum Week { 월, 화, 수, 목, 금, 토, 일 }
for (Week day : Week.values())// week안에 있는 값을 day에 저장
System.out.print(day + "요일 ");
//월요일 화요일 수요일 목요일 금요일 토요일 일요일
(배열공유)
package chapter03;
public class foreachEX {
enum Week {월, 화, 수, 목, 금, 토, 일}
public static void main(String[] args) {
int[] n = { 1, 2, 3, 4, 5 };
String names[] = { "사과", "배", "바나나", "체리", "딸기", "포도" };
int sum = 0;
for (int k : n) {
System.out.print(k + " ");
sum += k;
}
System.out.println("합은 " + sum);
for (String s : names) {
System.out.print(s + " ");
}
System.out.println();
for (Week day : Week.values()) {
System.out.print(day + "요일");
}
System.out.println();
}
}
//결과
/*
1 2 3 4 5 합은 15
사과 배 바나나 체리 딸기 포도
월요일화요일수요일목요일금요일토요일일요일
*/
배열 생성 후 초기화 => return 이용
package chapter03;
public class ReturnArray {
static int [] makeArray() {
int temp[]=new int[4];
//배열 생성 - int 타입의 temp배열을 생성하는데 공간이 4인 배열 생성
for (int i = 0; i < temp.length; i++) {
//temp.length는 4 => 4번 반복
temp[i]=i; //인덱스 0~3까지 값 들어감
}
return temp;
//여기서 temp[]로 작성하면 오류가 남.
}
//makeArray는 메소드, {}는 반환타입
public static void main(String[] args) {
int intArray[];// intArray배열 선언
intArray = makeArray();
//intArray배열은 makeArray 메소드 사용해서 배열 공유
for (int i = 0; i < intArray.length; i++) {
//intArray.length의 값은 4(인덱스는 0~3)
//int i = 0; i < intArray.length; => [0][1][2][3]
System.out.print(intArray[i]+" ");
//배열 원소값 출력 => 인덱스 값 출력
}
}
}
//결과
//0 1 2 3
package chapter03;
public class Calc {
public static void main(String[] args) {
double sum =0.0;
for (int i = 0; i < args.length; i++) {
//args.length 만큼 반복
sum += Double.parseDouble(args[i]);
}
System.out.println("합계"+sum);
}
}
// 합계 : 22.5
// arguments에 값을 입력했기 때문에 창에는 작성안된 것처럼 보이지만 반영되었음
예외중에서 0으로 나누는 오류에 관련한 문제.
try-catch 사용
package chapter03;
import java.util.Scanner;
public class DivideByZero {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int divident;
int divisor;
System.out.print("분자를 입력하시오:");
divident = scanner.nextInt();
System.out.print("분모를 입력하시오:");
divisor = scanner.nextInt();
System.out.println(divident + "를 " + divisor + "로 나누면 몫은 " + divident / divisor + "입니다.");
scanner.close();
}
}
/*분자를 입력하시오:100
분모를 입력하시오:5
100를 5로 나누면 몫은 20입니다.*/
package chapter03;
import java.util.Scanner;
public class DivideByZeroHandling {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int divident;
int divisor;
while (true) {
System.out.print("분자를 입력하시오:");
divident = scanner.nextInt();
System.out.print("분모를 입력하시오:");
divisor = scanner.nextInt();
try {
System.out.println(divident + "를 " + divisor + "로 나누면 몫은 " + divident / divisor + "입니다.");
break;// break안걸면 scanner.close();가 빨간 줄 나옴
// 브레이크 걸어야지 빠져 나와서 scanner.close();을 할 수 있다는 뜻
// 오류 발생하지 않을시(참일때) 출력되며 break;로 인해 빠져 나옴(강제종료)
} catch (ArithmeticException e) {
// 오류가 발생했을때 변수 e로 받음
System.out.println("0으로 나눌 수 없습니다! 다시 입력하세요");
//오류(예외)발생시 출력되며 while문에 의해 다시 입력하는 페이지로 돌아감
}
}
scanner.close();
}
}
/*
분자를 입력하시오:100
분모를 입력하시오:0
0으로 나눌 수 없습니다! 다시 입력하세요
분자를 입력하시오:100
분모를 입력하시오:5
100를 5로 나누면 몫은 20입니다.*/
package chapter03;
public class ArratException {
public static void main(String[] args) {
int[] intArray = new int[5];//배열 생성 => 인덱스 값이 0~4
intArray[0] = 0;//인덱스 0에 0이라는 초기값 부여
try {
for (int i = 0; i < intArray.length; i++) {// 5번 반복
intArray[i + 1] = i + 1 + intArray[i];
System.out.println("intArray[" + i + "]" + "=" + intArray[i]);
//배열 사이즈 때문에 오류
}
} catch (ArrayIndexOutOfBoundsException e) {
System.out.println("배열의 인덱스가 범위를 벗어났습니다.");
}
}
}
// intArray[i + 1] = i + 1 + intArray[i]; 와
// System.out.println("intArray[" + i + "]" + "=" + intArray[i]);를 별개로 생각해야함
//i=0일때 intArray[0]=0 : 초기값을 부여했으니깐
//i =1일떄는 intArray[2]=1+1+intArray[1] : 여기서 계산 값이 꼬이기 시작하고,
// i=4일때 intArray[5] : 인덱스 5(0~5: 총 6칸) => 인덱스 범위 초과 >>(결정적인 오류 발생 이유)<<
package chapter03;
import java.util.InputMismatchException;
import java.util.Scanner;
public class InputException {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
System.out.println("정수 3개를 입력하시오");
int sum = 0, n=0;// 값 초기화
for (int i = 0; i < 3; i++) {//정수 3개 입력
System.out.print(i+">>");
try {
n = scanner.nextInt();
} catch (InputMismatchException e) {
System.out.println("정수가 아닙니다. 다시 입력하세요!");
scanner.next(); // 틀렸을때 강제 종료가 되지 않도 다시 입력 할 수있는 기회 부여
i--; // 정수가 아닌 값을 입력하였을때, 입력 기회를 다시 받을 수 있음
//(틀린 경우의 입력 횟수 번호 초기화)
continue;
//continue가 없으면 for문의 i++로 안가고 머무르면서
//앞에 입력한 값이 남으면서 최종적인 합(sum)에 지장을 줌
//continue는 for문의 i++로 원래는 돌아감(이건 원래continue ppt 다시 공부하기)
}
sum += n;// 입력 받은 3개의 정수의 합
}
System.out.println("합은"+sum);
scanner.close();
}
}
// continue가 있을때 결과
/*
정수 3개를 입력하시오
0>>12
1>>ㅁ
정수가 아닙니다. 다시 입력하세요!
1>>12
2>>12
합은36*/
//continue가 없을 때 결과
/* 정수 3개를 입력하시오
0>>4
1>>a
정수가 아닙니다. 다시 입력하세요!
1>>5
2>>6
합은19*/
//정수 입력시 지급하는 지폐 및 동전의 갯수
package chapter03;
import java.util.Scanner;
public class ChangeMoney {
final static int 오만원 = 50000;
final static int 만원 = 10000;
final static int 오천원 = 5000;
final static int 천원 = 1000;
final static int 오백원 = 500;
final static int 백원 = 100;
final static int 오십원 = 50;
final static int 십원 = 10;
final static int 일원 = 1;
public static void main(String[] args) {
int res, money;
Scanner scanner = new Scanner(System.in);
System.out.print("금액을 입력하시오>>");
money = scanner.nextInt();
res = money/오만원;
money = money%오만원;
if (res>0) {
System.out.println("오만원권 "+res+"매");
}
res = money/만원;
money = money%만원;
if (res>0) {
System.out.println("만원권 "+res+"매");
}
res = money/오천원;
money = money%오천원;
if (res>0) {
System.out.println("오천원권 "+res+"매");
}
res = money/천원;
money = money%천원;
if (res>0) {
System.out.println("천원권 "+res+"매");
}
res = money/오백원;
money = money%오백원;
if (res>0) {
System.out.println("오백원 "+res+"개");
}
res = money/백원;
money = money%백원;
if (res>0) {
System.out.println("백원 "+res+"개");
}
res = money/오십원;
money = money%오십원;
if (res>0) {
System.out.println("오십원 "+res+"개");
}
res = money/십원;
money = money%십원;
if (res>0) {
System.out.println("십원 "+res+"개");
}
res = money/일원;
money = money%일원;
if (res>0) {
System.out.println("일원 "+res+"개");
}
/*내가 한것(오백원 추가 해야함)
* Scanner scanner = new Scanner(System.in); System.out.print("금액을 입력하시오>>");
* int money = scanner.nextInt();
*
* if (money >= 50000) { int fiveman = money / 50000;// 5만원 권의 갯수
* System.out.println("오만원권"+fiveman+"매"); } int man = money % 50000;
*
* if (man >= 10000) { int man1 = man / 10000;
* System.out.println("만원권"+man1+"매"); } int tenhun = man % 10000;
*
* if (tenhun>=1000) { int tenhun1 = tenhun / 1000;
* System.out.println("천원권"+tenhun1+"매"); } int hun = tenhun%1000;
*
* if (hun>= 100) { int hun1 = hun/100; System.out.println("백원"+hun1+"개"); } int
* fiveten = hun%100;
*
* if (fiveten>=50) { int fiveten1=fiveten/50;
* System.out.println("오십원"+fiveten1+"개"); } int ten = fiveten%50;
*
* if (ten>=10) { int ten1 = ten/10; System.out.println("십원"+ten1+"개"); } int
* one = ten%10;
*
* if(one<10){ System.out.println("일원"+one+"개"); }
*/
scanner.close();
}
}
package chapter03;
public class NumberFormatException {
public static void main(String[] args) {
String[] stringNumber = {"23","12","3.141592","998"};// 배열 생성
//java.lang.numberformatexception 에러 발생
//(숫자가 아닌 애들을 숫자로 변환 할 때 나타나는 오류)
//String[] stringNumber = {"23","12","3","998"};
// 배열 안에 있는 모든 문자열의 수가 정수일땐 에러 안뜸
int i =0;
try {
for (i = 0; i < stringNumber.length; i++) {
//stringNumber.length의 값은 4 => 4번 반복
int j =Integer.parseInt(stringNumber[i]) ; //문자열을 정수로 바꿈
System.out.println("숫자로 변환된 값은 "+j);
}
} catch (Exception e) {
System.out.println(stringNumber[i]+"는 정수로 변환할 수 없습니다.");
}
}
}
//결과
/*
숫자로 변환된 값은 23
숫자로 변환된 값은 12
3.141592는 정수로 변환할 수 없습니다.
*/
// 도중에 중단함
package chapter03;
public class NumberFormatException {
public static void main(String[] args) {
String[] stringNumber = {"23","12","3.141592","998"};// 배열 생성
//java.lang.numberformatexception 에러 발생
//(숫자가 아닌 애들을 숫자로 변환 할 때 나타나는 오류)
//String[] stringNumber = {"23","12","3","998"};
// 배열 안에 있는 모든 문자열의 수가 정수일땐 에러 안뜸
int i =0;
for (i = 0; i < stringNumber.length; i++) {
//stringNumber.length의 값은 4 => 4번 반복
try {
int j =Integer.parseInt(stringNumber[i]) ; //문자열을 정수로 바꿈
System.out.println("숫자로 변환된 값은 "+j);
} catch (Exception e) {
System.out.println(stringNumber[i]+"는 정수로 변환할 수 없습니다."); }
}
}
/*
* try { for (i = 0; i < stringNumber.length; i++) { //stringNumber.length의 값은 4
* => 4번 반복 int j =Integer.parseInt(stringNumber[i]) ; //문자열을 정수로 바꿈
* System.out.println("숫자로 변환된 값은 "+j); } } catch (Exception e) {
* System.out.println(stringNumber[i]+"는 정수로 변환할 수 없습니다."); }
*/
}
//결과
/*숫자로 변환된 값은 23
숫자로 변환된 값은 12
3.141592는 정수로 변환할 수 없습니다.
숫자로 변환된 값은 998*/
package chapter03;
import java.util.Scanner;
public class ArrayMin {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
int num[] = new int[7]; // 양수 7개 받도록합
System.out.println("양수 7개를 입력하시오");
int min = 0;// 초기값 0 지정
for (int i = 0; i < num.length; i++) {
if (i == 0) { // 첫번째 들어온 값
min = scanner.nextInt();// 먼저 들어온 값을 min으로 지정
} else { // i=1부터 입력된 값
num[i] = scanner.nextInt();
if (num[i] < min) {// i=1부터 입력된 값이 num[0](min)보다 작으면
min = num[i];// min = num[i];진행
}
}
}
// 또는
// num[0] = scanner.nextInt(); // num[0]에 먼저 값 저장(처음 비교값)
//
// int min =num[0]; // min의 초기값 설정
// for (int i = 1; i < num.length; i++) { // i=1부터 인덱스 만큼 반복
// num[i] = scanner.nextInt(); // i=1부터 num 이라는 배열 안에 값 저장
//
// if (num[i]<min) {
// min = num[i];
// //num[1]<num[0](min)인 경우 min = num[i];진행
// }
// }
System.out.println("가장 작은 수는" + min + "입니다.");
scanner.close();
}
}
package chapter03;
// 2차 배열에 월별로 3개의 도시에 발생된 코로나 환자수를 저장하고 , 1년간 전체 코로나 환자 수 출력
//(단, 1월은 3개의 도시에 각각 11명, 12명, 13명, 2월엔 21,22,23... 12월엔 121,122,123명 발생)
public class CoronaSum {
public static void main(String[] args) {
int n [][] = new int [12][];//12달이니 12열? 12행 추출
int sum =0;// sum 의 초기 값 설정
n[0] = new int[3]; //1월
n[1] = new int[3];//2월
n[2] = new int[3];//3월
n[3] = new int[3];//4월
n[4] = new int[3];//5월
n[5] = new int[3];//6월
n[6] = new int[3];//7월
n[7] = new int[3];//8월
n[8] = new int[3];//9월
n[9] = new int[3];//10월
n[10] = new int[3];//11월
n[11] = new int[3];//12월
// new int[3]에서 3은 3개의 도시를 뜻함.
//쉽게 생각하면 각 달에 확진자 3그룹(3도시에서 각각 하나씩) 발생
for (int i = 0; i < n.length; i++) {
for (int j = 0; j < n[i].length; j++) {
n[i][j]=(i+1)*10+(j+1);
// 1월엔 11,12,13
// 2월엔 21,22,23
// 3월엔 31,32,33 ...
// 12월엔 121,122,123 이런식으로 출력 되게 만들어줌
//System.out.print(n[i][j]+" ");
// 11 12 13
// 21 22 23
// 31 32 33..
// 121 122 123 로 실제 출력한 모습 보여줌
sum += n[i][j];
//합계는 11+ 12+ 13+ 21+22+....+122+123의 결과 보여줌
// 또는 강사님 방법
// int corona[][]= {
// {11,12,13},
// {21,22,23},
// {31,32,33},
// {41,42,43},
// {51,52,53},
// {61,62,63},
// {71,72,73},
// {81,82,83},
// {91,92,93},
// {101,102,103},
// {111,112,113},
// {121,122,123},
// };
// int sum =0;
//
//
//
// for (int month = 0; month < corona.length; month++) {
// for (int city = 0; city <corona[month].length; city++) {
// sum += corona[month][city];
// }
// }
}
}
System.out.println("1년 전체 코로나 환자수는 "+sum);
}
}
package chapter03;
// 비정방형 배열을 만들어 값 초기화하고 출력하기
//출력해야하는 결과
//35 36 37 38 39
//45
//55 56 57 58
//65 66
//75 76 77
public class IrregularArray2 {
public static void main(String[] args) {
int n[][] = new int [5][];
n[0]=new int [5];
n[1]=new int [1];
n[2]=new int [4];
n[3]=new int [2];
n[4]=new int [3];
for (int i = 0; i < n.length; i++) {
for (int j = 0; j < n[i].length; j++) {
n[i][j]=(i+3)*10+(j+5); // 35~77까지 출력
System.out.print(n[i][j]+" ");
}
System.out.println();
}
}
}
// 결과
// 35 36 37 38 39
// 45
// 55 56 57 58
// 65 66
// 75 76 77