01 제어문
1. if문
if(조건)
조건이 참일 때, 실행문
else if(조건)
조건이 참일 때, 실행문
else
위 조건이 모두 아닐 때, 실행문
국어, 영어 점수를 입력 받아 총점, 평균, 학점 구하기
Score.java
public com.test;
import java.util.Scanner;
public class Score{
public static void main(String[] args){
//선언
int kor, eng, total;
double avg;
char result;
//입력
Scanner sc = new Scanner(System.in);
System.out.print("국어 점수를 입력하세요: ");
kor = sc.nextInt();
System.out.print("영어 점수를 입력하세요: ");
eng = sc.nextInt();
//제어(조건)
total = kor + eng; // 국어점수 + 영어점수
avg = (double) total / 2; // 평균, casting, 형변환
if(avg >= 90)
result = 'A';
else if(avg >= 80)
result = 'B';
else if(avg >= 70)
result = 'C';
else if(avg >= 60)
result = 'D';
else
result = 'F';
//출력
System.out.println("총점은 " + total + "이고, 평균은 " + avg + "입니다.");
System.out.println("학점은 " + result + "입니다.");
}
}
[결과화면]
* 조건의 종류
① a > b : a가 b보다 큰가?
② a < b : a가 b보다 작은가?
③ a >= b : a가 b보다 크거나 같은가?
④ a <= b : a가 b보다 작거나 같은가?
⑤ 조건1 && 조건2 : 조건1과 조건2 모두 만족할 때 <AND>
⑥ 조건1 || 조건 2 : 조건1과 조건2 중 하나 이상의 조건을 만족할 때 <OR>
2. Switch문
Switch(값 or 식){
case 값1:
처리문
break;
case 값2:
처리문
break;
default: // 값 1,2 모두 아닐 경우
Switch 예제 ("break;"의 필요성)
SwitchExample.java
package com.test;
public class SwitchExample{
public static void main(String[] args){
int a = 1;
switch(a){
case 1:
System.out.println("1 입니다.");
//break;
case 2:
System.out.println("2 입니다.");
//break;
default:
System.out.println("이외의 값 입니다.");
}
}
}
[결과화면]
a = 1 이지만 3개의 처리문이 모두 출력됨 왜?
-> break가 없기 때문에, case마다 break를 해줘야 함
if문과 swtich문 비교
Score.java
public com.test;
import java.util.Scanner;
public class Score{
public static void main(String[] args){
int kor, eng, total;
double avg;
char result=;
Scanner sc = new Scanner(System.in);
System.out.print("국어 점수를 입력하세요: ");
kor = sc.nextInt();
System.out.print("영어 점수를 입력하세요: ");
eng = sc.nextInt();
total = kor + eng; // 국어점수 + 영어점수
avg = (double) total / 2; // 평균, casting, 형변환
if(avg >= 90)
result = 'A';
else if(avg >= 80)
result = 'B';
else if(avg >= 70)
result = 'C';
else if(avg >= 60)
result = 'D';
else
result = 'F';
System.out.println("총점은 " + total + "이고, 평균은 " + avg + "입니다.");
System.out.println("학점은 " + result + "입니다.");
}
}
public com.test;
import java.util.Scanner;
public class Score{
public static void main(String[] args){
int kor, eng, total;
double avg;
char result=;
Scanner sc = new Scanner(System.in);
System.out.print("국어 점수를 입력하세요: ");
kor = sc.nextInt();
System.out.print("영어 점수를 입력하세요: ");
eng = sc.nextInt();
total = kor + eng; // 국어점수 + 영어점수
avg = (double) total / 2; // 평균, casting, 형변환
swtich(avg/10){ // 평균을 10으로 나눈 몫
case 10: // 평균 100
case 9: // 평균 90 - 99
result = 'A'; break;
case 8: // 평균 80 - 89
result = 'B'; break;
case 7: // 평균 70 - 79
result = 'C'; break;
case 6: // 평균 60 - 69
result = 'D'; break;
defaul: // 평균 59 이하
result = 'F';
System.out.println("총점은 " + total + "이고, 평균은 " + avg + "입니다.");
System.out.println("학점은 " + result + "입니다.");
}
}
02 반복문
1. for(변수초기값; 조건식; 증감식)
1-1. 단일 반복문 for()
단일 반복문 예제
ForExample.java
package com.test;
public class ForExample{
public static void main(String[] args){
for(int i=1; i<=10; i=i+2){
System.out.print(i + " ");
}
}
}
[결과화면]
1-2. 다중 반복문 for() { for() }
다중 반복문 예제
ForExample.java
package com.test;
public class ForExample{
public static void main(String[] args){
int row, col, a=0; // row행 col열
for(row=1; row<=3; row++){
for(col=1; col<=4; col++){
a=a+1;
System.out.print(a + "\t"); // \t: tab 띄어쓰기
}
System.out.println();
}
}
}
[결과화면]
2. while문
while(조건){
조건이 참일 때, 실행문
}
While문 예제
WhileTest.java
package com.test;
public class WhileTest{
public static void main(String[] args){
int a = 1;
while(true){ // 무한 loop
System.out.print(a + " ");
a++;
if(a == 11) // a가 11이면
break; // while(반복문)에서 빠져나가라
}
}
}
[결과화면]
3. do while문
do{
실행문
}while(조건)
* while문과 do while문의 차이
-> do while문은 무조건 처음 한번은 실행 후 조건 판별, 거의 안 쓰임
03 배열
1. 배열
- 연속으로 나열된 자료 구조, 대량의 기억장소(변수)를 확보 가능
2. 배열 선언과 초기화
- 배열을 사용하려면 선언이 먼저
↓ 배열 선언하는 문법
자료형[] 배열이름 = new 자료형[개수];
자료형 배열이름[] = new 자료형[개수]; |
ex) int[] studentID new int[5]; // int형 요소가 5개인 배열 선언
- 배열을 선언하면 선언한 자료형과 배열 길이에 따라 메모리가 할당됨
- 배열을 선언하면 각 요소의 값이 초기화 된다 (정수는 0, 실수는 0.0, 객체 배열은 null로)
* c언어는 따로 초기화를 해야 하지만 자바는 선언하면 알아서 초기화 됨
* 배열 선언과 동시에 특정 값으로 초기화를 할 경우 [] 안의 개수는 생략
ex) int[] studentID = new int[] {101, 102, 103};
int[] studentID = {101, 102, 103}; // new int[]를 생략해도 무방
3. 인덱스 []
- 배열에서 인덱스는 배열 요소가 저장된 메모리 위치를 찾아주는 역할을 함
ex) 배열에서 [i] 인덱스 연산을 하면 i 번째 요소의 위치를 찾아 저장하거나 가져올 수 있음
- 배열 순서는 0번부터 시작 (배열 길이가 n이라면 배열 순서는 0 ~ n-1까지)
배열의 필요성 예제
ArrayExample.java
package com.test;
public class ArrayExample{
public static void main(String[] args){
int a = 34;
int b = 12;
int c = 26;
System.out.println("a = " + a);
System.out.println("b = " + b);
System.out.println("c = " + c);
}
}
[결과화면]
* 값을 넣을 때마다 변수가 필요 --> 낭비
배열을 사용하여 변수 출력하기
ArrayExample.java
package com.test;
public class ArrayExample{
public static void main(String[] args){
int [] a = new int[5];
a[0] = 34;
a[1] = 12;
a[2] = 26;
for(int i=0; i<a.length(); i++){
System.out.println("a[" + i + "] = " + a[i]);
}
}
}
① 4행: new 라는 명령어는 객체를 생성하는 명령어
[결과화면]
객체.메소드() 사용하기 (length())
Example.java
위의 예제에서 "a."을 입력하면 메소드 예시들이 나옴 -> 왜? new 라는 명령어로 a라는 객체를 생성했기 때문에
package com.test;
public class Example {
public static void main(String[] args){
int [] a = new int[5];
a[0] = 34;
a[1] = 12;
a[2] = 26;
System.out.println(a.length);
}
}
① 8행: 배열 a의 길이를 반환
[결과화면]
객체.메소드() 사용하기 (hashCode())
HashTeset.java
package com.test;
public class HashTest{
public static void main(String[] args){
String[] a = {"백두산", "한라산", "북한산", "광교산", "소백산"};
for(int i=0; i<a.length; i++){
System.out.print(a.[i] + " ");
System.out.println(a.hashCode());
}
}
① 7행: a 객체가 저장되어 있는 주소 반환
[결과화면]
4. 문자형 배열
- 문자형 배열은 위와 마찬가지지만 자료형만 변경
문자열 배열 예제
CharArray.java
package com.test;
public class CharArray{
public static void main(String[] args){
char[] alphabets = new char[26];
char ch = 'A';
for(int i=0; i<alphabet.length; i++, ch++){
alphabets[i] = ch;
System.out.print(alphabets[i] + "=" + (int)alphabets[i] + " ");
}
}
}
[결과화면]
* 알파벳 문자는 실제 메모리에 아스키 코드 값으로 저장되기 때문에 ch값에 1을 더하면 1만큼 증가한 값이 배열에 저장된다
*(int)alphabets[i] // char형 문자를 int형 정수로 변환
↓ 아스키코드표
https://terms.naver.com/entry.naver?docId=815406&cid=42344&categoryId=42344
5. 객체 배열
- 참조 자료형 변수도 여러 개를 배열로 사용 가능
객체 배열 예제
Book.java
package com.test;
public class Book {
String bookName;
String author;
public Book(String bookName, String author) {
super();
this.bookName = bookName;
this.author = author;
}
public String getBookName() {
return bookName;
}
public String getAuthor() {
return author;
}
public static void main(String[] args) {
Book[] library = new Book[5];
library[0] = new Book("태백산맥", "조정래");
library[1] = new Book("데미안", "헤르만 헤세");
library[2] = new Book("어떻게 살 것인가", "유시민");
library[3] = new Book("토지", "박경리");
library[4] = new Book("어린왕자", "생텍쥐페리");
for(int i=0; i<library.length; i++) {
System.out.println(library[i].bookName + ", " + library[i].author);
}
for(int i=0; i<library.length; i++) {
System.out.println(library[i]);
}
}
}
① 3행: Book 클래스는 책 이름과 저자를 멤버 변수로 가지는 클래스
② 7행: 책 이름과 저자를 매개변수로 받는 생성자 생성
③ 13행: 메인 함수에서 이 클래스를 사용할 때 멤버 변수 값을 가져오거나 지정할 수 있도록 get() set() 메서드 구현 (set은 현재 안 쓰므로 get만)
④ 22행: 인스턴스 생성 후 배열에 저장
* 22행: 각각의 Book 인스턴스 주소 값을 담을 공간 5개를 생성 (null 값으로 초기화 되어있음)
* 24~28행: Book 인스턴스를 만들어 배열에 직접 저장
⑤ 30행: 배열 출력하기
⑥ 33행: 각 배열 요소가 가지고 있는 인스턴스 주소 값 출력하기
[결과화면]
6. 배열 복사하기 - System.arraycopy() 메서드 이용
System.arraycopy(src, srcPos, dest, destPost, length)
- src: 복사할 배열 이름
- srcPos: 복사할 배열의 첫 번째 위치
- dest: 복사해서 붙여 넣을 대상 배열 이름
- destPost: 복사해서 대상 배열에 붙여 넣기를 시작할 첫 번째 위치
- length: src에서 dest로 자료를 복사할 요소 개수
6-1. 얕은 복사
- 객체 배열의 요소에 저장된 값은 인스턴스 자체가 아니고 인스턴스의 주소 값이기 때문에 객체 배열을 복사하면 인스턴스를 따로 생성하는 것이 아니라 기존 인스턴스의 주소 값만 복사하는 방법
- 복사되는 배열의 인스턴스 값이 변경되면 복사된 배열의 인스턴스 값도 같이 변경됨
얕은 복사 예제
Book.java
package com.test;
public class Book {
String bookName;
String author;
public Book(String bookName, String author) {
super();
this.bookName = bookName;
this.author = author;
}
public String getBookName() {
return bookName;
}
public String getAuthor() {
return author;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public void setAuthor(String author) {
this.author = author;
}
public static void main(String[] args) {
Book[] bookArray1 = new Book[3];
Book[] bookArray2 = new Book[3];
bookArray1[0] = new Book("태백산맥", "조정래");
bookArray1[1] = new Book("데미안", "헤르만 헤세");
bookArray1[2] = new Book("어린왕자", "생텍쥐베리");
System.arraycopy(bookArray1, 0, bookArray2, 0, 3);
// bookArray1의 0번째 요소부터 3개를 bookArray2의 0번째 요소부터 3번째 요소까지 복사
System.out.println("=== bookArray2 ===");
for(int i=0; i<bookArray2.length; i++) {
System.out.println(bookArray2[i].bookName + ", " + bookArray2[i].author);
}
System.out.println();
bookArray1[0].setBookName("나목");
bookArray1[0].setAuthor("박완서");
System.out.println("=== 수정 후 bookArray1 ===");
for(int i=0; i<bookArray1.length; i++) {
System.out.println(bookArray1[i].bookName + ", " + bookArray1[i].author);
}
System.out.println();
System.out.println("=== 수정 후 bookArray2 ===");
for(int i=0; i<bookArray2.length; i++) {
System.out.println(bookArray2[i].bookName + ", " + bookArray2[i].author);
}
}
}
① 34행: bookArray1의 첫번째 요소부터 3개를 bookArray2의 첫번째 요소부터 복사 후 복사된 배열 출력
② 42-43행: bookArray1의 첫번째 요소의 값을 변경
[결과화면]
6-2. 깊은 복사
- System.arraycopy() 메서드를 사용하여 객체 배열을 복사하면 항상 인스턴스 주소가 복사됨
- 배열 요소 값을 복사하고 싶을 땐 깊은 복사
깊은 복사 예제
Book.java
package com.test;
public class Book {
String bookName;
String author;
public Book(String bookName, String author) {
super();
this.bookName = bookName;
this.author = author;
}
public Book() { }
public String getBookName() {
return bookName;
}
public String getAuthor() {
return author;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public void setAuthor(String author) {
this.author = author;
}
public static void main(String[] args) {
Book[] bookArray1 = new Book[3];
Book[] bookArray2 = new Book[3];
bookArray1[0] = new Book("태백산맥", "조정래");
bookArray1[1] = new Book("데미안", "헤르만 헤세");
bookArray1[2] = new Book("어린왕자", "생텍쥐베리");
bookArray2[0] = new Book();
bookArray2[1] = new Book();
bookArray2[2] = new Book();
for(int i=0; i<bookArray1.length; i++) {
bookArray2[i].setBookName(bookArray1[i].getBookName());
bookArray2[i].setAuthor(bookArray1[i].getAuthor());
}
System.out.println("=== bookArray2 ===");
for(int i=0; i<bookArray2.length; i++) {
System.out.println(bookArray2[i].bookName + ", " + bookArray2[i].author);
}
System.out.println();
bookArray1[0].setBookName("나목");
bookArray1[0].setAuthor("박완서");
System.out.println("=== 수정 후 bookArray1 ===");
for(int i=0; i<bookArray1.length; i++) {
System.out.println(bookArray1[i].bookName + ", " + bookArray1[i].author);
}
System.out.println();
System.out.println("=== 수정 후 bookArray2 ===");
for(int i=0; i<bookArray2.length; i++) {
System.out.println(bookArray2[i].bookName + ", " + bookArray2[i].author);
}
}
}
① 13행: 디폴트 생성자 생성
② 디폴트 생성자로 bookArray2 배열의 인스턴스를 생성
③ bookArray1 배욜 요소를 새로 생성한 booKArray2 배열 인스턴스에 복사
* 복사할 배열에 인스턴스를 따로 생성한 후 요소 값을 복사하면 서로 다른 인스턴스를 가리킴
[결과화면]
7. 다차원 배열
7-1. 다차원 배열
- 이차원 이상으로 구현한 배열
int[ ][ ] 배열이름 = new int[행][열];
|
ex) int[ ][ ] arr = {{1,2,3}. {4,5,6}};
04 ArrayList
- 기본 배열은 항상 배열 길이를 설정해야 하는데 중간에 배열 길이를 변경하려면?
▶ ArrayList 사용!
1. ArrayList 클래스의 주요 메서드
메서드
|
설명
|
boolean add(E e)
|
요소 하나를 배열에 추가 (E는 요소의 자료형을 의미)
|
int size()
|
배열에 추가된 요소 전체 개수를 반환
|
E get(int index)
|
배열의 index 위치에 있는 요소 값을 반환
|
E remove(int index)
|
배열의 index 위치에 있는 요소 값을 제거하고 그 값을 반환
|
goolean isEmpty()
|
배열이 비어 있는지 확인
|
* add() 메서드를 이용하면 배열 길이와 상관없이 객체를 추가 가능
2. ArrayList 사용하기
- ArrayList<E> 배열이름 = new ArrayList<E>(); // ArrayList 선언 (E는 자료형)
ArrayList 예제
ArrayListTest.java
package com.array;
import java.util.ArrayList;
class Book {
String bookName;
String author;
public Book(String bookName, String author) {
super();
this.bookName = bookName;
this.author = author;
}
public Book() { }
public String getBookName() {
return bookName;
}
public String getAuthor() {
return author;
}
public void setBookName(String bookName) {
this.bookName = bookName;
}
public void setAuthor(String author) {
this.author = author;
}
}
public class ArrayListTest {
public static void main(String[] args) {
ArrayList<Book> library = new ArrayList<Book>();
library.add(new Book("태백산맥", "조정래"));
library.add(new Book("데미안", "헤르만 헤세"));
library.add(new Book("어떻게 살 것인가", "유시민"));
library.add(new Book("어린왕자", "생텍쥐베리"));
for(int i=0; i<library.size(); i++) {
Book book = library.get(i);
System.out.println(book.getBookName() + ", " + book.getAuthor());
}
System.out.println();
for(Book k : library) {
System.out.println(k.getBookName() + ", " + k.getAuthor());
}
}
}
① 34행: Book 클래스로 ArrayList 생성
② 36~39행: add를 이용하여 요소 추가
③ 41~44행: for문으로 ArrayList 출력
④ 47~49행: 빠른 for문(향상된 for문) 으로 배열 (ArrayList) 출력
* k는 임의의 변수, 아무거나 상관 없음
[결과화면]
출처: Do it! 자바 프로그래밍 입문, 이지스퍼블리싱
'STUDY > Java' 카테고리의 다른 글
[JAVA] 추상 클래스, 인터페이스 (0) | 2021.11.05 |
---|---|
[JAVA] 상속과 다형성 (0) | 2021.11.05 |
[JAVA] this, static 변수 (0) | 2021.11.05 |
[JAVA] 변수, 자료형, 상수, 형변환 (0) | 2021.10.20 |
[JAVA] JAVA, ECLIPSE 설치하기 (0) | 2021.10.20 |