23.04.11
flowchart - 알고리즘이나 프로그램의 논리 혹은 흐름을 그림으로 표현하는 방법
직선형, 분기형, 반복형이 있다.
조건문 형태
이 때 여러 문장을 묶어주는 {}를 블럭이라 하는데, if 조건문에서 실행할 문장이 하나라면 블럭 생략 가능
char ch = 'b';
if (ch >= 'a' && ch <= 'z')
System.out.println("해당 문자는 영문 소문자입니다.");
임의의 정수 만들기
Math.random() -> 0.0 과 1.0 사이의 임의의 double 값을 반환
1~10의 정수 만들기
System.out.println((int)(Math.random() * 11) - 5); // -5 ~ 5
반복문
class Control3_3 {
public static void main(String[] args) {
// 초기화 시 변수 2개 사용 가능합니다. 단, 타입이 같아야 한다.
for (int i = 1, j = 10; i <= 10; i++, j--) {
System.out.println("i는 현재 " + (i) + "입니다.");
System.out.println("j는 현재 " + (j) + "입니다.");
}
System.out.println();
// 이렇게 변수 2개를 사용하여 조건식을 구성할 수 있습니다.
for (int k = 1, t = 10; k <= 10 && t > 2; k++, t--) {
System.out.println("k는 현재 " + (k) + "입니다.");
System.out.println("t는 현재 " + (t) + "입니다.");
}
}
}
int sum = 0;
int i = 0;
while (sum <= 100) {
System.out.println("i = " + i);
System.out.println("sum = " + sum);
sum += ++i; // i는 1씩 커지고 sum은 0부터 시작해 1,2,3 순서대로 더해 피보나치 수열이 된다.
}
break는 switch 문에서 언급했던 것처럼 자신이 포함된 반복문을 벗어나는 역할을 한다
class Control6_1 {
public static void main(String[] args) {
int sum = 0;
int i = 0;
while (true) {
if(sum > 100)
break; // 100보다 클 '때' 멈추기 때문에
++i;
sum += i;
}
System.out.println("i = " + i);
System.out.println("sum = " + sum); // sum = 105가 나온다.
}
}
continue는 자신이 포함된 반복문의 끝으로 이동하고 다음 반복으로 넘어가는 역할을 한다
전체 반복 중에서 특정 조건에서 반복을 건너뛸 때 유용
class Control6_2 {
public static void main(String[] args) {
for (int i = 0; i <= 10; i++) {
// 3의 배수는 건너뜀 : 3, 6, 9
if (i % 3 == 0)
continue;
System.out.println("i = " + i); // continue로 인해 i = 1, i = 2, i = 4, ...와 같은 결과가 나옴
}
}
}
반복문에 이름을 붙여서 하나 이상의 반복문을 벗어날 수 있다
class Control6_3 {
public static void main(String[] args) {
allLoop :
for (int i = 2; i < 10; i++) {
for (int j = 1; j < 10; j++) {
if (i == 5) {
break allLoop;
}
System.out.println(i + " * " + j + " = " + (i * j));
}
}
}
}
allLoop 부분을 삭제하면 break는 j가 포함된 반복문만 벗어나기 때문에 i 반복문을 다시 실행해 9*9=81까지 출력되고, 그대로 두면 모든 반복문을 벗어나 4*9=36까지만 출력된다.
배열 - 같은 타입의 여러 변수를 하나의 묶음으로 다루는 것
타입 변수이름[]; or 타입[] 변수이름; 으로 배열 선언 ex) int age[]; , String[] name;
타입[] 변수이름 = new 타입[길이]; 으로 배열 생성
class Arrays1_1 {
public static void main(String[] args) {
// int[] age; // 참조변수 베열 age 생성
// age = new int[5]; // 배열의 생성
int[] age = new int[5]; // 선언과 생성 동시에
age[3] = 28;
System.out.println("age[3] = " + age[3]);
int beatitudoAge = age[3];
System.out.println("beatitudoAge = " + beatitudoAge);
System.out.println("age 배열의 전체값 확인");
System.out.println("age[0] = " + age[0]); // 기본값 0
System.out.println("age[1] = " + age[1]); // 기본값 0
System.out.println("age[2] = " + age[2]); // 기본값 0
System.out.println("age[3] = " + age[3]); // 지정값 28
System.out.println("age[4] = " + age[4]); // 기본값 0
}
}
배열 길이 구하기 - 배열이름.length
배열의 한계점 - 실행 중 길이 변경 X
초기화 - 배열의 각 요소에 처음으로 값을 저장하는 것
저장하기 전 자동적으로 저장돼있는 값은 아래 표를 따른다
byte
|
0
|
short
|
0
|
int
|
0
|
long
|
0L
|
float
|
0.0f
|
double
|
0.0d
|
char
|
'\n0000'
|
boolean
|
false
|
참조형 변수(String or any Object)
|
null
|
초기화 방법 - int[] num = new int[]{1, 2, 3, 4, 5, 6, 7, 8, 9}; or int[] num = {1, 2, 3, 4, 5, 6, 7, 8, 9}; (new int[] 생략가능)
배열 출력
import java.util.Arrays;
class Arrays3_1 {
public static void main(String[] args) {
int[] arr = {100, 90, 80, 70, 60, 50, 40, 30, 20, 10};
// 배열을 가리키는 참조 변수 arr 을 출력
System.out.println("arr = " + arr);
// 메모리 주소와 비슷한 문자열이 출력 -> 실제 주소는 아닙니다.
// [I@7a81197d -> [(배열을 뜻함), I(int 타입을 뜻함), @(위치를 뜻함)
// 예외 확인 하기 - char[]
char[] chArr = {'a', 'b', 'c', 'd'};
System.out.println(chArr); // abcd 가 출력되는데 이는 println 메서드의 기능 때문!
// 배열의 요소 하나씩 출력하기
for (int i = 0; i < arr.length; i++) {
System.out.println("arr[" + i + "] = " + arr[i]);
}
// Arrays.toString(배열) : 배열의 모든 요소를 문자열로 만들어서 반환한다.
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
}
}
총합, 평균, 최대최소, 랜덤 배열
class Arrays3_2 {
public static void main(String[] args) {
int sum = 0; // 총합을 저장
float avg = 0f; // 평균을 저장
int[] score = {100, 40, 33, 50, 77, 29};
for (int i = 0; i < score.length; i++) {
System.out.println("score[" + i + "] = " + score[i]);
sum += score[i];
}
avg = sum / (float) (score.length); // 계산결과를 float 타입으로 얻기 위해 형변환
System.out.println("총합 = " + sum);
System.out.println("평균 = " + avg);
}
}
class Arrays3_3 {
public static void main(String[] args) {
int[] score = {65, 97, 88, 43, 33, 91, 28};
int max = score[0]; // 최대값을 배열의 첫 번째 값으로 초기화 한다.
int min = score[0]; // 최소값을 배열의 첫 번째 값으로 초기화 한다.
for (int i = 0; i < score.length; i++) {
if (score[i] > max) {
max = score[i];
} else if(score[i] < min) {
min = score[i];
}
}
System.out.println("최대값 = " + max);
System.out.println("최소값 = " + min);
}
}
class Arrays3_4 {
public static void main(String[] args) {
int[] numArr = {0, 1, 2, 3, 4, 5, 6, 7, 8, 9};
System.out.println("원본 = " + Arrays.toString(numArr));
for (int i = 0; i < numArr.length; i++) {
int num = (int) (Math.random() * 10); // 0 ~ 9 의 랜덤 수
int tmp = numArr[0]; // 배열의 첫 번째 수로 계속 초기화 된다.
// 랜덤한 위치의 값과 배열의 첫 번째 수가 서로 바뀐다.
numArr[0] = numArr[num];
numArr[num] = tmp;
System.out.println(i + 1 + " 번째 변경 : " + Arrays.toString(numArr));
}
System.out.println("결과 = " + Arrays.toString(numArr));
}
}
String - char[]와 메서드(기능)을 합친 것
문자열을 많이 써서 새로 만들어진 class이다
String 클래스의 주요 메서드
char charAt(int index)
|
문자열에서 해당 위치(index)에 있는 문자를 반환한다.
|
int length()
|
문자열의 길이를 반환한다.
|
String substring(int from, int to)
|
문자열에서 해당 범위(from~to)의 문자열을 반환한다.(to는 포함 안됨)
|
boolean equals(Object obj)
|
문자열의 내용이 같은지 확인한다. 같으면 true, 다르면 false
|
char[] toCharArray()
|
문자열을 문자배열(char[])로 변환해서 반환한다
|
class Arrays4_1 {
public static void main(String[] args) {
String str = "ABCDEFG";
char ch = str.charAt(3);
System.out.println("ch = " + ch); // ch = D
String str2 = str.substring(1, 4);
System.out.println("str2 = " + str2); // str2 = BCD
String str3 = str.substring(1);
System.out.println("str3 = " + str3); // str3 = BCDEFG
String str4 = str.substring(1, str.length());
System.out.println("str4 = " + str4); // str4 = BCDEFG
char[] chArr = str.toCharArray();
System.out.println("Arrays.toString(chArr) = " + Arrays.toString(chArr)); // Arrays.toString(chArr) = [A, B, C, D, E, F, G]
}
}
String 배열의 선언과 생성 - String[] name = new String[3]; (3개의 문자열을 담을 수 있는 배열, 기본값은 null)
class Arrays4_2 {
public static void main(String[] args) {
String[] strArr = {"축구", "야구", "골프", "테니스"};
System.out.println("Arrays.toString(strArr) = " + Arrays.toString(strArr)); // Arrays.toString(strArr) = [축구, 야구, 골프, 테니스]
String[] strArr2 = new String[4];
System.out.println("Arrays.toString(strArr2) = " + Arrays.toString(strArr2)); // Arrays.toString(strArr2) = [null, null, null, null]
}
}
2차원 배열(테이블 형태의 데이터를 저장하기 위한 배열)의 선언과 생성 - int[][] score = new int[행의 수][열의 수];
초기화 - int[][] score = new int[][]{{}, {}, {}, {}}; or int[][] score = {{}, {}, {}, {}};
class Arrays5_1 {
public static void main(String[] args) {
int[][] score = {
{88, 35, 100},
{84, 60, 55},
{100, 99, 72},
{33, 54, 77}
};
//길이 확인하기
System.out.println("score.length = " + score.length);
System.out.println("score[0].length = " + score[0].length);
System.out.println();
// 출력 예 1 : Arrays.toString()
System.out.println("Arrays.toString()");
System.out.println("Arrays.toString(score[0]) = " + Arrays.toString(score[0]));
System.out.println("Arrays.toString(score[1]) = " + Arrays.toString(score[1]));
System.out.println("Arrays.toString(score[2]) = " + Arrays.toString(score[2]));
System.out.println("Arrays.toString(score[3]) = " + Arrays.toString(score[3]));
System.out.println();
// 출력 예 2 : for
System.out.println("for");
for (int i = 0; i < score.length; i++) {
for (int j = 0; j < score[i].length; j++) {
System.out.println("score[" + i + "][" + j + "] = " + score[i][j]);
}
System.out.println();
}
System.out.println();
// 출력 예 3 : 향상된 for
System.out.println("향상된 for");
for (int[] ints : score) {
for (int it : ints) {
System.out.println("anInt = " + it);
}
System.out.println();
}
}
}
문자열 비교 - 1차원 비교 = equals(), 2차원 비교 = deepEquals()
class Arrays6_1 {
public static void main(String[] args) {
int[] num = {0, 1, 2};
int[][] score = {
{88, 35, 100},
{84, 60, 55},
{100, 99, 72},
{33, 54, 77}
};
System.out.println("Arrays.toString(num) = " + Arrays.toString(num));
System.out.println("Arrays.deepToString(score) = " + Arrays.deepToString(score));
System.out.println();
String[][] strArr1 = {
{"AAA","BBB","CCC"},
{"aaa","bbb","ccc"},
};
String[][] strArr2 = {
{"AAA","BBB","CCC"},
{"aaa","bbb","ccc"},
};
// 1 차원 비교에는 equals
System.out.println("Arrays.equals(strArr1[0], strArr2[0]) = " + Arrays.equals(strArr1[0], strArr2[0])); // true
System.out.println("Arrays.equals(strArr1[1], strArr2[0]) = " + Arrays.equals(strArr1[1], strArr2[0])); // false
System.out.println("Arrays.equals(strArr1, strArr2) = " + Arrays.equals(strArr1, strArr2)); // false
System.out.println();
// 다차원 비교에는 deepEquals
System.out.println("Arrays.deepEquals(strArr1, strArr2) = " + Arrays.deepEquals(strArr1, strArr2)); // true
}
}
배열 복사 - copyOf() = 하나 복사, copyOfRange() = 범위 복사
class Arrays6_2 {
public static void main(String[] args) {
int[] arr = {0,1,2,3,4};
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
System.out.println();
// copyOf
int[] arr2 = Arrays.copyOf(arr, arr.length);
System.out.println("Arrays.toString(arr2) = " + Arrays.toString(arr2));
int[] arr3 = Arrays.copyOf(arr, 3);
System.out.println("Arrays.toString(arr3) = " + Arrays.toString(arr3));
int[] arr4 = Arrays.copyOf(arr, 7); // 범위가 넘어가는 복사는 초기화값이 들어간다.
System.out.println("Arrays.toString(arr4) = " + Arrays.toString(arr4));
System.out.println();
// copyOfRange
int[] arr5 = Arrays.copyOfRange(arr, 2, 4);
System.out.println("Arrays.toString(arr5) = " + Arrays.toString(arr5));
int[] arr6 = Arrays.copyOfRange(arr, 0, 7);// 범위가 넘어가는 복사는 초기화값이 들어간다.
System.out.println("Arrays.toString(arr6) = " + Arrays.toString(arr6));
}
}
정렬 - sort()
class Arrays6_3 {
public static void main(String[] args) {
int[] arr = {3, 1, 8, 5, 9, 2, 10, 7, 6, 4};
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr));
System.out.println();
Arrays.sort(arr); // 오름차순으로 정렬됩니다.
System.out.println("sort");
System.out.println("Arrays.toString(arr) = " + Arrays.toString(arr)); // Arrays.toString(arr) = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
}
}