switch(변수) {
case 값1:
실행문A
break;
case 값2:
실행문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;
}
// 두 개의 문자열이 같은지 비교한다
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 int VALUE = 9; // 상수의 이름은 관례상 대문자로 지정
// VALUE = 1; // 상수는 값을 대입할 수 없다.
System.out.println(VALUE);
final String USER_PASSWORD = "abc";
// USER_PASSWORD = "ABC";
System.out.println(USER_PASSWORD);
예시)
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부터 시작한다.
배열의 길이와 인덱스를 헷갈리지 않도록 주의.
선언
int[] 배열명 = { 2, 4, 6, 8 ...};
인덱스 값
0 : 2 // 인덱스는 0부터 시작
1 : 4
2 : 6
3 : 8
인덱스 번호를 이용해 실제 값을 가져오는 방법
배열명[인덱스번호]
예시)
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]);
//인덱스가 없는 값을 호출하면 에러발생
타입[] 변수명 = new 타입[길이];
예시)
String[] texts = new String[3];
// 배열 문자열 3칸을 실제로 생성해 tests에 주소입력
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);
}
// 문자열 타입으로 만든 배열
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 타입의 자리임을 나타냄
}
배열에 사용할 수 있는 반복문.
간단한 배열의 반복에는 for each문을, index번호가 필요한 경우에는 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("접속불가");
}
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("접속거부");
}