관리 메뉴

개발 노트

7/20 : 3단원 Switch, Case, While, 아스키코드, Do while, For, Continue, Break, 4단원 Array 본문

프로젝트 기반 JAVA 응용 SW개발 : 22.07.19~23.01.20/JAVA

7/20 : 3단원 Switch, Case, While, 아스키코드, Do while, For, Continue, Break, 4단원 Array

hayoung.dev 2022. 7. 20. 13:55

[7/19 복습]

 

1. 자바 프로그램.pdf

5p. JAVA개발 환경설정 외우기

-JDK(Java Development Kit) : Java개발 키트

-IDE(Integrated Development Environment) : 통합 개발툴(편집기) (자바 외 다른 언어도 개발할 수 있음)

 

6p. JVM이 뭔지 외우기 (중요)

JVM이란 '자바를 실행시키는 가상의 기계' 운영체제별로 프로그램을 실행하고 관리하는 방법이 다르기 때문에 운영체제별로 자바 프로그램을 별도로 개발하는 것보다는 운영체제와 자바 프로그램을 중계하는 JVM을 두어 자바 프로그램이 여러 운영체제에서 동일한 실행 결과가 나오도록 설계한 것. 따라서 개발자는 운영체제와 상관없이 자바 프로그램을 개발할 수 있다.

 

18p. 코드파일은 src(=source)폴더 안에 .java로 저장되어 있음. 

 

실행파일은 bin(실행폴더) 안에 .class로 저장되어 있음.

 

 

2. 상수 변수.pdf

4p. (중요) String은 기본 자료형이 아님.

(중요)

기본 자료형과 객체 자료형의 큰 차이점은 ?

메모리에 저장되는 방식이 다름.

기본 자료형은 보통 소문자로 시작하고, 객체 자료형은 보통 대문자로 시작함.

 

3. 자바 제어문.pdf

12p.

Sw1.java

package ch03;

//case 뒤에 붙어있는 것을 args에 넣었을 때 해당하는 그 case부터 break문이 나올 때까지 실행됨.
public class Sw1 {

	public static void main(String[] args) {	//1. 이 args(argument)를
		int num = Integer.parseInt(args[0]);	//2. 여기 args로 받아옴. integer.parseInt는 숫자로 변환하는 것.
		switch(num) {
		case 1 : System.out.println("L");
		break;
		case 2 : System.out.println("O");
		break;
		case 3 : System.out.println("V"); break;
		case 4 : System.out.println("E"); break;
		default : System.out.println("똑바로 해");
		}
	}
}

 

Exception in thread "main" java.lang.ArrayIndexOutOfBoundsException: Index 0 out of bounds for length 0
at ch03.Sw1.main(Sw1.java:7) : array 인덱스의 첨자가 범위를 벗어났다. 즉 args의 0번째 값이 없다. 값을 args에 넣어주면 해결됨.

 

중간에 break문이 없으면 그 다음 break문이 나올 때까지 전부 실행됨.

 

3을 입력하면 출력 결과

 

5를 입력하면 출력 결과

 

Sw2.java

package ch03;

public class Sw2 {

	public static void main(String[] args) {
		int score = Integer.parseInt(args[0]);
		String grade = "";
		switch (score/10) {
		case 10 :
		case 9 : grade = "A"; break;
		case 8 : grade = "B"; break;
		case 7 : grade = "C"; break;
		case 6 : grade = "D"; break;
		default: grade = "F";
		}
		System.out.println("점수 Case는 " + score/10+"이고 학점은 " + grade);
	}
}

입력값 : 85

출력 결과

 

Sw3.java

package ch03;

public class Sw3 {

	public static void main(String[] args) {
		int num = Integer.parseInt(args[0]);
		String season = "";
		
		switch (num) {
		//한 번에 case를 여러개 쓸 수 있다.
		case 12: case 1: case 2: season = "겨울"; break;  //case가 12 or 1 or 2일 때
		case 3: case 4: case 5:  season = "봄"; break;
		case 6: case 7: case 8:  season = "여름"; break;
		case 9: case 10: case 11: season = "가을"; break;
		default : season = "뭐야"; break;
		}
		System.out.println(num + "월은 " + season + "입니다.");
	}
}

입력 값 : 4

출력 결과

 

Sw4.java

package ch03;

public class Sw4 {

	public static void main(String[] args) {
		//argument를 3개 받음.
		String str = args[0];
		int a1 = Integer.parseInt(args[1]);
		int b1 = Integer.parseInt(args[2]);
		switch(str) {
		case "+" : System.out.println("덧셈: " + (a1 + b1)); break;
		case "-" : System.out.println("뺄셈: " + (a1 - b1)); break;
		case "X" : System.out.println("곱셈: " + (a1 * b1)); break;
		case "/" : System.out.println("나눗셈: " +  (a1 / b1)); break;
		case "%" : System.out.println("나머지: " + (a1 % b1)); break;
		default : System.out.println("없는 연산자" + (a1 + b1));	
		}
	}
}

입력 값 : X 6 7

출력 결과

 

Sw5.java

package ch03;

public class Sw5 {

	public static void main(String[] args) {
		int num = Integer.parseInt(args[0]);
		String season = "";
		
		switch (num) {
		case 12: case 1: case 2:
			switch (num) {
			case 12: System.out.println("초겨울"); break;
			case 1: System.out.println("젤추워"); break;
			case 2: System.out.println("추워"); break;
			}
			season = "겨울"; break;
		case 3: case 4: case 5:
			if (num ==3 || num == 4) System.out.println(" 대박");
			else System.out.println("쪽");
			season = "봄"; break;
		case 6: case 7: case 8: season = "여름"; break;
		case 9: case 10: case 11: season = "가을"; break;
		default: season = "뭐야"; break;
		}
		System.out.println(num +"월은 " + season + "입니다.");
	}
}

입력 값 : 1

출력 결과

입력값 : 5

출력 결과

While1.java

package ch03;

public class While1 {

	public static void main(String[] args) {
		int sum = 0, i = 1;	//항상 초기화를 시켜줘야 한다.
		while (i <=10) {
			sum += i;	//sum = sum+i
			System.out.println(i + "까지 합 " + sum);
			i++;
		}
		System.out.println("합계: " + sum);
	}
}

 

출력 결과

 

 

While2.java

package ch03;

import java.io.IOException;

public class While2 {

	public static void main(String[] args) throws IOException {
		System.out.println("보고싶은 구구단은?");
		//system.in.read는 시스템에서 값을 읽어들인다는 뜻. 키보드 값을 읽어들인다.
		int num = System.in.read() -'0'; //아스키코드로 변환되는 것을 -'0'을 통해 막을 수 있음.
		int num2 = System.in.read();
		int i = 1;
		System.out.println("num->"+num);
		System.out.println("num2->"+num2);
		if (num >=2 && num <= 20) {
			while (i <=9) {
				System.out.println(num + " * " + i + " = " + num * i);
				i ++;
			}
		}
		else {
			System.out.println("구구단에 없는 숫자입니다");
		}
	}
}

(하단 개념 등 아스키코드 알아야 함, 중요)

- 아스키코드로 변환되는 것을 -'0'을 통해 막는 이유 :  예를 들어 7을 입력했을 때 7의 아스키코드는 55이기 때문에 -'0'을 통해 0의 아스키코드 48을 빼어 내가 입력한 숫자인 7이 나오도록 한다.

- '0'을 하지 않은 num2가 숫자 13이 나오는 이유 : CR LF가 엔터키를 쳤을 때 인식되는 아스키코드이기 때문에 CR에 해당하는 아스키코드 13이 나오게 된다.

- A를 넣으면 num이 17이 나오는 이유 : A를 입력하면 실제 전기신호로는 16진수로 전송되지만 10진수로는 65이다. 여기에서 0의 아스키코드 10진수인 48을 빼면 17의 결과가 나온다.

 

- 10의자리 이상 넣으면 "구구단에 없는 숫자입니다" 라고 뜨는 이유 : 1바이트로 받아와서 그렇기 때문이다. 그래서 두자리는 안된다. 나중에 html을 이용하여 화면으로 읽어들이면 문제되지 않기 때문에 코드를 수정하지 않겠다.

 

아스키코드 표

중간 입력 값 : 7

출력 결과

 

 

While3.java

package ch03;

public class While3 {

	public static void main(String[] args) {
		int i = 1, j = 2;
		System.out.println("구구단!");
		while (i <= 9) {
			while (j <= 9) {
				// \t는 아스키코드에서 tab키를 치는 것과 같음. 그래서 내용과 내용 사이의 칸을 만들어줌.
				System.out.print(j + " * " + i + " = " + i*j + "\t");
				j ++;
			}
			System.out.println();
			j = 2;
			i ++;
		}
	}
}

출력 결과

 

Do1.java

package ch03;

//While1.java와 같음. While문을 Do While문으로 바꾼 것.
public class Do1 {

	public static void main(String[] args) {
		int sum = 0, i = 1;
		do {
			sum += i;
			i++;
		} while(i<=10);
		System.out.println("합계 : " + sum);
	}
}

do while문을 사용하면 while문에 있는 코드가 한번이라도 실행이 됨.
코드를 실행 시켰을 때 while문 안에 있을 수 있는 문제를 확인할 수 있음.(while문은 조건에 해당이 안되면 괄호 안의 코드가 실행되지 않기 때문임) 미처 생각하지 못한 문제를 해결할 수 있음.
그래서 while보다는 do while문을 쓰는 것을 추천

 

출력 결과

 

Do2.java

package ch03;

//While2.java와 같음. While문을 Do While문으로 바꾼 것.
public class Do2 {

	public static void main(String[] args) {
		System.out.println("구구단 Do2");
		int i = 1, j = 2;
		do {
			do {
				System.out.print(j + " * " + i + " = " + i*j + "\t");
				j++;
			} while(j <= 9);
			System.out.println();
			i++;
			j = 2;
		} while(i <= 9);
	}
}

출력 결과

 

Do5.java

package ch03;

import java.util.Scanner; // scanner 자동완성임

public class Do5 {

	public static void main(String[] args) {
		Scanner sc = new Scanner(System.in); //system.in은 키보드로 입력하는 값을 받아들이는 것임.
		//1. 객체선언
		
		int cnt = 0, num;
		int answer = (int) (Math.random()*100)+1; //1~100 정수
		//(int)로 캐스팅하면 소수점은 잘림
		
		do {
			System.out.println("1~100 중 어떤 숫자일까요?");
			num = sc.nextInt(); //nextInt는 입력한 값을 받아들이는 것. 2. 관련 method 사용
			if(answer == num) {
				System.out.println(cnt+"번에 맞췄습니다. 축하!!");
				break;
			} else if (answer > num) {
				System.out.println("더 큰 수를 입력하세요.");
			} else System.out.println("더 작은 수를 입력하세요.");
			cnt ++;
		} while(true); //while에서 true를 썼을 때는 무조건 break문 쓰는 것 잊지말기. 안그러면 무한루프를 돎.
		sc.close();
	}
}

math.random은 양수값을 가지며, 0.0이상 ~ 1.0미만인 값을 랜덤하게 만들어줌

코드 실행 결과

 

For01.java

package ch03;

//While1.java와 같음
public class For01 {

	public static void main(String[] args) {
		int sum = 0;
		//for(초기값; 수행범위; 증감값)
		for (int i = 1; i<=10; i++) {
			sum += i;
			System.out.println(i+"까지 합: "+sum);
		}
		System.out.println("합계:" + sum);
	}
}

출력 결과

For02.java

package ch03;

import java.io.IOException;

//선택한 구구단이 나올 수 있도록 For문 구현
public class For02 {

	public static void main(String[] args) throws IOException {
		System.out.println("보고싶은 구구단 숫자는");
		int num = System.in.read() - '0';
		
		for(int i = 1; i<=9; i++) {
			System.out.println(num + "*" + i + "=" + num * i);
		}
	}
}

출력 결과

 

For03.java (과제 : 이중 for문을 이용한 구구단 조회)

package ch03;

public class For03 {

	public static void main(String[] args) {
		System.out.println("구구단");
		
		for(int i=2; i<=9; i++) {
			for(int j=1; j<=9; j++) {
				System.out.print(i + "*" + j + "=" + i*j+"\t");
			}
			System.out.println("");
		}
	}
}

출력 결과

 

For04.java

package ch03;

public class For04 {

	public static void main(String[] args) {
		for(int i = 0; i<=10; i++) {
			System.out.print(i +"\t");
		}
		System.out.println();
		for(int i = 10; i>=0; i--) {
			System.out.print(i+"\t");
		}
		System.out.println();
		// 0 시작 <=10 i가 2씩 증가
		for(int i = 0; i<=10; i+=2) {
			System.out.print(i+"\t");
		}
		System.out.println();
		for(int i = 1; i <=10; i*=2) {
			System.out.print(i+"\t");
		}
		System.out.println();
	}
}

출력 결과

 

Continue1.java

package ch03;

public class Continue1 {

	public static void main(String[] args) {
		//continue를 만나면 다시 앞의 for문으로 돌아감
		for (int i = 0; i<10; i++) {
			System.out.println("대박 i = " + i);
			if (i > 5) continue;
			System.out.println("쪽박 i = " + i);
		}
	}
}

출력 결과

 

Break1.java

package ch03;

public class Break1 {

	public static void main(String[] args) {
		int num = 0, sum = 0;
		while (true) {
			num ++;
			sum+= num;
			System.out.println("sum->" + sum);
			if(num==5) break;
			//Break 반복문, 분기문 종료
		}
		System.out.println("합계:" + sum);
		System.out.println("끝");
	}
}

출력 결과

 

 

*eclipse 단축키

단축키 목록 보기 : Ctrl + Shift + L

run 단축키 : ctrl + F11

 

 

[4. 자바배열.pdf]

p2.

int[] score;		//배열을 선언한다. (생성된 배열을 다루는데 사용될 참조변수 선언)
score = new int[5]	//배열을 생성한다. (5개의 int값을 저장할 수 있는 공간생성)

int[] score = new int[5]; //와 같이 한 문장으로 배열 선언과 배열 생성 가능

 

Arr01.java

package ch04;

public class Arr01 {

	public static void main(String[] args) {
		//크기가 5인 배열 a 생성
		int[] a = new int[5];
		a[0] = 7;
		a[1] = 34;
		a[2] = 67;
		a[3] = 6;
		a[4] = 234;
		
		for(int i=0; i<a.length; i++) {
			System.out.println("a[" + i + "] = " + a[i]);
		}
		
		int[] b = new int[5];
		b[0] = 7;
	    b[1] = 34;
	    b[2] = 67;
	    b[3] = 6;
	    b[4] = 234;
	    
	    for(int i=0; i<b.length; i++) {
	    	//System.out.println("b[" + i + "] = " + b[i]);
			System.out.printf("b[%d] = %d", i, b[i]);
			System.out.println();
		
	    }
	}
}

출력 결과

 

Arr02.java

package ch04;

public class Arr02 {

	public static void main(String[] args) {
  		//선언과 동시에 초기값을 지정할 수 있다.
		int[] a = new int[] {23, 45, 67, 789,2};
		System.out.println("-------- 일반 For문 -------");
		for(int i = 0; i<a.length; i++) {
			System.out.println("a[" + i + "] = " + a[i]);
		}
		//a에는 23, 45, 67, 789, 2가 있음.
		System.out.println("-------- 향상형 For문 -------"); //실무에서 이것을 더 많이 씀. 굉장히 중요함
		for (int kk : a) {	//a가 차례로 하나씩 kk에 들어감
			System.out.println("k= " + kk);
		}
	}
}

출력 결과

 

Arr03.java

package ch04;

public class Arr03 {

	public static void main(String[] args) {
		String[] str =  {"코로나", "물가", "손흥민", "개물림", "우영우"};
		for (int i = 0; i < str.length; i++) {
			System.out.println(str[i]);
		}
		System.out.println("향상형 kk로 바꾸기");
		for(String kk : str) {
			System.out.println(kk);
		}
	}
}

출력 결과

 

SumAvg.java

package ch04;

public class SumAvg {

	public static void main(String[] args) {
		int []a = {85, 90, 75, 100, 95};
		int sum = 0;
		
		for(int i=0; i<a.length; i++) {
			sum+=a[i];
		}
		System.out.println("합계 : " + sum);
		System.out.println("평균 : " + sum/a.length);
	}
}

출력 결과

 

 

[ArrayTest3.java]

과제 : 76,45,34,89,100,50,90,92 8개의 값을 1차원 배열로 초기화 하고

값의 합계와 평균

그리고 최대값과 최소값을 구하는 프로그램을 작성하시오.

package ch04;

public class ArrayTest3 {

	public static void main(String[] args) {
		//과제(내 코드)
		int a[] = {76,45,34,89,100,50,90,92};	//배열 초기화
		int sum = 0;
		int avg = 0;
		int max = 0;
		int min = 9999;
		
		//값의 합계
		for(int i=0; i<a.length; i++) {
			sum += a[i];
		}
		System.out.println("sum = " + sum);
		
		//값의 평균
		avg = sum/a.length;
		System.out.println("avg = " + avg);
		
		//값의 최대값
		for(int i=0; i<a.length; i++) {
			if (a[i] > max)
			max = a[i];
		}
		
		//값의 최소값
		for(int i=0; i<a.length; i++) {
			if (a[i] < min)
				min = a[i];
		}
		System.out.println("max = " + max);
		System.out.println("min = " + min);
		
		
		//정답 코드
		int array[] = {76,45,34,89,100,50,90,92};
		int sum2 = 0, avg2 = 0, max2=0, min2 = 100;
		for (int i = 0; i < array.length; i++) {
			sum2 += array[i];
			if (array[i] > max2)	max2 = array[i];
			if (array[i] < min2)	min2 = array[i];
		}
		avg2 = sum2 / array.length;
		System.out.println("합계 = " + sum2 + " 평균 = " + avg2);
		System.out.println("최대값은 = " + max2 + " 최소값은 = " + min2);
	}
}

성능을 위해선 for문을 2번 따로 쓰는 것 보다 한 번 쓰는 것이 좋다.

 

출력 결과

 

*printf main 오류 났을 때 : jdk, oracle 폴더채로 삭제하고 다시 설치 > 코드들 다른 파일로 옮겼다가 다시 가져오기

반응형