본문 바로가기

STUDY/Java

[JAVA] 제어문(if, switch), 반복문(for, while, do while), 배열, ArrayList

 
 

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

 

아스키

American Standard Code for Information Interchange의 약어. 미국 표준 협회(ANSI)가 1962년에 제정한 정보 교환용 표준 코드를 말한다. 7비트(패리티 비트를 포함하여 8비트) 구성의 코드이며 27 = 128 종류의 제

terms.naver.com

 

 

 

 

 

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