Java Flow Control(제어문)
조건에 따라서 실행되는 순서를 제어하는 명령문
Boolean data type
true or false 로 표현되는 데이터
""가 없는 true(reserved word)는 boolean data이기 때문에 변수이름으로 사용 불가
public class BooleanApp {
public static void main(String[] args) {
System.out.println("One");
System.out.println(1);
System.out.println(true);
System.out.println(false);
String foo = "Hello world";
// String true = "Hello world"; reserved word
System.out.println(foo.contains("world"));
System.out.println(foo.contains("egoing"));
//contains 메소든는 ()안의 내용이 포함되었는지 여부에 따라 true or false의 boolean data 값을 반환한다.
}
}
Comparison operator
비교연산자
=.>, <, =<, >=
두 값을 비교하여 true or false 의 값을 반환하는 비교 연산자
public class ComparisonOperatorApp {
public static void main(String[] args) {
System.out.println(1 > 1); // false
System.out.println(1 == 1); // true
System.out.println(1 < 1);
System.out.println(1 >= 1);
}
}
Conditional Statement
If(){} :()안에는 true or false의 Boolean data만이 올 수 있다.
*()안의 값이 true 라면 {}안의 수식이(내용이) 실행된다. 조건문 안에는 또다른 조건문이 올 수 있다.
public class IfApp {
public static void main(String[] args) {
System.out.println("a");
if(false) {
System.out.println(1);
} else if(true) {
System.out.println(2);
} else {
System.out.println(3);
}
System.out.println("b");
}
}
활용 ex)
public class AuthApp {
public static void main(String[] args) {
String id = "John";
String inputId = args[0];
System.out.println("Hi. "+ inputId);
//if(inputId == id) { // 동작하지 않음
if(inputId.equals(id)) {
System.out.println("Master!");
} else {
System.out.println("Who are you?");
}
}
}
public class AuthApp {
public static void main(String[] args) {
String id = "John";
String inputId = args[0];
String pass = "1111";
String inputPass = args[1];
System.out.println("Hi, user!");
//if(inputId == id) {
// if(inputId.equals(id)) {
// if(inputPass.equals(pass)) {
// System.out.println("Master!");
// } else {
// System.out.println("Wrong Password!");
// }
// } else {
// System.out.println("Who are you?");
// }
//
// } 는 논리 연산자 &&를 사용하여 간략화 할 수 있다.
if(inputId.endsWith(id) && inputPass.equals(pass)) {
System.out.println("Master!");} else {
System.out.println("Who are you?");}
}
}
문자의 비교 : ==과 equals의 차이점
데이터의 종류는
Primitive/Non Primitive 로 나눌 수 있고 자바가 취급하는 방법이 다르다.
원시 데이터 타입(primitive) 7가지
--> boolean, int, double, short, long, float, char
원시 데이터 타입이 아닌 것: String,. Array, Date, File, ...
기본적으로 원시 데이터 타입들은 같은 데이터라면 heap 안에서 같은 메모리 공간을 가리키게 된다.
int p1 = 1 ---> 같은 매모리 공간을 가리킴 (p1 == p2 는 true)
int p2 = 1
이렇게 되면 == 연사자를 사용하면 p1과 p2는 같다고 인식하게 됨.
p1 == p2 ---> true
*하지만 String은 특혜를 받고있어서,
primitive가 아님에도 같은 데이터면 같은 메모리 공간을 가리킨다. (원시 데이터 타입처럼 동작한다)
String o3 = "java2" ---> 같은 메모리 공간을 가리킴 (o3 == o4 는 true)
String o4 = "java2"
그래도 쉽게말하면, 원시 데이터 타입은 == 사용해야함.
원시 데이터 타입은 equals메소드를 가지고있지 않아 오류가 난다. 사용 X
원시 데이터 타입이 아닌 객체들에겐 equals를 사용하는게 편하다.
같은 데이터를 heap 안에서 다른 메모리 공간에 할당할때 new 연산자를 사용
String ex1 = new String ("java") ---> 각각의 메모리 공간을 할당받음 (ex1 == ex2 는 false)
String ex2 = new String ("java")
Looping statement
while(Boolean Data Type) {}
()안의 불리언 데이터가 true일때 {}안의 내용을 반복 실행
for(초기값, Boolean Data, 초기값을 변화시키는 반복되는 코드) {} ()안의 초기값을 먼저 실행하고 {}안의 내용을 실행, ()안의 3번째 코드를 실행하여 2번째 불리언 데이터값을 산출, true가 false가 될때까지 반복
ex)
public class LoopApp {
public static void main(String[] args) {
System.out.println(1);
System.out.println("=== while ===");
int i = 0;
//..
while(i < 3) {
System.out.println(2);
System.out.println(3);
// i = i + 1;
//..
i++;
}
System.out.println("=== for ===");
for(int j=0; j < 3; j++) {
System.out.println(2);
System.out.println(3);
}
System.out.println(4);
}
}
Array 배열
반복문과 늘상 함께 쓰이는 데이터 보관 방법
데이터타입[] 변수이름 = new 데이터타입[데이터 수];
변수이름[0] = 내용;
변수이름[1] = 내용;
변수이름[2] = 내용;
.
.
.
System.out.println(변수이름[index]);
System.out.println(변수이름.length); : Element: Array안의 데이터 수(몇칸짜리 배열인지)
혹은
데이터타임[] 변수이름 = {데이터}
두가지 방법으로 Array를 만들 수 있다.
public class ArrayApp {
public static void main(String[] args) {
// egoing, jinhuck, youbin
// String users = "egoing, jinhuck, youbin";
String[] users = new String[3];
users[0] = "egoing";
users[1] = "jinhuck";
users[2] = "youbin";
System.out.println(users[1]);
System.out.println(users.length);
int[] scores = {10, 100, 100}; // 원소, element
System.out.println(scores[1]);
System.out.println(scores.length);
}
}
//반복문과 함께 사용시 의미가 있다.
public class LoopArray {
public static void main(String[] args) {
/*
* <li>egoing</li>
* <li>jinhuck</li>
* <li>youbin</li>
*/
String[] users = new String[3];
users[0] = "egoing";
users[1] = "jinhuck";
users[2] = "youbin";
for(int i=0; i<users.length; i++) {
System.out.println(users[i]+",");
}
}
}