JAVA - 2022.07.20

sofia·2022년 7월 20일
0

JAVA

목록 보기
7/27
post-thumbnail

⚠️알아야하는 점⚠️
오전 중에 갑자기 아파서(컨디션 안좋음) 점심 시간 전까지 집중을 더 못한편.😭
그리고 진도나간 PPT 정리 아직 다 못함. 추후에 추가 할 예정

⚠️추가할것⚠️
예외처리, enum, for-each,try-catch-finally문
상세 설명 추가 필요
(현재 손으로 필기중)


📗복습

📖1. 2차 배열 문제

//	아래와 같이 출력하기
//	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. 2차 배열 문제

/*  초기화 후 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();
		}
	}
}

❤️‍🔥진도 나감(PPT-정리중, 추후 추가 예정)

enum :열거형

열거형 선언

<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출력
        }
    }
}

배열과 for-each문

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 + "요일 ");

//월요일 화요일 수요일 목요일 금요일 토요일 일요일

메소드에서의 배열(return)

배열 리턴 과정


(배열공유)

main( ) 메소드

main( ) 메소드의 인자 전달

JAVA의 예외 처리

  1. 0으로 나누는 경우
  2. 큰 인덱스 배열
  3. 존재하지 않는 파일
  4. 정수 입력

예외 처리, try-catch-finally 문

자바의 예외 클래스


📗예제

📖예제1

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
사과 배 바나나 체리 딸기 포도 
월요일화요일수요일목요일금요일토요일일요일
*/

📖예제 2

배열 생성 후 초기화 => 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

📖예제 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에 값을 입력했기 때문에 창에는 작성안된 것처럼 보이지만 반영되었음

  • run의 run configurations 의 클래스명(Calc)선택 후 arguments 에 값 입력( 입력한 값 2, 20.5)

📖예제 4

예외중에서 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입니다.*/

📖예제 5

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칸)  => 인덱스 범위 초과 >>(결정적인 오류 발생 이유)<<

📖예제 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*/

📖예제 7

//정수 입력시 지급하는 지폐 및 동전의 갯수
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();
	}

}

📖예제 8

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는 정수로 변환할 수 없습니다.
*/

// 도중에 중단함

📖예제 9

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*/

📖예제 10 - 배열로 최솟값 구하기

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();
	}

}

📖예제 11

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);
		
	}

}

📖예제 12

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

0개의 댓글