if문
if (조건식) {
// 조건식이 참일 경우 수행될 코드 작성}
if ~else 문
if (조건식) {
// 조건식이 참(true)일 때 수행될 문장들을 적는다.
} else {
// 조건식은 적을 필요가 없다.
// 조건식이 거짓(false)일 때 수행될 문장들을 적는다. : if 조건식 제외 나머지 경우
}
다중 if 문
if (조건식1) {
// 조건식 1이 참일 때 수행될 문장들
if (조건식 2) {
// 조건식 1이 참이며 조건식 2도 참일 때 수행될 문장들
} else if (조건식 3) {
// 조건식 1이 참이지만
// 조건식 2는 거짓이고 조건식 3은 참일 때 수행될 문장들
} else {
// 조건식 1이 참이지만
// 조건식 2와 3은 거짓일 때 수행될 문장들
}
} else {
// 조건식 1이 거짓(false)일 때 수행될 문장들을 적는다.
}
==
수행해 값을 비교 switch (조건식) {
case 값1 :
// 조건식의 결과가 [값1]과 같을 경우 수행
break // switch문 벗어나기
case 값2 :
// 조건식의 결과가 [값2]와 같은 경우 수행
break
...
...
default :
//조건식 결과와 일치하는 case 없을 경우 수행될 문자
//...
}
break문은 옵션 (없으면 case문 순차적으로 모든 내용 실행)
《계산 순서》
① 1차적으로 switch문의 조건식
②【결과와 일치하는 case문으로 이동】
③ 이동한 case문 내부 문장 수행
④【break문 / switch문 종류의 단계 도달】
⑤종료
위 순서 중 ②번 부분을 보면 switch문의 조건식 결과와 일치하는 case로 간다고 작성되어있는데
만약 일치하는 case가 없을 경우, default문으로 이동한다.
switch문을 쓰기 위해서 지켜져야할 제약조건이 있다.
💫《제약 조건》
조건식의 결과값은 무조건 정수/문자열이어야 한다. ==> byte, short, int, char, string, enum (cf. long은 x)
case문의 값 역시 상수 (정수/문자)/문자열만 사용하여야 한다. (변수나 실수 X)
중복되지 않아야 한다.
package p03;
public class switch문 {
public static void main(String[] args) {
char b = 10;
switch(b)
{
case 10 :
System.out.println("10"); // break문이 없는 경우 모든 case 문 실행
case 20 :
System.out.println("20");
break;
case 30 :
System.out.println("30");
default:
System.out.println("default");
}
switch (b)
{
case 10 :
System.out.println("10");
break;
case 20 :
System.out.println("20");
break;
case 30 :
System.out.println("30");
break;
default:
System.out.println("default");
break;
}
String s = "A";
switch (s)
{
case "A" :
System.out.println("A");
break;
case "B":
System.out.println("B");
break;
case "C" :
System.out.println("C");
break;
default:
System.out.println("default");
break;
}
// byte, short, int, char, String, enum 데이터형만 가능하다(long은 불가)
// break 문은 옵션
}
}
ref. https://velog.io/@yummygyudon/JAVA-%EB%B0%98%EB%B3%B5%EB%AC%B8
for (초기화 ; 조건식 ; 증감식) {
// 조건식이 참(true)인 동안 수행될 문장들을 적는다. _ 조건식 부분이 Python 입문자였던 필자에게 꽤 신선했던 부분
}
// "Just Do It!" 5번 출력하기
for (int i = 1; i <= 5 ; i++) {
System.out.println("Just Do IT!") ;
}
package exam01;
public class ForTest {
public static void main(String[] args) {
// hello
for(int i=1; i<=5; i++)
{
System.out.println("hello");
}
for(int i=10; i<=15; i++)
{
System.out.println("world"+i);
}
for(int i=10; i>5; i--)
{
System.out.println("happy"+i);
}
for(int i=1; i<=10; i+=2)
{
System.out.println("aaaa"+i);
}
for(int i=1, j=1; i<=5 && j<=3; i++, j++)
{
System.out.println("bbb"+i);
}
// 중첩 반복
for(int i=1; i<=5; i++)
{
for(int i2=1; i2<=5; i2++)
{
System.out.println("ccc"+i+"\t"+i2);
}
}
}
}
+) 중단점 설정 후 디버깅 수행
// for문
for (int i = 1; i <= 10; i++) {
...
}
// while문
int i = 1 ; // while문 밖에서 초기화
while (i <= 10) // 조건식{
...
i++; // 증감식
}
package exam01;
public class WhileTest {
public static void main(String[] args) {
// for
for(int i=1; i<=5; i++)
{
System.out.println("hello");
}
// while
int i = 1;
while(i<=5)
{
System.out.println("world"+i);
i++;
}
}
}
package exam01;
import java.util.Scanner;
public class WhileTest2 {
public static void main(String[] args) {
// 무한루프: 반드시 반복문을 빠져나올 수 있는 방법을 제공해야 된다.
/*while(true)
{
문장
if (조건) break;
}*/
// 문자열 비교는 equals 메서드를 사용
// 반복적으로 키보드 입력 받기
while(true)
{
Scanner scan = new Scanner(System.in);
System.out.println("이름 입력 : (종료:Q) ");
String name = scan.next(); // int n = scan.nextInt();
if(name.equals("Q"))
break;
System.out.println("입력 이름" + name); // 사용자가 입력한 값을 저장하고 출력
}
System.out.println("end");
}
}
최소 한 번의 실행은 보장
되어 있다.시작값;
do {
문장;
증감연산자;
... // "처음 한 번"은 무조건 실행됨.
} while (조건식) ; // ';' 필수이니 꼭 기억해야한다.
package exam01;
public class DoWhileTest {
public static void main(String[] args) {
// while
int i = 1;
while(i<=5)
{
System.out.println("world"+i);
i++;
}
int i2 = 1;
do
{
System.out.println("hello"+i2);
i2++;
} while(i2>5);
}
}
package exam01;
public class break_continue {
public static void main(String[] args) {
// 1~10까지 반복하는데 5까지 출력하고 중단하시오
for(int i = 1 ; i<= 10; i++)
{
if (i==6) break;
System.out.println(i);
}
System.out.println("END");
}
}
Loop1 : for (int i=2; i <= 9 ; i++) {
for (int j=1; j <= 9 ; j++) {
if (j==5)
break Loop1 ; -> 구구단 2단 *4까지만 출력하고 전체 Loop1 밖으로 이동
//break ; ->구구단 *4까지
//continue Loop1 ; -> continue도 이름 활용 : 구구단 2단 *4까지만 출력하고 Loop1 '끝'으로 이동
//continue ; -> 구구단 *5만 빼고 반복
System.out.println(i + "*" + j + "=" + i*j );
}
System.out.println();
} //( continue Loop1 이 오는 지점)
/*---------------------------------< Loop1 지역 >----------------------------------*/
//( break Loop1 이 오는 지점)
package exam01;
public class break_continue {
public static void main(String[] args) {
// 1~10까지 반복하는데 5까지 출력하고 중단하시오
for(int i = 1 ; i<= 10; i++)
{
if (i==6) break;
System.out.println(i);
}
System.out.println("END");
// continue
// 1~5 반복하는데 i가 3일 때는 C 출력하지 마시오
for (int i2=1;i2<=5;i2++)
{
System.out.println("A"+i2);
System.out.println("B"+i2);
if (i2 == 3)continue;
System.out.println("C"+i2);
}
System.out.println("END");
}
}
public class ContinueExample {
public static void main(String[] args) {
// 3의배수만 출력하자
for(int i = 1; i < 100; i++) {
// if(i % 3 == 0) {
// System.out.println(i);
// } // 도 같은 결과도출
// }
if(i %3 != 0) {
continue;
}
System.out.println(i);
}
coninue문을 활용하여 i가 3으로 나누어 떨어지지 않으면 수행문을 수행하지 않고 다음 반복으로 넘어가라는 조건을 추가하여 1~100까지의 숫자 중 3의 배수만 출력하는 반복문을 구현해 보았습니다.
break, continue 예제
Q. 구구단을 출력할 때 짝수 단만 출력하면서 단보다 곱하는 수가 작거나 같을 때까지만 출력하세요
public class BreakContinue {
public static void main(String[] args) {
int dan;
int count;
for (dan = 2; dan <10; dan++) {
if(dan % 2 != 0) {
continue;
}
System.out.println(dan+"단");
for(count = 1; count <10 ; count++) {
if(count > dan) {
break;
}
System.out.println(dan + "X" + count + " = " + dan*count);
}
System.out.println();
외부 반복문에 continue문을 넣어 홀수단일 경우 수행문을 수행하지 않고 다시 조건을 검토하며 내부 반복문에서 곱하는 수가 단수 보다 높아지면 break를 통해 반복문을 빠져나오게 구현하였습니다.
정리해보면 break;문과 continue문은 반복문을 더 세밀한 조건을 설정하여 구현하도록 돕는 역할을 할 수 있음을 알 수 있었습니다.
new
키워드 사용 하나의 변수
에 여러 개의 data 저장자료형 [ ] 변수명;
자료형 변수명 [];
값
이 대입됨주소 값
이 대입됨1) 배열 생성
int 타입 배열 선언
2) 배열 생성 후 초기화
하면 배열의 주소가 할당된다.
- 타입[] 변수이름 = new 타입[길이];
// 배열의 선언과 생성을 동시에
- int[] score = new int[5];
// 길이가 5인 int 배열
- int[] i_array = new int[8]; //초기값 0
- String[] s_array = new String[8]; //초기값 ""
3) 배열 초기화
배열을 선언하면 크기를 할당하면 아래와 같은 배열의 index
가 부여
배열 자동 초기화
:
0
0.0
false
null
배열의 크기:
'배열이름.length'
int[] arr = new int[5];
// 길이가 5인 int배열
int tmp = arr.length;
// arr.length의 값은 5이고 tmp에 5가 저장된다
배열 요약
가) 배열 선언
데이터타입(기본형, 자료형) [ ] 배열명;
나) 배열 생성
배열명 = new 데이터타입 [크기] ;
다) 배열 초기화
n[0] = 10;
n[1] = 10;
n[2] = 10;
n2[0] = "A" // 문자 A의 주소값이 저장
n2[1] = "B"
package exam02;
public class ArrayTest {
public static void main(String[] args) {
// 1. new 이용
// 1) 기본형 배열
int n [] = new int [3]; // 자동 초기화 int => 0
n[0] = 10;
n[1] = 20;
n[2] = 30;
System.out.println(n[0]);
System.out.println(n[1]);
System.out.println(n[2]);
// for문을 이용해서 배열값 출력
// "인덱스(index)의 범위는 0부터 '배열길이 -1'까지."
// 없는 배열 요소 접근 시 ArrrayIndexoutOfBoundsException 예외 발생
for(int idx = 0; idx <n.length; idx ++) {
System.out.println(n[idx]);
}
// 향상된 for문 (foreach 문)
/*
* for (변수: 배열명)
* { // 배열에 저장된 값을 얻고 변수에 저장, 이것을 배열 크기만큼 반복
* }
*
* */
for(int x : n) // 만약 배열 원소들이 문자열일 경우 for each 문 내 변수를 string으로 지정
{
System.out.print(x + " ");
}
}
}
package exam02;
public class ArrayTest2 {
public static void main(String[] args) {
// 1. new 이용
// 2) 참조형 배열
String [] names = new String[3];
// 향상된 for문 (foreach 문)
/*
* for (변수: 배열명)
* { // 배열에 저장된 값을 얻고 변수에 저장, 이것을 배열 크기만큼 반복
* }
*
* */
names[0] = "홍길동";
names[1] = "이순신";
names[2] = "유관순";
for (String s : names)
{
System.out.println(s);
}
}
}
+) main 종료시 Garbage Collector
package exam02;
public class ArrayTest3 {
public static void main(String[] args) {
// 기본형 변수
int n = 10;
// 메서드 안에 선언하면 로컬 변수 ==> main이든, 특정 함수의 중괄호 블럭 안 ==> stack 영역 할당
// 참조형 변수
// 1)기본형 배열
// new로 객체 생성하면 무조건 heap 영역에 할당
int [] x = new int [3];
x[0] = 10;
//2) 참조형 배열
String [] y = new String[3];
y[0] = "홍길동"; // 문자열의 주소값이 heap영역에 할당됨
}
}
new 이용
배열의 선언과 생성
int [ ] n = new int [3] ;
String [ ] n = new string [3] ;
가) 변수 선언 (배열 선언)
나) 배열 생성
다) 배열 초기화
2) 리터럴 (데이터 값) 이용
배열의 선언과 초기화
int [] n ={10, 20, 30};
String [ ] n = {“A”, “B”, “C”};
=> 주의) 한 줄에 명시해야 함
3) New + literal
Int [ ] n = new int [ ] {10, 20};
String [ ] n2;
n2 = new String {“A”, “B”};
=> 주의) 절대로 배열 크기를 지정해주면 안됨
class Test {
main(String[] args) {
}
}
javac Test.java
==> data 개수만큼
변수 선언 필, 관리가 불편함.
==> 하나의 변수
에 여러 개의 data 저장
==> 저장되는 data들의 자료형 여러 개 혼용
(숫자, 문자 ==> 혼용 가능)
==> 크기 변경 가능
(추가, 삽입, 삭제 가능)
==> set, list, map 계열 존재