자바수업 3일차

하파타카·2021년 11월 24일
0

JAVA수업

목록 보기
3/10
post-thumbnail

한 일

  • switch문
  • 문자열비교(equals 메서드)
  • final 키워드
  • break
  • do while문
  • 변수의 범위
  • 배열
  • 반복문과 배열(for, for each 반복문)
  • 이중배열
  • 예제

switch문

  • if문과 유사한 조건 제어문.
  • 변수가 어떤 값을 갖느냐에 따라 실행됨.
  • 다음 case를 실행하지 않고 끝내기 위해서 하나의 case 끝에 반드시 하나의 break문이 필요함.
switch(변수) {
    case1:
         실행문A
         break;
    case2:
    	 실행문B
         break;
    default:
    	 위의 값들 중 해당되는 값이 없을 때의 실행문
}

예시)

int option = 0;

switch(option) {
case 0:		// 옵션변수가 케이스 0과 같을때
	System.out.println("옵션에서 0 선택");
	System.out.println("케이스 0 일때");
	break;	// 항상 케이스 하나 끝에 break 작성
case 1:		// 옵션변수가 케이스 1과 같을때
	System.out.println("옵션에서 1 선택");
	break;	// 항상 케이스 하나 끝에 break 작성
case 10:		// 옵션변수가 케이스 10과 같을때
	System.out.println("프로그램 종료...");
	break;	// 항상 케이스 하나 끝에 break 작성
default:	// else와 같음. 위의 케이스에 맞는 것이 없을때 실행
	System.out.println("잘못된 옵션번호입니다");
	break;
}

Scanner scanner = new Scanner(System.in);
System.out.println("계속 진행하겠습니까?  (y/n)");
String input = scanner.nextLine();	//문자열 입력시 nextLine()

switch(input) {
case "y":
	System.out.println("계속 진행합니다.");
	break;
case "n":
	System.out.println("종료합니다.");
	break;
default:
	System.out.println("잘못된 옵션");
	break;
}


문자열비교(equals 메서드)

  • 문자열1.equals(문자열2)
    문자열1과 문자열2가 같으면 true를, 다르면 false를 반환.
// 두 개의 문자열이 같은지 비교한다
String t1 = "사과";
String t2 = "오렌지";

// 문자열을 비교하는 두 가지 방법
// 1) 연산자로 비교, %b : boolean 타입
System.out.printf("두 개의 문자열 일치 : %b \n", t1 == t2);
// 2) 문자열의 equals메소드를 통해 비교, 같으면 true 다르면 false
System.out.printf("두 개의 문자열 일치 : %b \n", t1.equals(t2));


final 키워드

  • 변수의 앞에 final 키워드를 추가하면 저장된 초기값이 최종값이 되어 수정할 수 없다.
  • final 키워드가 붙은 변수의 이름은 관례상 대문자로 작성한다.
// 변수 앞에 final이 붙으면 상수(변하지 않는 값)이 된다
final int VALUE = 9;	// 상수의 이름은 관례상 대문자로 지정
//  VALUE = 1;	// 상수는 값을 대입할 수 없다.

System.out.println(VALUE);

final String USER_PASSWORD = "abc";
//  USER_PASSWORD = "ABC";
System.out.println(USER_PASSWORD);

  • 변수를 상수로 만들때 정확하게는 static final 이 모두 필요하다.
    이 때 상수의 이름은 모두 대문자로 작성하고, 두 개 이상의 단어를 조합시 _ 로 단어들을 연결한다.(이 부분은 추후 자세한 공부필요.)
  • final 클래스
    클래스 선언 시 class 앞에 final키워드를 붙이면 최종적인 클래스로 간주되어 상속할 수 없는 클래스가 된다.
    클래스 상속에 대해서는 java공부 6일차 참고.
  • final 메서드
    메서드 선언 시 final키워드를 붙이면 최종적인 메서드로 간주되어 재정의할 수 없는 메서드가 된다.
    즉, 부모 클래스를 상속하여 자식 클래스를 선언할 때 부모 클래스에 선언된 final메서드는 자식 클래스에서 재정의 할 수 없음.
    메서드 재정의에 대해서는 java공부 6일차 참고.

break

  • 반복문을 실행하다 break문을 만나면 현재의 코드블럭을 즉시 종료하고 빠져나간다.
    => 가장 가까운 반복문을 빠져나간다고 생각할 것. '반복문'인게 중요.
  • switch case문 사용 시 case문에 반드시 break문을 작성해둬야 다음 case로 넘어가지 않고 반복문을 빠져나온다.

do while문

  • do while문은 whlie문과 달리 처음 한 번은 조건과 상관없이 무조건 실행됨.
  • 사용법
    do {
    아래의 조건에 상관없이 무조건 한번은 실행될 코드;
    }whlie (조건식);

예시)

int count = 100;
System.out.println("do while 반복문");
do {
	System.out.println("Count: " + count);
}
while (count++ < 5);
// count를 5와 비교한 후 count에 +1을 해줌
// 조건이 false값이지만 do while문은 처음한번은 무조건 실행됨


변수의 범위

  • 지역변수
    코드블럭 {} 안에서 선언된 변수.
    코드블럭 밖에서는 사용불가.

  • 전역변수
    코드블럭 {} 밖에서 선언된 변수.
    코드블럭 안에서 사용가능.


배열

같은 타입의 여러 변수를 하나로 묶은 자료형 (참조 자료형)
배열은 초기값을 선언해줘야 한다.
배열의 인덱스는 0부터 시작한다.
배열의 길이와 인덱스를 헷갈리지 않도록 주의.

1) 숫자형 배열

  • 선언
    int[] 배열명 = { 2, 4, 6, 8 ...};

    인덱스    	값
      0	:	2		// 인덱스는 0부터 시작
      1	:	4
      2	:	6
      3	:	8
  • 인덱스 번호를 이용해 실제 값을 가져오는 방법

배열명[인덱스번호]

  • 인덱스가 없는 값을 호출 시 에러발생.
  • 기본자료형(int, double 등)은 null값을 입력불가.

예시)

int[] numbers = {2, 4, 6, 8};	
// 정수 int형 배열 선언과 초기값이 {2, 4, 6, 8}, 배열은 초기값을 입력해줘야함

System.out.printf("인덱스번호 %d의 값은 %d이다 \n", 0, numbers[0]);
System.out.printf("인덱스번호 %d의 값은 %d이다 \n", 1, numbers[1]);
System.out.printf("인덱스번호 %d의 값은 %d이다 \n", 2, numbers[2]);
System.out.printf("인덱스번호 %d의 값은 %d이다 \n", 3, numbers[3]);
// System.out.printf("인덱스번호 %d의 값은 %d이다 \n", 4, numbers[4]);	
//인덱스가 없는 값을 호출하면 에러발생

2) 문자열 배열

  • String은 기본 자료형이 아닌 참조 자료형으로,
    참조 변수(reference variable)는 기본적으로 주소값을 가진다.
  • 문자열은 null값 입력가능. null값은 주소가 없다.

3) new로 배열 생성하기

타입[] 변수명 = new 타입[길이];

  • new는 메모리에 배열의 공간을 생성함.
  • 이미 배열변수가 선언이 된 이후에도 new연산자로 배열을 생성할 수 있음.

예시)

String[] texts = new String[3];		
// 배열 문자열 3칸을 실제로 생성해 tests에 주소입력
  • 배열의 생성과 함께 초기값을 바로 넣음 = 리터럴
    타입[] 변수명 = {값1, 값2, 값3};
int[] num = {1, 2, 3}; 	//초기값을 바로 넣는 방법을 리터럴이라고 함.

2)문자열 배열과 3)new로 배열생성이 같이 쓰인 예제↓

String text = null;

// text = new String("Hello!");		// new는 메모리에 문자열 공간을 만듬
text = "헬로우!";		// 원래는 new로 새로 선언을 해주고 값을 넣어야 하지만 간단히 이렇게 작성해도 됨 
System.out.println(text);

String[] texts = null;
System.out.println(texts);
texts = new String[3];		// 배열 문자열 3칸을 실제로 생성해 tests에 주소입력
System.out.println(texts);
System.out.println(texts[0]);	// texts[0]에 주소값이 없어 null이 출력됨
 
// 주소값 할당
texts[0] = new String("안녕 안녕 !");
texts[1] = "반가워!!";
texts[2] = "잘 가 ~ !";

// for each문으로 배열출력
for(String w : texts) {
	System.out.println(w);
}


반복문과 배열

1) for 문으로 배열 출력

  • 배열명.length : 배열의 길이를 출력. 배열의 원소가 7개이면 길이는 7, 인덱스는 0~6.
// 문자열 타입으로 만든 배열
String[] animals = {"고양이", "개", "펭귄", "사자", "돌고래", "호랑이", "소"};

// 반복문 for문 인덱스 번호를 i로, 배열명.length는 배열의 크기를 알려준다.
for (int i = 0; i < animals.length; i++) {
	System.out.printf("배열 animals의 인덱스 %d번의 값은 %s이다. \n", i, animals[i]);
    	// 여기서 animals.length 의 값은 7임
	// %s : String 타입의 자리임을 나타냄
}

2) for each 문으로 배열출력

배열에 사용할 수 있는 반복문.
간단한 배열의 반복에는 for each문을, index번호가 필요한 경우에는 for문을 사용한다.
배열의 값이 하나씩 변수의 자리에 들어가며 반복됨.

  • 사용법
    for(타입 변수 : 배열명) { 실행문; }

예시)

String[] fruits = {"바나나", "사과", "수박"};
int[] n = {1, 2, 3};
boolean[] bool = {true, false, true};
double[] d = {1.1, 2.2, 3.3, 4.4};
		
// for each문 : for( 변수 : 배열 ) { 실행문; }
// 변수의 자리에 지정한 배열의 값이 하나씩 차례로 들어가며 반복된다.
for(String x : fruits) {
	System.out.print(x + "	");
}
System.out.println();
for(int x : n) {
	System.out.print(x + "	");
}
System.out.println();
for(boolean x : bool) {
	System.out.print(x + "	");
}
System.out.println();
for(double x : d) {
	System.out.print(x + "	");
}


이중배열

배열이 중첩되어있는 경우.

public class MultiArray {
	public static void main(String[] args) {
		// 이중 배열
		
		String[][] texts = {
				{"하나", "둘", "셋", "넷"},
				{"다섯", "여섯", "일곱", "여덟"},
				{"아홉", "열", "열하나", "열둘"},
		};
		
		for(int i = 0; i < texts.length; i++) {	// texts.length는 배열이 몇개인지, 여기서는 3
			String[] innerArray = texts[i];		// 
			System.out.printf("%d번쨰 배열 %s \n", i, texts[i]);
			
			for(int j = 0; j < innerArray.length; j++) {	
				System.out.printf("%s\t", innerArray[j]);
			}
			System.out.println("\n");	// 외부배열이 하나 끝날 때 마다 한 줄 띄움 
		}
		System.out.println("==========");
		
		// ver2
		for (int i = 0; i < texts.length; i++) {
			for (int j = 0; j < texts[i].length; j++) {
				System.out.printf("%s\t", texts[i][j]);
			}
			System.out.println();
		}
	}
}


예제

  • 패스워드 체크하기
// 지정된 패스워드 입력 시 접속승인
final String USER_PASSWORD = "hello";
System.out.print("패스워드 입력 > ");

Scanner scanner = new Scanner(System.in);
String password = scanner.nextLine();
scanner.close();

if (password.equals(USER_PASSWORD)) {	// ==연산자 대신 equals메소드를 이용해 password와 USER_PASSWORD를 비교
	System.out.println("접속승인");
}
else {
	System.out.println("접속불가");
}

  • 패스워드 3회 체크하기
    여기서 break문은 정답을 맞췄을 때 남은 도전횟수에 관계없이 바로 프로그램을 종료하기 위해 필요.
final String USER_PASSWORD = "hello";
Scanner scanner = new Scanner(System.in);		
boolean accessOK = false;	//플래그 : boolean변수로 상태에 따라 처리

for(int count = 0; count < 3; count++) {
	System.out.println("패스워드 입력 > ");
	String password = scanner.nextLine();
	
	if (password.equals(USER_PASSWORD)) {
		accessOK = true;
		System.out.println("접속허용");
		break;
	}
	else {
		System.out.printf("패스워드가 %d번 틀렸습니다. \n", count + 1);
	}
}
scanner.close();

if(!accessOK) {		// !accessOK의 값이 true이면 "접속거부"출력
	System.out.println("접속거부");
}

profile
천 리 길도 가나다라부터

0개의 댓글

관련 채용 정보