Boolean 데이터 타입
true
와 false
같은 것은 예약어
로, 변수명으로 사용할 수 없다.
public class BooleanApp {
public static void main(String[] args) {
// TODO Auto-generated method stub
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("hyejin"));
}
}
비교연산자
왼쪽 값과 오른쪽 값을 비교해서 true 또는 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);
}
}
public class IfApp {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println("a");
// if(false) {
// System.out.println(1);
// }
// else {
// if(true) {
// System.out.println(2);
// }
// else {
// System.out.println(3);
// }
// }
if(false) {
System.out.println(1);
}
else if(true){
System.out.println(2);
}
else {
System.out.println(3);
}
System.out.println("b");
}
}
if, else if, else에 대해서 배워보았다.
이제 조건문을 응용해보자.
public class AuthApp {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(args[0]);
String id="hyejin";
String inputId=args[0];
System.out.println("hi");
// if(inputId==id) {
if(inputId.equals(id)) {
System.out.println("Master!");
}
else {
System.out.println("Who are you?");
}
}
}
==
는 객체의 주소를 비교하고,
.equals()
는 객체의 값을 비교하는 것이다.
아래에 더 자세히 작성해두었다!
args[0]의 객체 주소와 일반 객체처럼 스택 영역에 생성된 string은 주소가 다르다.
이제는 비밀번호도 받아보자.
args[1] 을 위해 인자값 수정을 한다.
public class AuthApp {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(args[0]);
String id="hyejin";
String inputId=args[0];
String pw="1111";
String inputPw=args[1];
System.out.println("hi");
// if(inputId==id) {
// if(inputId.equals(id)) {
// if(inputPw.equals(pw)) {
// System.out.println("Master!");
// }
// else {
// System.out.println("Wrong password!");
// }
// }
// else {
// System.out.println("Who are you?");
// }
if(inputId.equals(id) && inputPw.equals(pw)) {
System.out.println("Master!");
}
else {
System.out.println("Who are you?");
}
}
}
&&
를 (and)를 이용해 조건문을 단순하게 바꿨다
모든 프로그램은 input을 받아 output을 출력하는 것이다!
public class LoopApp {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(1);
System.out.println(2);
System.out.println(3);
System.out.println(4);
}
}
해당 소스 코드의 2와 3을 반복시켜보자.
public class LoopApp {
public static void main(String[] args) {
// TODO Auto-generated method stub
System.out.println(1);
int i=0;
System.out.println("=== while ===");
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);
}
}
while문 보다는 for문이 역시 더 편하다..
public class ArrayApp {
public static void main(String[] args) {
// TODO Auto-generated method stub
// String users="hyejin, dang, dangdang";
String[] users=new String[3];
users[0]="hyejin";
users[1]="dang";
users[2]="dangdang";
System.out.println(users[1]);
System.out.println(users.length);
int[] scores= {10,100,100};
System.out.println(scores[1]);
System.out.println(scores.length);
}
}
여기서, scores[1]의 1은 인덱스
, 그 값인 dang은 원소(element)
라고 한다.
public class LoopArray {
public static void main(String[] args) {
/*
* <li>hyejin</li>
* <li>dang</li>
* <li>dangdang</li>
*/
String[] users=new String[3];
users[0]="hyejin";
users[1]="dang";
users[2]="dangdang";
for(int i=0;i<users.length;i++) {
// System.out.println("<li>"+users[i]+"</li>");
if(i!=users.length-1) {
System.out.println(users[i]+",");
}
else {
System.out.println(users[i]+".");
}
}
}
}
배열이랑 반복문을 사용하면 폭발적인 효과를 가져올 수 있다.
public class AuthApp3 {
public static void main(String[] args) {
String[] users= {"hyejin","dang","dangdang"};
String inputId=args[0];
//if inputId in users
boolean isLogined=false;
for(int i=0;i<users.length;i++) {
String currentId=users[i];
if(currentId.equals(inputId)) {
isLogined=true;
break;
}
}
System.out.println("Hi,");
if(isLogined) {
System.out.println("Master!!");
}
else {
System.out.println("Who are you?");
}
}
}
arguments에 따라 다르게 출력되는 프로그램이 완성이 됐다~
이제 2차원 배열
을 사용해보자.
public class AuthApp3 {
public static void main(String[] args) {
// String[] users= {"hyejin","dang","dangdang"};
String[][] users= {
{"hyejin","1111"},
{"dang","2222"},
{"dangdang","3333"}
};
String inputId=args[0];
String inputPw=args[1];
//if inputId in users
boolean isLogined=false;
for(int i=0;i<users.length;i++) {
String[] current=users[i];
if(current[0].equals(inputId) && current[1].equals(inputPw)) { //id pw check
isLogined=true;
break;
}
}
System.out.println("Hi,");
if(isLogined) {
System.out.println("Master!!");
}
else {
System.out.println("Who are you?");
}
}
}
이차원 배열도 사용했고, String[] current=users[i]에 넣는 건 잘 몰랐다!
다르게 넣어서 테스트해보자~!!
==
과 equals
의 차이에 대해서 자세히 알아보자.
primitive
는 쪼갤 수 없는 원시 데이터.
boolean
, int
, double
, short
, long
, float
, char
non primitive
는 원시 데이터 타입이 아닌 것들.
String
, Array
, Date
, File
..
int p1=1
이면 p1이라는 이름이 값 1을 가리키는것
int p2=1
이면 p2도 p1이 가리킨 1을 똑같이 가리킨다.
==
는 같은 곳
을 가리키고 있냐는 것과 같다.
String o1=new String("java")
new 를 이용해서 만들면, o1은 "java"를 가리킨다.
String o2=new String("java")
를 하면, o2는 o1이 가리키는 java가 아닌 새로운 "java"를 가리킨다.
o1==o2를 하게 되면, 같은 곳에 위치하는 것이 아니
기 때문에 false
가 된다.
객체
들은 .equals
라는 메소드를 다 가지고 있다.
o1.equals(o2) 를 통해 내용을 비교할 수 있다.
하지만, 문자열String
은 특혜를 받고 있다.
String o3="java2"
o3는 java2를 가리킨다.
String o4="java2"
o4는 o3가 가리키는 java2를 가리키게 된다.
o3==o4 가 true가 되게 된다.
다음번에는..
자바의 예외
를 먼저 공부해보자!!